我正在运行Angular应用程序,并且在量角器click()
上进行测试时,我不知道何时应该使用then()
来解决承诺。
我在Protractor API上找到了这个:
单击命令完成后将解决的承诺。
那么,我应该在每个click().then()
中使用click
吗?
答案 0 :(得分:9)
那么,我应该在每次点击时使用click()。then()吗?
绝对不是。
这不是必需的,因为Protractor / WebDriverJS有一个名为"Control Flow"的机制,它基本上是需要解决的承诺队列:
WebDriverJS维护一个待处理的承诺队列,称为控件 流程,以保持执行有序。
和量角器自然地等待Angular开箱即用:
您不再需要为测试添加等待和睡眠。量角器 可以自动执行测试中的下一步 网页完成待处理任务,因此您不必担心 等待您的测试和网页同步。
这导致了一个非常简单的测试代码:
var elementToBePresent = element(by.css(".anotherelementclass")).isPresent();
expect(elementToBePresent.isPresent()).toBe(false);
element(by.css("#mybutton")).click();
expect(elementToBePresent.isPresent()).toBe(true);
有时候,如果您遇到同步/计时问题,或者您的受测试应用程序是非Angular的,您可以通过click()
明确解析then()
并在点击回调中继续解决它:
expect(elementToBePresent.isPresent()).toBe(false);
element(by.css("#mybutton")).click().then(function () {
expect(elementToBePresent.isPresent()).toBe(true);
});
在这些情况下还有Explicit Waits救援,但这里没有关系。
答案 1 :(得分:3)
是的,你应该。
也许现在没有必要,但也许在下一个版本中。
因此,如果click
返回一个承诺,您应该使用它。
http://www.protractortest.org/#/api?view=webdriver.WebElement.prototype.click