我正在为一些同事建立的Angular 4应用程序构建Protractor测试。事情进展顺利,但我遇到了可怕的“陈旧元素参考”错误。
定期失败的代码行非常简单:
expect(getElement('section.pipelines-container h6').getText()).toBe('PIPELINES')
然后调用我创建的这个函数:
export function getElement(bySelector, timeout=5000) {
var i = 0;
var startTime = Date.now();
if (typeof(bySelector) === 'string') {
bySelector = by.css(bySelector);
}
try {
do {
driver.wait(until.elementLocated(bySelector), timeout)
.then(e => driver.wait(until.elementIsVisible(e)));
if (element(bySelector).isDisplayed()) {
break;
}
i++;
} while (i < 3);
}
catch (ex) {
console.log('Exception in e2e-utils.getElement: ' + ex.message)
}
if (i > 0) {
console.log('Iterations: ' + i);
console.log('Start: ' + startTime);
console.log('End: ' + Date.now());
}
return element(bySelector);
}
我很好奇我还能做些什么来捕获这个错误并再次尝试获取元素?