我正在使用量角器测试非角度应用程序,其中在测试中具有类似于以下内容的登录助手功能:
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上是否不可见或不存在。
我如何使这条线坚固?
最佳答案
从invisibilityOf
切换到stalenessOf
达到了目的。