StaleElementReference异常

时间:2013-03-19 15:42:23

标签: selenium-webdriver staledataexception

我正在努力解决StaleElementReferenceException问题。我已经看过很多关于这个主题的讨论,但我无法找到解决我所面临的问题的方法。

测试是获取网页页脚上的所有链接,然后通过单击并验证页面标题来验证链接是否处于活动状态。

首先,我发现&将所有链接存储在数组列表中。我将链接名称与从数据库中检索的值进行比较。然后,对于每个链接,我单击它并验证页面标题。然后使用'driver.navigate.back()',返回原始页面并继续其余链接。

但是,当控件返回页面时,StaleElementReferenceException会发生。

有人能建议我解决这个问题吗?

谢谢, Anuj

3 个答案:

答案 0 :(得分:2)

当您在页脚中存储所有链接时,您将抓住那些元素,就像它们在那个时间点一样。在导航到不同页面时,这些特定元素不再存在。当你回到后面时,这些元素已经重新创建了。

虽然元素通过标识符是相同的,但它们是不同的实例,因此数组中的旧元素是“陈旧的”。

我建议只将链接标识符(不是链接元素本身)存储为字符串,然后在每次加载页面时搜索它们。

答案 1 :(得分:0)

我遇到了类似的问题,在我的情况下,当我在文本框中键入内容时,它会导航到另一个页面,所以当我回到上一页时,该对象会变得陈旧。

所以这导致了异常,我通过再次初始化元素来处理它 -

PageFactory.initElements(driver, Test.class);

因此,当您向后导航时,请确保再次初始化该页面的所有元素,以使对象不会过时。

答案 2 :(得分:0)

您可以按如下方式处理进入新标签页:

String baseHandle = driver.getWindowHandle();

                    Set<String> sr = driver.getWindowHandles();

                    if (sr.size()>1){


                    Set<String> sr1 = driver.getWindowHandles();
                    sr1.remove(baseHandle);


                    Iterator itr = sr1.iterator();

                    driver.switchTo().window(itr.next().toString());

                    System.out.println("Page Title is : " + driver.getTitle());

                    driver.close();

                    driver.switchTo().window(baseHandle);