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)
或者是量角器/网络驱动器自动神奇地做这个?
理论上,由于Protractor通过控制流维护一个承诺队列并与正在测试的AngularJS应用程序同步工作,因此除非需要实际值进行进一步处理,否则不应明确解析promises.换句话说,这应该是prefferred形式:
element(by.id('button')).click();
expect(browser.getCurrentUrl()).toContain('asyncisconfusing');
Run Code Online (Sandbox Code Playgroud)
但在实践中,明确解决click()承诺或添加显式等待browser.wait()有助于处理偶然和随机的时间问题.