我有一个应用程序需要selenium导航到下一页并验证是否找到了所需的信息,找不到回到同一页面而不是点击下一个用户信息并验证所需的信息,并且这一直持续到我们有用户链接。
我的进程:我创建了运行增强for循环的所有用户链接的List。现在,当用户点击第一个用户链接时,如果找不到的信息是selenium返回到同一页面,当尝试点击第二个用户时,它会给出异常'org.openqa.selenium.StaleElementReferenceException:stale element reference:element is没有附加到页面文档'。我尝试使用back()方法但没有工作。这有什么工作吗?
谢谢, 卡里姆
答案 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并在当前浏览器中打开。回来的时候,我只需点击导航到同一页面的链接即可。