【发布时间】: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>
出于隐私原因,我删除了上述特定网址。我在页面上有大约十几个其他 <tr> 元素,格式相同,但文本值和金额不同 (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属性...