如何等待在量角器端到端测试中处理事件?

How to wait for a event to be processed in a protractor end to end test?

我的很简单AngularJs1.4.8Front-End:

填写表格并按下 确定 按钮后,新人将添加到 table。

表单在 addingPersonController 中,table 在 allPersonsController 中,两者都是 masterController 下的孩子。

添加用户(确定 单击)后会发生以下情况:

  1. 一个 POST 请求被发送到服务器以添加新人。
  2. a personAddedEvent$emitaddingPersonControllermasterController
  3. masterControllerallPersonsController
  4. 广播 updatePersonsEvent
  5. allPersonsController 向服务器发送 GET 请求以获取所有人员并更新 table。

我有一个量角器端到端测试来练习这个案例,问题是我不知道如何等待整个过程完成才能检查断言和测试总是失败。

UI 在手动测试时有效,我尝试在量角器测试中等待:

None 他们成功了。
有没有办法在检查断言之前等待这样的过程完成?

我的端到端测试也遇到了一些类似的问题。可以添加几个解决方法。取决于情况,主要是由于某种无响应超时(protractor/selenium 和浏览器之间失去同步)。这就像 PC 挂起,由缺乏资源(GPU/VRAMRAMCPU)引起。这导致内置的 "wait for angular works to be done" 量角器失去了它的跟踪。 运行 之前的规范应该是 运行.

这是我建议您尝试的清单:

  1. 使用内置等待 angular 快速解决大部分时间的问题。但它不会处理 protractor/selenium 和浏览器之间丢失的同步。

browser.waitForAngular();

  1. 使用 ExpectedConditionsbrowser.wait() 这总是最好的,因为它肯定适用于所有情况。即使在 angular 环境之外。不好的是...输入时间很长

browser.wait( ExpectedConditions.textToBePresentInElement( $('#someId'), "Person's Name"), 10000);

编辑: 错别字并使答案更容易理解