【发布时间】:2023-03-24 20:41:01
【问题描述】:
如何在下表中找到元素“1988”(第四行):
<table border="0" width="820" cellpadding="2" cellspacing="0">
<tbody>
<tr valign="top">
<td class="default" width="100%">Results <b>1</b> to <b>10</b> of <b>1988</b></td>
</tr>
<tr valign="top">
<td class="default" bgcolor="#C0C0C0"> <font class="resultsheader"> ...etc
</tr>
</tbody>
</table>
重要提示:我知道一种可行的方法(By.xpath):
driver.findElement(By.xpath("//td[@width='100%']")).getText();
但是,这种方式并不总是有效。该页面是动态的,因此无论页面发生什么变化,我都需要一种方法来定位该元素。 我尝试了以下方法,但我不确定:
By.xpath("//html//body//table//tbody//tr[3]//td//table//tbody//tr//td[2]//table[4]//tbody//tr[1]//td//b[3]"
【问题讨论】:
-
如果您可以影响 HTML 代码,最好在其中放置一个类以保持测试不那么“脆弱”。如果没有,也许你应该指定代码的动态部分 - 如果有任何变化,就没有办法编写测试,因为你不知道你在寻找什么。
-
@Richard。问题是当我使用以下方法找到它时: By.xpath("//td[@width='100%']"...它可以工作(但并非总是如此!)因为有时页面会有其他元素也可以通过相同的 xpath 定位,我最终定位到错误的元素... 我希望将此元素定位为该表的成员,该表不会改变,即无论如何该表都是静态的页面发生了什么。我该怎么做?应该有办法
-
那张表中的“静态”是什么?似乎不是,至少“1988”可以改变。什么确切地在该表中是独一无二的,永远不会出现在页面的其他地方?
-
您的选择器(长选择器)可能会起作用(它可能会选择 1988),但前提是桌子周围的结构不是很动态。您可以更改 HTML 代码吗?如果你给表格一个类,你可以写一个简单、可靠的选择器。
-
@Richard 我不允许更改 html。该表本身在该页面上是唯一的,但是 (1988) 元素的 xpath 不是唯一的。所以我想如果我指定表格属性,比如 width="820" cellpadding="2",就足以导航到该表格......但我不知道该怎么做......这也是怎么回事不起作用: By.xpath("//html//body//table//tbody//tr[3]//td//table//tbody//tr//td[2]//table[4 ]//tbody//tr[1]//td//b[3]"....另外,这是导航表格元素的正确方法吗?
标签: selenium xpath html-table