Selenium 问题:过时的元素参考:元素未附加到页面文档 - 单击预期文本后

问题描述

我正在执行的 selenium web 测试有问题。单击并将我带到下一页(这是正确的)后,我不断收到陈旧的元素引用错误


WebDriver driver = DriverFactory.getWebDriver()

WebElement PositionTable = driver.findElement(By.xpath('//td[2]/table/tbody/tr/td/table'))

List<WebElement> Rows = PositionTable.findElements(By.tagName('tr'))

println('No. of rows: ' + Rows.size())


table: for (int i = 0; i < Rows.size(); i++) {
    
    List<WebElement> Cols = Rows.get(i).findElements(By.tagName('td'))
    
   for (int j = 0; j < Cols.size(); j++) {
       if (Cols.get(j).getText().equalsIgnoreCase(ExpectedPosition)) {
           
           
          Cols.get(j).findElement(By.tagName('a')).click()
          WebUI.delay(5)

          table: break
          
          } 
          }
            
          }

解决方法

如果单击按钮更改了页面 html 中的任何内容,则引用将丢失。您已再次找到所有元素。所以改变你的代码如下

WebElement PositionTable = driver.findElement(By.xpath('//td[2]/table/tbody/tr/td/table'))

List<WebElement> Rows = PositionTable.findElements(By.tagName('tr'))

println('No. of rows: ' + Rows.size())

Int countrow = 0 


table:     while(countrow<Rows.size) {
++countrow
PositionTable = driver.findElement(By.xpath('//td[2]/table/tbody/tr/td/table'))

Rows = PositionTable.findElements(By.tagName('tr'))
    
    List<WebElement> Cols = Rows.get(i).findElements(By.tagName('td'))
    Int countcol = 0 
    
   whil(countcol < Cols.size()) {
       ++countcol
       Cols = Rows.get(i).findElements(By.tagName('td'))
       if (Cols.get(j).getText().equalsIgnoreCase(ExpectedPosition)) {
           
           
          Cols.get(j).findElement(By.tagName('a')).click()
          WebUI.delay(5)

          table: break
          
          } 
          }
            
          }