如果这是一个愚蠢的问题,我深表歉意——我是 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()
为什么?