【问题标题】:StaleElementReference ExceptionStaleElementReference 异常
【发布时间】:2013-03-19 15:42:23
【问题描述】:

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

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

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

但是,当控件返回页面时,会出现StaleElementReferenceException

谁能给我一个解决办法?

谢谢, 阿努杰

【问题讨论】:

    标签: selenium-webdriver staledataexception


    【解决方案1】:

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

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

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

    【讨论】:

    • 这绝对正确。另一种选择是在新窗口或选项卡中打开链接。这样,主窗口仍将保存元素的正确实例。
    【解决方案2】:

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

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

    PageFactory.initElements(driver, Test.class);
    

    因此,当您返回导航时,请确保再次初始化该页面的所有元素,以免对象过时。

    【讨论】:

      【解决方案3】:

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

      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-12-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多