【问题标题】:Java with selenium webdriver to work with previous page and element使用 selenium webdriver 处理前一页和元素的 Java
【发布时间】:2014-12-16 17:14:51
【问题描述】:

我有一个应用程序需要 selenium 导航到下一页并验证是否找到所需的信息,它没有找到而不是返回同一页面,然后单击下一个用户信息并验证找到所需的信息,这一直持续到我们有用户链接。

我的过程:我创建了所有用户链接的列表以运行增强 for 循环。现在,当用户单击第一个用户链接并且如果找不到比 selenium 的信息返回到同一页面时,当尝试单击第二个用户时,它会给出异常 'org.openqa.selenium.StaleElementReferenceException: stale element reference: element is未附加到页面文档'。我尝试使用 back() 方法但不工作。有什么解决办法吗?

谢谢, 卡里姆

【问题讨论】:

标签: java javascript selenium-webdriver


【解决方案1】:

StaleElementReferenceException 出现是因为当您尝试返回时 DOM 元素是 destroyed and recreated

因此,我建议您从原始页面获取用户链接的所有 href 属性,并导航到每个属性,而不是单击尝试逐个单击链接,这将始终抛出 StaleElementReferenceException

下面是获取页面中所有链接列表的方法(当然你可以缩小你需要的元素;这只是一个例子):

    //Getting the list of all links in the page
    List<WebElement> list = driver.findElements(By.tagName("a"));

    //Getting the "href" attribute of each elements and putting them into another list
    List<String> href_links = null;
    for(WebElement link:list){
        href_links.add(link.getAttribute("href"));
    }

    //Navigating through each links
    for(int i=0;i<href_links.size();i++){

        driver.get(href_links.get(i));
    }

【讨论】:

    【解决方案2】:

    使用您可能拥有的页面对象的另一种解决方案:

    int numberOfLinks = page.getUserLink().size();
    NextPage nextPage;
    for (int i = 0; i < numberOfLinks - 1; i++) {
      page.getUserLink().get(i).click();
      nextPage = new NextPage();
      if (nextPage.isInformationFound()) {
        break;
      }
      driver.navigate().back();
      page = new Page();
    }
    

    进行相应的调整并试一试;)

    问候。

    【讨论】:

      【解决方案3】:

      我发现这个问题的解决方法,因为链接是动态生成的,我将无法获得 href 值。但是,我获取了 onclick 属性中给出的用户 ID 并将其存储在列表中,然后我为这些用户创建了 url 并在当前浏览器中打开。回来时,我只需单击导航到同一页面的链接。

      【讨论】:

        猜你喜欢
        • 2016-03-23
        • 1970-01-01
        • 2020-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-11
        相关资源
        最近更新 更多