Protractor 量角器-为什么要在测试脚本中实现等待或休眠

Protractor 量角器-为什么要在测试脚本中实现等待或休眠,protractor,wait,sleep,Protractor,Wait,Sleep,我曾读到“在网页完成未决任务时,量角器可以自动执行测试的下一步,因此您不必担心等待” 但是,我必须在测试脚本中实现等待或休眠,以使它们全部通过 谁能帮助理解这种等待 阅读时: 自动等待: 您不再需要在测试中添加等待和休眠。量角器可以在网页完成挂起的任务时自动执行测试的下一步,因此您不必担心等待测试和网页同步。对,我发现这个描述和您一样令人困惑。我认为它描述了一个理想的世界,没有网络延迟和超时,没有动画和布局问题 该描述源于: 量角器在对对象执行任何操作之前运行额外的命令 浏览器,以确保正在测试的

我曾读到“在网页完成未决任务时,量角器可以自动执行测试的下一步,因此您不必担心等待”

但是,我必须在测试脚本中实现等待或休眠,以使它们全部通过

谁能帮助理解这种等待

阅读时:

自动等待:
您不再需要在测试中添加等待和休眠。量角器可以在网页完成挂起的任务时自动执行测试的下一步,因此您不必担心等待测试和网页同步。

对,我发现这个描述和您一样令人困惑。我认为它描述了一个理想的世界,没有网络延迟和超时,没有动画和布局问题

该描述源于:

量角器在对对象执行任何操作之前运行额外的命令 浏览器,以确保正在测试的应用程序已稳定

这个额外的命令是一个异步脚本,它要求Angular在应用程序完成所有超时和异步请求并准备好继续测试时做出响应

现在,“应用程序就绪”语句是什么意思?这基本上意味着,在运行的应用程序()中没有挂起的请求、承诺和“宏任务”

据我所知,这有助于解决大多数计时和等待问题,但是,如果在Angular之外执行了一个挂起的JS代码,或者如果有任何挂起的动画或其他与UI相关的更改,这可能会影响测试的稳定性,例如,某个元素可能还不可见或不可单击,输入可能尚未启用等

而且,这实际上并没有使端到端测试的反馈变得稳定和有用——例如,在我们的项目中,我们经常发现自己到处添加
browser.wait()
s来处理偶尔失败的测试。此外,以下是一系列帮助我们解决这种片状问题的方法: