道歉,如果这是一个愚蠢的问题 - 我是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>
我想测试每个“显示”链接的点击次数。它们都有相同的文本,所以我不能通过linktext引用它们。我一直在用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()
为什么?
答案 0 :(得分:0)
您可以使用findElements
收集所有链接,然后遍历数组。
示例 -
List<WebElement> inputs = driver.findElements(By.xpath("//input"));
,在你的情况下
List<WebElement> links = driver.findElements(By.linkText("Show"));
然后遍历links
并点击其中的每一个
答案 1 :(得分:0)
请注意问题中的表达式
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]")).click()
选择td
元素,如果没有定义链接或事件。在浏览器中单击它时应该打开一个链接,这只会因为您有效地点击标签内部的内容以及td
本身而发生。上面的代码只点击td
,忽略其内容。
您必须更深入地了解当前所选a
内的td
元素。像这样:
driver.findElement(By.xpath("//div[@id='content']/div/form/div/table[2]/tbody/tr/td[1]/a")).click()
答案 2 :(得分:0)
然后遍历链接并使用for循环点击其中的每一个