2

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

为什么?

4

3 回答 3

0

列表链接 = driver.findElements(By.tagName("a"));

然后遍历链接并使用 for 循环单击每个链接

于 2012-10-29T12:45:23.117 回答
0

您可以通过使用将所有链接收集在一起findElements,然后遍历数组。

例子 - List<WebElement> inputs = driver.findElements(By.xpath("//input"));

在你的情况下

List<WebElement> links = driver.findElements(By.linkText("Show"));

然后遍历links并单击它们中的每一个

于 2012-10-25T20:51:01.897 回答
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()
于 2012-10-26T19:49:51.723 回答