我在这里遇到某种情况。
我有一个函数editNewUser()。
public void editNewUser() throws Exception
{
driver.findElement(adminModuleDD).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(searchRes));
List<WebElement> elements = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(uNames));
for(WebElement el : elements)
{
if(el.getText().equals(UserName))
{
el.click();
wait.until(ExpectedConditions.visibilityOfElementLocated(editUserHeading));
driver.findElement(editUser).click();
WebElement status_Dropdown = driver.findElement(By.xpath("//select[@id='systemUser_status']"));
Select status = new Select(status_Dropdown);
status.selectByVisibleText("Enabled");
}
}
}
UserName是一个公共字符串变量,在创建用户期间在另一个函数中获取值。
在这个脚本中,我导航到一个包含用户列表的页面,我将所有用户名存储在List'elements'中,然后迭代列表中与文本匹配的每个元素。
现在,在我的test_run脚本中,我在editNewUser()之后调用了一些其他方法。
事情发生的是,此方法在if block中执行以下命令。
if(el.getText().equals(UserName))
{
el.click();
wait.until(ExpectedConditions.visibilityOfElementLocated(editUserHeading));
driver.findElement(editUser).click();
WebElement status_Dropdown = driver.findElement(By.xpath("//select[@id='systemUser_status']"));
Select status = new Select(status_Dropdown);
status.selectByVisibleText("Enabled");
}
但是一旦调用了下一个方法,它就会停止执行并抛出org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up
堆栈跟踪指的是行if(el.getText().equals(UserName))
。
你能告诉我为什么我收到这个异常,虽然if块中的命令被执行了。
答案 0 :(得分:0)
错误消息告诉您问题。编辑第一个&#34; el&#34;在你的for循环中,页面已经更新,因此Selenium已经忘记了&#34;元素中的剩余元素&#34;列表。
您需要找到另一种方法来跟踪您正在循环的元素。我过去使用的一种技术是创建一个自定义对象来表示项目,在您的情况下可能是&#34; User&#34;。该对象足够聪明,可以在页面上重新找到自己。