【发布时间】:2012-10-25 20:30:46
【问题描述】:
抱歉,如果这是一个愚蠢的问题 - 我是 Selenium 的新手。
我有一个正在测试的网页,它的表格中有几个超文本链接。 HTML 如下所示:
<table>
<thead>
<tr>
<td><b>History</b></td>
<td><b>Attributes</b></td>
<td><b>Xml</b></td>
</tr>
</thead>
<tbody>
<tr>
<td><a href=link here>Show</a></td>
<td><a href=link here>Show</a></td>
<td><a href=link here>Show</a></td>
</tr>
</tbody>
</table>
我想测试对每个“显示”链接的点击。它们都有相同的文本,所以我无法通过链接文本引用它们。我一直通过 XPath 引用它们,因此:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/thead/tr/td[1]").getText()
正确返回“历史”和
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]").getText()
正确返回“显示”。
所以我认为:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]")).click()
将单击第一列中的“显示”链接。但它没有 - 没有任何反应。
如果我这样做:
driver.findElement(By.linkText("Show")).click()
它点击第一个“显示”链接,这是我所期望的。
我也可以:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2].1.0")).click()
这样就行了
driver.findElement(By.xpath("(//a[contains(text(),'Show')])[2]")).click()
所以,总而言之,所有这些工作:
driver.findElement(By.linkText("Show")).click()
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2].1.0")).click()
driver.findElement(By.xpath("(//a[contains(text(),'Show')])[1]")).click()
但这不是:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]")).click()
为什么?
【问题讨论】:
-
我认为你应该更深入地关注一个元素,到
td中的a。driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]/a")).click()。您应该点击链接,而不是包含它的单元格。 -
谢谢,汤姆 - 成功了。
-
我会添加它作为答案。