场景非常简单。用户点击搜索按钮,然后选择带有特定文本的元素。以下是代码:
cy.get('#search-button').click();
cy.contains('Test item 1').click();
cy.get('#cheapest-offer-button').click();
第三次点击事件失败了,因为cy.contains('Test item 1')
已经不再等待页面和元素被渲染。从测试步骤中我看到,它只是在页面中央单击,实际上什么也没做。所以所有随后的步骤当然会失败。
但是如果我在这些调用之间添加一个wait()
,就像这样:
cy.get('#search-button').click();
cy.wait(2000);
cy.contains('Test item 1').click();
cy.get('#cheapest-offer-button').click();
页面被正确渲染,测试项目1
出现,被点击并且所有随后的步骤都成功了。根据最佳实践,
wait()
调用不应该是必需的,因此应该避免使用。我在这里做错了什么?
cy.contains(selector, newContent)
替换cy.wait()
,其中 newContent 是一个文本片段,表示获取已完成。 - Richard Matsency.contains('Test item 1')
尽管它还没有可见,但正在查找某些内容。如果cypress无法找到该元素,则会抛出异常并使测试失败。请查看左侧的命令输出以查看该调用返回了什么。您可能需要更改定位该元素的方式以使其更具体,或者添加.should("be.visible")
可能会使其正常工作。发布命令日志和HTML的屏幕截图将有助于我们更轻松地解决问题。 - Brendancy.get(selector).contains('期望文本')
这样使用。 - ecolell