【问题标题】:Targeting an HTML element with Selenium using xpath使用 xpath 使用 Selenium 定位 HTML 元素
【发布时间】:2014-03-13 05:42:55
【问题描述】:

在使用 Java 中的 Selenium WebDriver 编写网站测试程序的过程中,我正在浏览一位同事有些凌乱的 html。到目前为止一切进展顺利(我已经从 SO 中找到并使用了一些有用的建议),但我一直坚持如何定位这个 html 中的特定元素。

<tr>
<td valign="top" class="col_1">
    <a target="content" href="link_text_omitted" class="no">RLS DISABILITY
    </a>
</td>
<td class="col_2">
    <a target="asdf" href="https://link_text_omitted">
    </a>
</td>
<td class="col_3">
</td>
<td class="col_4">$0.00 </td>
<td class="col_5">180/180- $3300.00</td>
<td class="col_6">
    <a target="content" href="link_text_omitted" class="ecurrent">$43.23
    </a> 
</td>
</tr>

出于隐私原因,我删除了上述特定网址。我在页面上有大约十几个其他 &lt;tr&gt; 元素,格式相同,但文本值和金额不同 (col_1, col_4, col_6)。我需要访问[td class="col_6"] 中的$43.23 文本以及[td class="col_4"] 中的$0.00。我不能只通过类名来选择它,因为页面上还有许多其他元素,它们也是 [td class="col_6"] 以及 [a class="ecurrent"]。

这个元素相对于其他类似元素的真正识别特征是[td class="col_1"] 中的“RLS DISABILITY”文本,以及URL 中被省略的部分文本。

我一直在尝试使用一些复杂的 xpath 字符串来获取它,但我无法完全得到我想要的。到目前为止,我最接近的是:

WebElement RLSDisabilityName = driver.findElement(By.xpath("//td[a/text()='RLS DISABILITY']"));

我相信会选择第一个 [td](但我不确定)。

我想我可以使用 By.partialText 选择带有 $43.23 的 [a] 标记,但是所需的部分文本是一个相当长的 URL,我想让它便于在其他类似网站上使用。

非常感谢任何建议。 :)

【问题讨论】:

  • 你知道你的元素会在哪一行吗?我的意思是它总是在第一个/第二个 tr 标记中吗?
  • 尝试说服你的同事在代码中为你添加一些id属性...

标签: java html selenium xpath


【解决方案1】:

老实说,我认为你走在正确的道路上。不要担心可移植性,HTML 的可移植性根本不够。

您绝对可以使用 XPath 选择器来做到这一点,而且您拥有的选择器绝对是在正确的路径上。

也就是说,另一种可能性是使用每个tds 创建一个List&lt;WebElement&gt;。然后,您可以遍历列表并拉出您喜欢的列表。这样您就可以访问getText() 等方法。

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 2021-05-03
    相关资源
    最近更新 更多