我遇到了问题,我需要等到组件显示在屏幕上,有时组件的延迟时间太长而无法显示。我需要等到某个字段或变量变为真。有人知道该怎么做吗?
element(by.id('nextStage-button')).isPresent().then(function (visible) {
let i = 0;
while (visible !== true){
browser.sleep(2000);
console.log("test "+ i++);
if(visible === true){
break;
}
}
答案 0 :(得分:1)
browser.wait()将安排命令以等待条件成立或承诺解决。
此功能阻止WebDriver的控制流,而不是javascript运行时。仅当启用了webdriver控制流时,才会延迟执行将来的webdriver命令(例如,它将使Protractor等待发送将来的命令到selenium服务器之前)。
文档链接:https://www.protractortest.org/#/api?view=webdriver.WebDriver.prototype.wait
在您的情况下,您要等到特定元素可见后,为此,您应该使用 isDisplayed(),因为它将返回一个承诺,该承诺将通过该元素当前是否可见来解决。页面。
await browser.wait(async () => await el.isDisplayed(), DefaultTimeout);
答案 1 :(得分:1)
您可以执行以下操作:
const EC = protractor.ExpectedConditions;
const nextStageButton = $('#nextStage-button');
browser.wait(EC.visibilityOf(nextStageButton), 3000);
// do whatever you wanted to do once it's visible