量角器,我应该在点击后使用then()

时间:2015-10-30 17:08:25

标签: javascript angularjs automated-tests protractor

我正在运行Angular应用程序,并且在量角器click()上进行测试时,我不知道何时应该使用then()来解决承诺。

我在Protractor API上找到了这个:

  

单击命令完成后将解决的承诺。

那么,我应该在每个click().then()中使用click吗?

2 个答案:

答案 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