什么时候我必须等待Protractor的承诺?

时间:2016-07-20 22:00:38

标签: javascript selenium-webdriver promise protractor angularjs-e2e

我知道这里有关于similar questions的内容,但我无法理解它们的生命。

这是一个例子,我需要点击一个按钮并检查网址。

我最初的想法是我会把它写成

element(by.id('button')).click();
expect(browser.getCurrentUrl()).toContain('asyncisconfusing');

我知道期望处理它的承诺但是.click呢?我不应该这样写吗?

element(by.id('button')).click().then(() => {
    expect(browser.getCurrentUrl()).toContain('asyncisconfusing')
})

或者是量角器/网络驱动程序自动神奇地做这个吗?

2 个答案:

答案 0 :(得分:5)

理论上,由于Protractor通过Control Flow维护一个承诺队列,并且与正在测试的AngularJS应用程序同步,因此除非您需要,否则不应明确解析承诺进一步处理的真正价值。换句话说,这应该是预先形成的形式:

element(by.id('button')).click();
expect(browser.getCurrentUrl()).toContain('asyncisconfusing');

在实践中,明确解析click()承诺,或通过browser.wait()添加明确等待有助于处理偶然和随机的时间问题

答案 1 :(得分:0)

http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/promise.html

第一部分讨论如何使用控制流来管理承诺,而不必将每个命令链接在一起。