量角器:我需要等到组件显示在屏幕中

时间:2018-08-03 18:28:54

标签: javascript node.js jasmine protractor

我遇到了问题,我需要等到组件显示在屏幕上,有时组件的延迟时间太长而无法显示。我需要等到某个字段或变量变为真。有人知道该怎么做吗?

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;
        }
    }

2 个答案:

答案 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)

使用Expected Conditions

您可以执行以下操作:

const EC = protractor.ExpectedConditions;
const nextStageButton = $('#nextStage-button');
browser.wait(EC.visibilityOf(nextStageButton), 3000);
// do whatever you wanted to do once it's visible