我正在测试一个有时会渲染一个小部件的页面,有时候会渲染另一个小部件。
我正在尝试使用browser.wait()
来确保两个中的一个已经渲染,然后根据它的具体情况与相应的一个进行交互。
这是我的代码:
EC = protractor.ExpectedConditions
browser.wait(() => {
return EC.presenceOf(userField) || EC.presenceOf(notMyAccountElement)
}, WAIT_TIME, 'Lock form (auth0) never appeared.')
notMyAccountElement.isPresent().then((result) => {
if (result) {
notMyAccountElement.click()
browser.wait(EC.presenceOf(userField), WAIT_TIME, 'New lock form (auth0) never appeared.')
}
userField.sendKeys(user)
passField.sendKeys(password)
submitBtn.click()
})
这通常有效,但我在以下情况下会出现间歇性故障:
userField.sendKeys(user)
我可以在浏览器中看到,当该页面上实际存在notMyAccountElement
时,该行会偶尔执行。
我认为最可能的问题是开场browser.wait()
没有解决我期望的方式,但我想了解原因。
答案 0 :(得分:4)
我认为您没有正确应用预期条件,您需要使用EC.or()
:
browser.wait(EC.or(EC.presenceOf(userField), EC.presenceOf(notMyAccountElement)),
WAIT_TIME, 'Lock form (auth0) never appeared.')
而且,由于您要与userField
进行互动,因此您应该使用visibilityOf
或elementToBeClickable
而不是presenceOf
预期条件。虽然,我怀疑这与间歇性失败有关。
您还可以更改等待userField
的状态/可见性到notMyAccountElement
的隐身/陈旧性的等待。替换:
browser.wait(EC.presenceOf(userField), WAIT_TIME, 'New lock form (auth0) never appeared.');
使用:
browser.wait(EC.stalenessOf(notMyAccountElement), WAIT_TIME, 'New lock form (auth0) never appeared.');
或者,您可以逐个使用两者,以使事情更加可靠。