点击使用XPath超文本链接(Clicking on a hypertext link using

2019-07-02 15:30发布

道歉,如果这是一个愚蠢的问题 - 我是新来硒。

我有一个网页,我测试的是有一个表中的一些超文本链接。 该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()

为什么?

Answer 1:

您可以使用收集的所有环节一起findElements然后通过数组迭代。

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

和你的情况

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

然后通过重复links ,并点击其中的每一个



Answer 2:

请注意,在问题的表达

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()


Answer 3:

列表链接= driver.findElements(By.tagName( “A”));

然后通过链接进行迭代,并点击使用循环他们中的每一个



文章来源: Clicking on a hypertext link using XPath