相关疑难解决方法(0)

Cypress.io 如何处理异步代码

我正在将我们的旧水豚测试迁移到 cypress.io,因为我们的应用程序正在采用 SPA 方式。

在我们的例子中,我们有 2000 多个测试涵盖了很多功能。因此,测试功能的常见模式是让用户创建和发布商品。

一开始我写了一个案例,其中柏树通过页面并点击所有内容。它起作用了,但我看到要约创建 + 发布花了将近 1.5 分钟才能完成。有时我们需要多个报价。所以我们有一个需要 5 分钟的测试,我们还有 1999 年要重写。

我们想出了 REST API 来创建报价和用户,基本上是测试环境准备的快捷方式。

我到了使用async/await. 所以这就是事情。如果我想在 cypress 中使用普通的异步 JS 代码,我会得到Error: Cypress detected that you returned a promise from a command while also invoking one or more cy commands in that promise.

这是它的样子:

    const faker = require('faker')
    import User from '../../support/User';

    describe('Toggle button for description offer', () => {
      const user = new User({
        first_name: faker.name.firstName(),
        last_name: faker.name.firstName(),
        email: `QA_${faker.internet.email()}`,
        password: 'xxx' …
Run Code Online (Sandbox Code Playgroud)

javascript testing async-await cypress

18
推荐指数
4
解决办法
3万
查看次数

Cypress:如何检查某个元素是否存在而不导致测试失败(如果不存在)?

我的测试的一部分包括一个表,用户可以在其中添加或删除行。

我无法控制表是否为空,因此我需要有条件if来确定表是否为空。

我尝试检查表的第一行是否存在。如果是,请进行一些测试并继续,或者如果不是,则跳过该表并继续。

当然,我不能只尝试在第一行执行 cy.get,因为如果找不到该元素,测试就会失败。

相反,我尝试了这个:

         cy.get('body').then(($body) => {
             if ($body.find('firstRowElement').length > 0,  {timeout: 60000}) { 
                cy.log("Im Inside")
                cy.get('firstRowElement').then(($grid) => {  
                    //Do all the tests I need if the first row exists..
                )}
             } 
         )}
Run Code Online (Sandbox Code Playgroud)

但这不起作用。

当表为空时,它仍然进入 if 语句。

然后,由于cy.get()元素不存在,下一行测试失败。看来if声明并没有发挥作用。

暂停

我需要超时,因为表需要几秒钟才能加载。

我尝试将超时移至内部,$body.find()但它根本不等待并跳过所有内容,因为表尚未加载。

我也不想用cy.wait()

我认为超时和超时之间存在某种冲突.find()

if-statement exists find cypress

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

cypress ×2

async-await ×1

exists ×1

find ×1

if-statement ×1

javascript ×1

testing ×1