0

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

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

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

但是,当控件返回到页面时,StaleElementReferenceException就会发生这种情况。

任何人都可以建议我摆脱这种情况吗?

谢谢, 阿努杰

4

3 回答 3

2

当您将所有链接存储在页脚中时,您正在抓取这些元素,因为它们在那个时间点上。在导航到不同的页面时,这些特定元素不再存在。当您返回到后面时,这些元素已被重新创建。

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

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

于 2013-03-19T21:42:13.050 回答
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);
于 2017-01-04T09:25:14.210 回答
0

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

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

PageFactory.initElements(driver, Test.class);

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

于 2016-02-03T11:15:48.977 回答