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

Din*_*nny 1 javascript promise selenium-webdriver angularjs-e2e protractor

我知道这里有类似的问题,但是对于我的生活我无法理解它们.

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

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

element(by.id('button')).click();
expect(browser.getCurrentUrl()).toContain('asyncisconfusing');
Run Code Online (Sandbox Code Playgroud)

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

element(by.id('button')).click().then(() => {
    expect(browser.getCurrentUrl()).toContain('asyncisconfusing')
})
Run Code Online (Sandbox Code Playgroud)

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

ale*_*cxe 5

理论上,由于Protractor通过控制流维护一个承诺队列并与正在测试的AngularJS应用程序同步工作,因此除非需要实际值进行进一步处理,否则不应明确解析promises.换句话说,这应该是prefferred形式:

element(by.id('button')).click();
expect(browser.getCurrentUrl()).toContain('asyncisconfusing');
Run Code Online (Sandbox Code Playgroud)

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