【问题标题】: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 并在当前浏览器中打开。回来时,我只需单击导航到同一页面的链接。