我正在努力解决StaleElementReferenceException
问题。我已经看过很多关于这个主题的讨论,但我无法找到解决我所面临的问题的方法。
测试是获取网页页脚上的所有链接,然后通过单击并验证页面标题来验证链接是否处于活动状态。
首先,我发现&将所有链接存储在数组列表中。我将链接名称与从数据库中检索的值进行比较。然后,对于每个链接,我单击它并验证页面标题。然后使用'driver.navigate.back()',返回原始页面并继续其余链接。
但是,当控件返回页面时,StaleElementReferenceException
会发生。
有人能建议我解决这个问题吗?
谢谢, Anuj
答案 0 :(得分:2)
当您在页脚中存储所有链接时,您将抓住那些元素,就像它们在那个时间点一样。在导航到不同页面时,这些特定元素不再存在。当你回到后面时,这些元素已经重新创建了。
虽然元素通过标识符是相同的,但它们是不同的实例,因此数组中的旧元素是“陈旧的”。
我建议只将链接标识符(不是链接元素本身)存储为字符串,然后在每次加载页面时搜索它们。
答案 1 :(得分:0)
我遇到了类似的问题,在我的情况下,当我在文本框中键入内容时,它会导航到另一个页面,所以当我回到上一页时,该对象会变得陈旧。
所以这导致了异常,我通过再次初始化元素来处理它 -
PageFactory.initElements(driver, Test.class);
因此,当您向后导航时,请确保再次初始化该页面的所有元素,以使对象不会过时。
答案 2 :(得分:0)
您可以按如下方式处理进入新标签页:
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);