getStaleElement, . :
function retryOnStale(selector, callback) {
return browser.findElement(selector).then(callback)
.thenCatch(function (err) {
if (err.name === 'StaleElementReferenceError')
return retryOnStale(selector, callback);
throw err;
});
}
, . , retryOnStaleIllustrate , - , console.log. retryOnStale, , .
var webdriver = require('selenium-webdriver');
var chrome = require('selenium-webdriver/chrome');
var By = webdriver.By;
var until = webdriver.until;
var browser = new chrome.Driver();
browser.get("http://www.example.com");
function make_stale() {
browser.executeScript("document.body.innerHTML = " +
"'<p id=\\'foo\\'>foo text</p>'");
}
make_stale();
var fake_stale = 10;
function retryOnStaleIllustrate(selector, callback) {
return browser.findElement(selector).then(function (element) {
if (fake_stale) {
make_stale();
fake_stale--;
}
return callback(element);
}).thenCatch(function (err) {
if (err.name === 'StaleElementReferenceError') {
console.log("stale: retrying");
return retryOnStaleIllustrate(selector, callback);
}
throw err;
});
}
retryOnStaleIllustrate(By.id("foo"), function (element) {
element.getText().then(console.log);
});
function retryOnStale(selector, callback) {
return browser.findElement(selector).then(callback)
.thenCatch(function (err) {
if (err.name === 'StaleElementReferenceError')
return retryOnStale(selector, callback);
throw err;
});
}
retryOnStale(By.id("foo"), function (element) {
return element.getText();
}).then(function (text) {
console.log(text);
});
browser.quit();
:
stale: retrying
stale: retrying
stale: retrying
stale: retrying
stale: retrying
stale: retrying
stale: retrying
stale: retrying
stale: retrying
stale: retrying
foo text
foo text
stale: retrying foo text , retryOnStaleIllustrate. foo text , retryOnStale.