如果这是一个愚蠢的问题,我很抱歉 - 我是 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()
单击第一列中的“显示”链接。但事实并非如此——什么也没有发生。
If I do:
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()
Why?