我要在课堂开始时初始化一个变量:
public WebElement logout;
在代码的稍后部分,以某种方法,当我第一次遇到注销按钮时,我为该变量分配了一个值(在if / else语句的括号中):
logout = driver.findElement(By.linkText("Logout")); logout.click();
然后,在测试的另一个阶段,我再次成功使用“注销”:
logout.click();
在测试结束时,在元素相同的地方(By.linkText(“注销”)),我收到此错误:
Element not found in the cache - perhaps the page has changed since it was looked up
为什么?
编辑:实际上,我没有成功使用logout.click();。在测试的另一阶段要求。看来我不能再使用它了。我必须创建一个logout1 webelement并使用它…
如果您最初找到该页面后对页面进行了任何更改,则element该webdriver参考现在将包含一个stale参考。由于页面已更改,因此element将不再位于webdriver预期的位置。
element
webdriver
stale
要解决您的问题,请find在每次需要使用该元素时尝试-编写一个小的方法,可以随时随地调用是一个好主意。
find
import org.openqa.selenium.support.ui.WebDriverWait public void clickAnElementByLinkText(String linkText) { wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText(linkText))); driver.findElement(By.linkText(linkText)).click(); }
然后,在您的代码中,您只需要:
clickAnElementByLinkText("Logout");
因此,每次页面都将找到该元素并单击它时,即使页面因“刷新”对该元素的引用而发生更改,也都会成功单击该元素。