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

Joa*_*cao 9 javascript automated-tests angularjs protractor

我正在运行一个Angular应用程序,当测量量角器a时click(),我不知道我什么时候应该解决这个问题then().

我在Protractor API上发现了这个:

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

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

ale*_*cxe 9

那么,我应该在每次点击时使用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);
Run Code Online (Sandbox Code Playgroud)

但有时候,如果您遇到同步/计时问题,或者您的受测试应用程序是非Angular,您可以通过click()明确解决then()并在Click回调中继续解决它:

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

在这些情况下还有显式等待救援,但这里没有关系.