Java与selenium webdriver一起使用以前的页面和元素

时间:2014-12-16 17:14:52

标签: java javascript selenium-webdriver

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

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

谢谢, 卡里姆

3 个答案:

答案 0 :(得分:1)

出现

StaleElementReferenceException ,因为当您尝试导航时,DOM元素为destroyed and recreated

因此,我建议您从原始页面获取用户链接的所有href属性,然后导航到每个属性,而不是单击尝试单击链接-one,将始终抛出 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));
    }

答案 1 :(得分:0)

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

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();
}

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

问候。

答案 2 :(得分:0)

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