我正在使用量角器测试一个非角度应用程序,我在测试中有一个登录助手函数,类似于以下内容:
function login() {
return waitUntilVisible($('#txtUsername'))
.then(function () {
$('#txtUsername').sendKeys('tom');
})
.then(function () {
$('#txtPassword').sendKeys('*');
})
.then(function () {
$('#btnLogin').click();
})
.then(function () {
// this is the flaky line
return browser.wait(protractor.ExpectedConditions.invisibilityOf($('#txtUsername')), 20000, 'Element never disappeared');
});
}
其中browser.wait(protractor.ExpectedConditions.invisibilityOf($('#txtUsername')), 20000, 'Element never disappeared')
等待包含要关闭的登录表单的引导模式。然而,这条线被证明是非常片状的,偶尔会失败:
NoSuchElementError:找不到使用定位器找到的元素:By.cssSelector(“#txtUsername”)
甚至:
StaleElementReferenceError:陈旧元素引用:元素未附加到页面文档
我的第一个是模式在调用行之前关闭,但是,invisibilityOf
的文档建议它应该处理不存在的元素,将其表示为:
期望检查元素是否在DOM上不可见或不存在。
如何使这条线健壮?
答案 0 :(得分:1)
从invisibilityOf
切换到stalenessOf
已经成功了。
答案 1 :(得分:0)
函数visibilityOf
或textToBePresentInElement
不是原子函数,可能会产生错误。在内部,他们会依次检查isPresent
和isDisplayed
/ getText
,但如果在这些检查之间删除了一个元素,则会发生NoSuchElementError
或StaleElementReferenceError
。
此错误可能会在将来的版本中修复。在您使用我包装为npm模块的解决方法之前:
https://www.npmjs.com/package/protractor-save-expected-conditions