据我了解,由于Javascript是异步的,所以Cypress框架也是异步的。这意味着 1) Cypress 命令排队并按照排队顺序运行,2) 第二个 Cypress 命令不会等待第一个 Cypress 命令完成。
我对下面的场景有疑问,我们单击烤肉串菜单,然后单击特定的烤肉串菜单项。注意,在单击烤肉串菜单项之前单击烤肉串菜单非常重要。这似乎工作正常。它工作正常只是侥幸吗? 为什么我没有遇到在第一个命令完成之前运行第二个命令的问题?
kebabmenu = "a.pf-c-dropdown__menu";
kebabmenuItem = "#delete";
cy.get(kebabmenu).click();
cy.get(kebabmenuItem).click;
你的第二点是错误的。 Cypress 命令按连续的确定性顺序运行。 以下是官方文档的摘录:
- 您不能同时(并行)竞赛或运行多个命令。
Cypress 的全部目的(以及它与其他测试工具的显着不同)是创建一致的、非片状的测试,这些测试从一次运行到下一次运行都表现相同
Cypress 命令是异步的,但它们仍然等待前一个命令成功(或失败)。 这意味着如果
cy.get(kebabmenu).click()
失败,测试将停止并且不会继续执行下一个命令。
如果在单击
kebabmenuItem
之前 kebabmenu
不可见,那么您就被覆盖了,因为通过调用 cy.get(kebabmenuItem)
,cypress 默认情况下会确保该元素存在于 DOM 中(使用 默认超时)。
如果这两个元素从一开始就可见,并且当您单击
kebabmenu
时发生其他事情,需要在单击 kebabmenuItem
之前完成,您可以在执行 cy.get(kebabmenuItem).click;
之前实现等待。