我正在运行Angular应用,当在量角器a上进行测试时click(),我不知道何时应该使用a来解决诺言then()。
click()
then()
我在Protractor API上找到了这个:
click命令完成后将解决的承诺。
所以,我应该click().then()在每个使用click?
click().then()
click
那么,我是否应该在每次点击中都使用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); });
在这些情况下,也有明确的救援等待,但这与此处无关。