【发布时间】:2013-08-01 02:17:19
【问题描述】:
我在课堂开始时初始化一个变量:
public WebElement logout;
稍后在代码中,在某些方法中,当我第一次遇到注销按钮时,我为该变量赋值(在 if/else 语句的括号中):
logout = driver.findElement(By.linkText("Logout"));
logout.click();
然后我在测试的另一个阶段再次成功地使用“注销”:
logout.click();
并且在测试结束时,在元素相同的地方(By.linkText("Logout")),我得到了这个错误:
Element not found in the cache - perhaps the page has changed since it was looked up
为什么?
编辑:实际上,我没有成功使用 logout.click();在我测试的另一个阶段发出命令。看来我不能再用了。我必须创建一个 logout1 webelement 并使用它...
【问题讨论】:
-
在您的参考有效和不再有效之间的任何时候页面是否发生了变化?
-
不,据我所知没有任何变化。没有人部署任何东西,我使用了一些 ajax 的东西,但链接文本保持不变,并且链接仍在页脚中
-
如果已执行 AJAX,则页面可能已更改 - 因此,由于 DOM 已更改,对您元素的 WebDriver 引用现在将“陈旧”。如果您在尝试在通常会中断的阶段单击它之前再次尝试
find元素会发生什么?一个想法,为什么不创建一个logout方法,在每次需要时查找并单击该元素? -
哦,我明白了 - 它第一次查找链接文本并以其他方式记录结果,与 DOM 相关,因此第二次调用变量不会查找链接文本,但对于 DOM 参考?尝试了你的方法,它奏效了!如果你用那个帖子回答我的问题,我会接受。