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

Posted

技术标签:

【中文标题】如何等待在量角器端到端测试中处理事件?【英文标题】:How to wait for a event to be processed in a protractor end to end test? 【发布时间】:2016-04-01 13:38:21 【问题描述】:

我有非常简单的AngularJs 1.4.8前端:

填写完表格并按下确定按钮后,新的人就会添加到表格中。

表格在addingPersonController,表格在allPersonsController,都是masterController下的孩子。

当用户被添加(OK点击)时,会发生以下情况:

    POST 请求被发送到服务器以添加新人。 personAddedEvent$emitaddingPersonController 发射到 masterController masterControllerallPersonsController 广播updatePersonsEvent allPersonsController 向服务器发送 GET 请求以获取所有人员并更新表格。

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

用户界面在手动测试时有效,我尝试在量角器测试中等待:

browser.wait(function(), timeout); browser.sleep(ms); .click().then();

它们都不起作用。有没有办法在检查断言之前等待这样的过程完成?

【问题讨论】:

【参考方案1】:

我的 e2e 测试也遇到了一些类似的问题。可以添加几个解决方法。取决于情况,主要是由于某种无响应超时(量角器/硒和浏览器之间失去同步)。这就像 PC 的挂起,由于资源不足(GPU/VRAMRAMCPU)。这导致量角器的内置“等待完成角度工作”失去了跟踪。并在运行规范之前运行它。

这是我建议您尝试的列表:

    使用内置的等待角度快速解决大部分时间的问题。但它不会处理量角器/硒和浏览器之间失去同步的问题。

browser.waitForAngular();

    使用ExpectedConditions 和browser.wait() 这始终是最好的,因为它肯定适用于所有情况。即使是外部角度环境。不好的是……打字时间很长

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

编辑: 错别字,让答案更容易理解

【讨论】:

以上是关于如何等待在量角器端到端测试中处理事件?的主要内容,如果未能解决你的问题,请参考以下文章

nodejs REST Api的端到端分析

量角器+黄瓜等待和超时而不执行完整测试

在量角器中初始化之前无法访问“元素”

用于罕见事件时间序列预测的LSTM模型体系结构

论文泛读132Text2Event:用于端到端事件提取的可控序列到结构生成

「事件驱动架构」Kafka vs. RabbitMQ:架构性能和用例