browser.wait 和量角器的条件

browser.wait and conditions with Protractor

我正在使用量角器创建一个客户对象,在保存时我想检查刚刚创建的客户对象是否实际显示。

在 "UI" 学期,单击保存按钮后,对话框创建关闭和客户列表更新时会有一点延迟。

我有原来的customerCount,所以我想让浏览器等到有customerCount + 1张客户卡。

这是我的代码:

步骤:

When('I wait for the customer list to be updated', function() {
    return browser.wait(Utils.countElements('.tb-card-item', customerCount + 1), 5000);
});

计数元素:

module.exports = {
    countElements(css, i) {
        let e = element.all(by.css(css));
        return e.count().then(function(elementCount) {
            console.log('COUNT : ' + elementCount);
            return elementCount === i;
        })
    }
};

我的理解是 countElement 函数将一直执行到 returns 为真,直到客户数量正确为止。实际上发生的是它被执行一次并直接进入下一条指令,我的测试失败了。

提前致谢

browser.wait returns Promise 对象,根据 official 文档。 基本上,有两个选项可以告诉 Cucumber 这个特定步骤是异步的。

首先,如果有done回调

When('I wait for the customer list to be updated', function(done) {
    browser.wait(Utils.countElements('.tb-card-item', customerCount + 1), 5000)
       .then(() => {
            done();
       })
})

其次,使用async关键字

When('I wait for the customer list to be updated', async function() {
    await browser.wait(Utils.countElements('.tb-card-item', customerCount + 1), 5000);
});

但是仅仅return承诺是不够的,就像你所做的那样,黄瓜不知道如何处理它。你必须告诉黄瓜他不能继续前进,直到这个承诺得到解决。