Selenium:如何点击webtable中的链接图片?

时间:2014-04-24 22:12:47

标签: html image selenium hyperlink html-table

我的页面(.html)中有以下表格:

<table>
 <thead>
  <td>Id</td>
  <td>Descricao</td>
  <td>Quant</td>
  <td>Preco</td>
  <td>Acoes Disponiveis</td>
 </thead>
 <tbody>
  <tr>
   <td>1</td>
   <td>Item Produto XMasInicial</td>
   <td>20</td>
   <td>2.30</td>
   <td>
    <a href="passoInicial.html">Cadastrar Outro</a> 
    <a href="passoInicial.html"><img src="exit.png" /></a>
   </td>
  </tr>
  <tr>
   <td>2</td>
   <td>Item Produto XMasFinal</td>
   <td>50</td>
   <td>1.90</td>
   <td>
    <a href="passoFinal.html">Ficar na mesma</a>
    <a href="passoFinal.html"><img src="exit.png" /></a>
   </td>
  </tr>
  <tr>
   <td>3</td>
   <td>Item Produto XMasGoogle</td>
   <td>50</td>
   <td>1.90</td>
   <td>
    <a href="paginaVazia.html">Ir para o Google</a> 
    <a href="paginaVazia.html"><img src="exit.png" /></a>
   </td>
  </tr>
 </tbody>
</table>

我需要测试此页面:点击&#34; exit.png&#34;图像(这是一个链接)。 我写了下面的一段代码(在for语句中,从i = 0到2),但它不起作用:

List<WebElement> imgLinks = this.webDriver.findElements(By.xpath("//img[contains(@src,'exit.png')]"));
for(...) {
imgLinks.get(i).click();
//some code to return for this html page (back) and click in the next image...
}

结果是以下错误:

  

org.openqa.selenium.StaleElementReferenceException:陈旧元素引用:元素未附加到页面文档

我使用 // a / img [contains(@src,&#39; exit.png&#39;)] 而不是 // img [contains(@ src,& #39; exit.png&#39;)] ,但它不会起作用。

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

问题在于,当您点击链接时,imgLinks中的链接集会立即变得陈旧。回到页面,尝试与imgLinks列表进行交互将导致状态元素引用错误。

这种方法应该对你有用。每次返回页面时都会显示一个新列表。

List<WebElement> imgLinks = this.webDriver.findElements(By.xpath("//img[contains(@src,'exit.png')]"));
int imgLinksLength = imgLinks.size();
for(int i = 0; i < imgLinksLength ; i++) {
    List<WebElement> imgLinks = this.webDriver.findElements(By.xpath("//img[contains(@src,'exit.png')]"));
    imgLinks.get(i).click();
    //some code to return for this html page (back) and click in the next image...
}