使用XPath单击超文本链接

时间:2012-10-25 20:30:47

标签: java xpath selenium click

道歉,如果这是一个愚蠢的问题 - 我是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()

为什么?

3 个答案:

答案 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)

列出链接= driver.findElements(By.tagName(“a”));

然后遍历链接并使用for循环点击其中的每一个

相关问题