一尘不染

量角器,单击()后何时应使用then()

angularjs

我正在运行Angular应用,当在量角器a上进行测试时click(),我不知道何时应该使用a来解决诺言then()

我在Protractor API上找到了这个:

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

所以,我应该click().then()在每个使用click


阅读 240

收藏
2020-07-04

共1个答案

一尘不染

那么,我是否应该在每次点击中都使用click()。then()?

当然不。

不需要它是因为Protractor /
WebDriverJS具有称为“控制流”的机制,该机制基本上是需要解决的承诺队列:

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()显式解决with
then()并在click回调中继续进行操作来解决该问题:

expect(elementToBePresent.isPresent()).toBe(false);
element(by.css("#mybutton")).click().then(function () {
    expect(elementToBePresent.isPresent()).toBe(true);
});

在这些情况下,也有明确的救援等待,但这与此处无关。

2020-07-04