Selenium:过时的元素参考:元素未附加到页面文档
Selenium : stale element reference: element is not attached to the page document
我遇到陈旧元素异常问题。我已经用谷歌搜索并在 Whosebug 中找到了一些答案,但都没有用。我开始知道当 DOM 元素被销毁并再次创建时会发生此异常。这里我的场景是我有一个带有记录的 table,下面有一个文本,像这样,"Showing 1 to 6 of 6 rows"。当我点击刷新按钮时,出现这个异常。
String recordsBeforeRefresh = getRecordsCountFromTable(waitForElement(By.xpath(properties.getProperty("RefreshPage.Icon"))).getText());
clickElement(By.xpath(properties.getProperty("RefreshPage.Button")), "Refresh");
String recordsAfterRefresh = getRecordsCountFromTable(waitForElement(By.xpath(properties.getProperty("RefreshPage.Icon"))).getText());
if(recordsBeforeRefresh.equals(recordsAfterRefresh))
{
return true;
}
else
{
return false;
}
waitforElement 在另一个 class 中,像这样
protected WebElement waitForElement(final By fieldLocator) {
return waitForElement(fieldLocator, 30);
}
protected WebElement waitForElement(final By fieldLocator, int timeoutSeconds) {
Wait<WebDriver> wait = new FluentWait<WebDriver>(getDriver()).withTimeout(timeoutSeconds, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS).ignoring(NoSuchElementException.class);
WebElement field = null;
try {
field = wait.until(new Function<WebDriver, WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
return driver.findElement(fieldLocator);
}
});
} catch (Throwable t) {
throw new AutomationError(t);
}
return field;
}
getRecordsCountFromTable(String) 有 Regex 模式匹配方法来获取记录总数。
请帮忙...
堆栈跟踪:
stale element reference: element is not attached to the page document
(Session info: chrome=47.0.2526.106)
(Driver info: chromedriver=2.20.353145 (343b531d31eeb933ec778dbcf7081628a1396067),platform=Windows NT 6.3 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 137 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.48.2', revision: '41bccdd10cf2c0560f637404c2d96164b67d9d67', time: '2015-10-09 13:08:06'
System info: host: '7YYCXY1', ip: '10.101.121.23', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_25'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=C:\Users\LSANAP~1\AppData\Local\Temp\scoped_dir6484_22708}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=47.0.2526.106, platform=WIN8_1, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: dd9a7e9b7d9d0f51a61f8075ed7bd843
错误出现在 String afterrefresh 行...
@Lokesh S,您可以尝试执行以下步骤,很可能会成功:
第 1 步:单击“刷新”或执行操作
第 2 步:使用显式等待元素
等待元素出现
第 3 步:再次执行 findElement,抛出 StaleElementException。
我遇到陈旧元素异常问题。我已经用谷歌搜索并在 Whosebug 中找到了一些答案,但都没有用。我开始知道当 DOM 元素被销毁并再次创建时会发生此异常。这里我的场景是我有一个带有记录的 table,下面有一个文本,像这样,"Showing 1 to 6 of 6 rows"。当我点击刷新按钮时,出现这个异常。
String recordsBeforeRefresh = getRecordsCountFromTable(waitForElement(By.xpath(properties.getProperty("RefreshPage.Icon"))).getText());
clickElement(By.xpath(properties.getProperty("RefreshPage.Button")), "Refresh");
String recordsAfterRefresh = getRecordsCountFromTable(waitForElement(By.xpath(properties.getProperty("RefreshPage.Icon"))).getText());
if(recordsBeforeRefresh.equals(recordsAfterRefresh))
{
return true;
}
else
{
return false;
}
waitforElement 在另一个 class 中,像这样
protected WebElement waitForElement(final By fieldLocator) {
return waitForElement(fieldLocator, 30);
}
protected WebElement waitForElement(final By fieldLocator, int timeoutSeconds) {
Wait<WebDriver> wait = new FluentWait<WebDriver>(getDriver()).withTimeout(timeoutSeconds, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS).ignoring(NoSuchElementException.class);
WebElement field = null;
try {
field = wait.until(new Function<WebDriver, WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
return driver.findElement(fieldLocator);
}
});
} catch (Throwable t) {
throw new AutomationError(t);
}
return field;
}
getRecordsCountFromTable(String) 有 Regex 模式匹配方法来获取记录总数。
请帮忙...
堆栈跟踪:
stale element reference: element is not attached to the page document
(Session info: chrome=47.0.2526.106)
(Driver info: chromedriver=2.20.353145 (343b531d31eeb933ec778dbcf7081628a1396067),platform=Windows NT 6.3 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 137 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.48.2', revision: '41bccdd10cf2c0560f637404c2d96164b67d9d67', time: '2015-10-09 13:08:06'
System info: host: '7YYCXY1', ip: '10.101.121.23', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_25'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=C:\Users\LSANAP~1\AppData\Local\Temp\scoped_dir6484_22708}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=47.0.2526.106, platform=WIN8_1, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: dd9a7e9b7d9d0f51a61f8075ed7bd843
错误出现在 String afterrefresh 行...
@Lokesh S,您可以尝试执行以下步骤,很可能会成功:
第 1 步:单击“刷新”或执行操作
第 2 步:使用显式等待元素
等待元素出现
第 3 步:再次执行 findElement,抛出 StaleElementException。