我什么时候必须等待量角器中的承诺?
When do I have to wait for a promise in Protractor?
我知道这里有 ,但我一辈子都无法理解它们。
这是一个示例,我需要单击一个按钮并检查 url。
我最初的想法是我会把它写成
element(by.id('button')).click();
expect(browser.getCurrentUrl()).toContain('asyncisconfusing');
我知道 expect 会处理它的承诺,但是 .click 呢?不应该这样写吗?
element(by.id('button')).click().then(() => {
expect(browser.getCurrentUrl()).toContain('asyncisconfusing')
})
或者 protractor/webdriver 自动神奇地这样做?
理论上,由于 Protractor
通过 Control Flow 维护一个承诺队列,并且 与正在测试的 AngularJS 应用程序同步工作 ,你不应该明确地解决承诺,除非你需要一个真正的价值来进一步处理。换句话说,这应该是首选形式:
element(by.id('button')).click();
expect(browser.getCurrentUrl()).toContain('asyncisconfusing');
但在实践中,显式解决 click()
承诺,或通过 browser.wait()
添加显式等待有助于处理偶尔和随机的 时间问题。
http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/promise.html
第一部分讨论如何使用控制流来管理承诺,而不必将每个命令链接在一起。
我知道这里有
这是一个示例,我需要单击一个按钮并检查 url。
我最初的想法是我会把它写成
element(by.id('button')).click();
expect(browser.getCurrentUrl()).toContain('asyncisconfusing');
我知道 expect 会处理它的承诺,但是 .click 呢?不应该这样写吗?
element(by.id('button')).click().then(() => {
expect(browser.getCurrentUrl()).toContain('asyncisconfusing')
})
或者 protractor/webdriver 自动神奇地这样做?
理论上,由于 Protractor
通过 Control Flow 维护一个承诺队列,并且 与正在测试的 AngularJS 应用程序同步工作 ,你不应该明确地解决承诺,除非你需要一个真正的价值来进一步处理。换句话说,这应该是首选形式:
element(by.id('button')).click();
expect(browser.getCurrentUrl()).toContain('asyncisconfusing');
但在实践中,显式解决 click()
承诺,或通过 browser.wait()
添加显式等待有助于处理偶尔和随机的 时间问题。
http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/promise.html
第一部分讨论如何使用控制流来管理承诺,而不必将每个命令链接在一起。