我正在一个应用程序中使用Cypress进行e2e测试我想要测试的这个特定行为是:
1.在表单中输入信息。
1.按提交。
1.将创建新字段并将其放置在表的底部。
1.检查最后一个字段是否具有我在上一个表单中输入的值。
一切正常,但测试时我没有得到最后一个值,而是得到了前一个值,就像没有完成创建一样。
cy.get("button").contains("Submit").click();
cy.url().should("include", "/advertisers");
cy.get("tr").last().should("contain.text", "New Advertiser");
cy.get("tr").last().should("contain.text", "Lom Yolk");
cy.get("tr").last().should("contain.text", "500");
cy.get("tr").last().should("contain.text", "Prepaid");
弹出的错误是关于它应该将数据与最后一行匹配,但它检测到的是来自上面一行的信息
是我的网速,还是我应该把一个。然后在某个地方,以某种方式?
先谢了
2条答案
按热度按时间41zrol4v1#
如果“提交”操作添加了一行,请尝试检查行计数是否增加了一。
.should('have.length', initialLength + 1)
将不断重新检查,直到超时。但可能不是超时,而是应用程序中的后台处理。为此,还需要添加
cy.wait(0)
。另一个可以工作的变体(基于下面的示例应用)
近似包含()
在不检查行数的情况下,使用
cy.contains()
检查表单数据。最小可重现示例
这是一个简单的网页,其中有一个按钮,可以异步地将行添加到表中。
按下按钮后检查行数,测试通过。
应用程序
测试
whitzsjs2#
我猜
Submit
发出了一个依赖于某个服务器的异步请求。当你使用
cy.get("tr").last()
时,它会立即执行,因为如果你在页面上已经有了最后一个tr
元素,并且在vue更新DOM之前执行。您可以在继续之前检查长度(随机选择7个)
一个稍微简单一点的选择是使用
cy.get(tr:last)
,因为只使用带有选择器的get
将重新测试DOM更改,而使用cy.get("tr").last()
则不会。不过我的建议是还包括
wait
包括API等待(尤其是模拟它)可以帮助减少测试的脆弱性。如果你使用数字等待时间或完全跳过它们,如果你依赖于外部API,你可能会随机中断。