我在這裏的某種情況。調試StaleElementReference異常 - Selenium WebDriver
我有一個函數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塊中執行以下命令。
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塊內部的命令。
當el.getText()。等於(用戶名)條件爲true時,您正在執行操作以導航..因此,在列表中剩餘的元素改變其位置後,或者可能頁面已更改,而在硒緩存中找不到該元素作爲例外發生..如果你正在實現這一點,你應該打破循環,如果條件爲真。 –