【问题标题】:How to "firmly" locate an element in a table? Selenium如何“牢固地”定位表格中的元素?硒
【发布时间】: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">&nbsp;<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


【解决方案1】:

如果你不能改变 HTML 并且想使用属性进行选择,你可以这样写:

//table[@border=0][@width=820]//tbody//tr[1]//td//b[3]

【讨论】:

  • 为什么不使用像//td[starts-with(., 'Results')] 这样更简单的东西?
  • 酷,我不知道这种语法,这当然很有用。请确保您不在多语言环境中,使用这种选择器,翻译可能会破坏您的测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 2020-08-26
  • 2021-11-11
  • 2018-07-13
  • 2020-07-23
  • 2019-09-30
相关资源
最近更新 更多