陈旧元素异常:点击页面中的报告链接然后返回按钮,依此类推

时间:2017-04-04 11:42:57

标签: selenium selenium-webdriver automation selenium-chromedriver

如图所示:我想逐一点击每个链接,点击:窗口没有变化但是刷新了。

点击报告链接,导航到下一页,点击后退链接,它会导航回同一页面。

一旦它回到同一页面,定位器就不再识别下一个报告链接&抛出过时的元素异常

image 3  image 2

Image 1

public void getreports(String reportname) throws Exception
List<WebElement> li=driver.findElements(By.xpath(".//tbody/tr/th/following::
tr/td//div/a"));

for(WebElement e: li)   {

if(reportname.equalsIgnoreCase(e.getText())) {
utilities.wait_control(e);
e.click();
break;
}
else if(reportname.equalsIgnoreCase("all"))
{

utilities.wait_control(e);
e.click();

NetReports ld = PageFactory.initElements(driver, NetReports .class);
ld.Netsubcategoryreport_backbutton.click();
Thread.sleep(2000); 
} }

2 个答案:

答案 0 :(得分:1)

我认为你只需要对你的循环进行一些小调整:

String selector = ".//tbody/tr/th/following::tr/td//div/a";
List<WebElement> li=driver.findElements(By.xpath(selector));
for (int i = 0; i < li.length; i++) {
    li=driver.findElements(By.xpath(selector));
    WebElement e = li.get(i);
    //Rest of your logic goes here
}

答案 1 :(得分:0)

  • StaleElementReferenceException -

    顾名思义,当元素过时时会发生此异常,这意味着您尝试对其执行操作的元素引用在页面上不再可用或已更改。

    要避免此异常,请尝试在需要时找到该元素 对它采取行动,而不是在某些代码点获取元素 然后在不同的地方重复使用它。