标签: cypress

getAllByTestId 的超时值?

  cy.wait(20 * 1000);

  cy.getAllByTestId('test-field-one')
    .first()
    .within(() => cy.getByTestId('test-field-two'))
    .should('contain', 'test');
Run Code Online (Sandbox Code Playgroud)

我目前正在使用上面的代码,但我不喜欢等待。我更喜欢超时值。有谁知道这在柏树中是否可能?

cypress cypress-testing-library

-1
推荐指数
1
解决办法
810
查看次数

如何迭代所有身体对象

我想断言我的response.body 是否不包含某些提供的值。假设身体有 10 个物体。所有对象都有“id”字段。如何在请求响应上使用某种each或forEach?我知道我可以使用例如

expect(response.body[0].requestId).not.eq(value);
expect(response.body[1].requestId).not.eq(value);
expect(response.body[2].requestId).not.eq(value);
expect(response.body[3].requestId).not.eq(value);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何以更优化的方式对其进行编码。

我用以下方法准备了数组:

    const bodyObjects = [
      'body[0]',
      'body[1]',
      'body[2]',
      'body[3]',
      'body[4]',
    ];
    
Run Code Online (Sandbox Code Playgroud)

我的代码

it.only("Something "A" should not see something "B"", () => {
    const bodyObjects = [
      'body[0]',
      'body[1]',
      'body[2]',
      'body[3]',
      'body[4]',
    ];
    cy.request({
      method: "POST",
      url: Cypress.env("URL",
      auth: {
        bearer: token,
      },
      body: {
        id: someId,
      },
    }).then((response, $bodyObjects) => {
      responseId = response.body.id;
      expect(response.status).to.eq(201);
      **MY POTENTIAL ASSERTION**
    })
  });
Run Code Online (Sandbox Code Playgroud)

javascript each foreach cypress

-1
推荐指数
1
解决办法
715
查看次数

我想在赛普拉斯执行所有规范之前运行代码/函数

我已经在 Cypress 中看到了可用的钩子,但我想要的是在执行任何规范之前运行一段代码/函数。如何在赛普拉斯中实现这一目标?类似 onPrepare() 之类的东西。使用 9.5.4 版本和旧配置文件。

typescript cypress

-1
推荐指数
1
解决办法
1819
查看次数

Bash 脚本无法执行 Cypress 的 NPM 脚本

我制作的 bash 脚本遇到了问题。对于上下文,我编写了 NPM 脚本来在命令行上运行 Cypress 测试。我的目标是拥有一个 bash 脚本来运行每个 NPM 脚本,并在命令行中执行 Cypress。另外供参考,我的 script.sh 位于项目文件夹中。

如果我从终端手动运行 NPM 脚本,就没有问题。赛普拉斯有效。这是我拥有的 NPM 脚本的示例:

"cypress:window": "./node_modules/.bin/cypress open",
Run Code Online (Sandbox Code Playgroud)

问题是当我将这些命令放入 bash 脚本中时。现在,当 script.sh 运行时,它以 code=1 执行,并且实际上根本不运行 Cypress。我的 script.sh 只是:

npm run cypress:window
Run Code Online (Sandbox Code Playgroud)

bash sh node.js npm cypress

-1
推荐指数
1
解决办法
411
查看次数

使用组件/cypress 进行条件测试

我希望在这种情况下进行条件测试,表可能存在或不存在:

if (cy.get(#grid).should('not.exist')) {
            //do something
        } else {
            //so something else
        }
Run Code Online (Sandbox Code Playgroud)

但似乎不建议进行条件测试?有什么建议吗?

cypress

-1
推荐指数
1
解决办法
98
查看次数

设置 Cypress 时“configFile 无效”

我得到的错误是:

您的配置文件无效:/Users/mic/Desktop/Projects/MCAT/client/cypress.config.ts

我只是想将 cypress 安装到我的项目中,但从一开始就遇到了这个问题。我尝试过删除并重新安装包文件。我还尝试以多种方式操作 tsconfig.json。

柏树和文件树

包.json

node.js typescript reactjs cypress

-1
推荐指数
1
解决办法
2438
查看次数

Cypress 测试获取元素属性

我刚刚开始开发一个新的测试项目,为 ExtJS 应用程序添加 Cypress 测试。ExtJS 使用动态 ID,因此我们使用不同的选择器来识别元素。

\n

现在,如果我使用简单的 Javascript,我可以获取 poperties 并调用所选元素的方法,如下所示:

\n
ele = document.getElementById(\'tdscombo-1108\')\n<div class=\xe2\x80\x8b"x-field x-form-item x-form-item-default x-form-type-text x-field-default x-anchor-form-item" role=\xe2\x80\x8b"presentation" id=\xe2\x80\x8b"tdscombo-1108" data-cy=\xe2\x80\x8b"broadcast_type" style=\xe2\x80\x8b"width:\xe2\x80\x8b 625px;\xe2\x80\x8b">\xe2\x80\x8b\xe2\x80\xa6\xe2\x80\x8b</div>\xe2\x80\x8b\n\nele.id\n\'tdscombo-1108\'\n\nele.role\n\'presentation\'\n\nele.style\nCSSStyleDeclaration\xc2\xa0{0: \'width\', accentColor: \'\', additiveSymbols: \'\', alignContent: \'\', alignItems: \'\', alignSelf: \'\',\xc2\xa0\xe2\x80\xa6}`\n\nele.getAttribute(\'data-cy\')\n\'broadcast_type\'\n
Run Code Online (Sandbox Code Playgroud)\n

当使用 Cypress 并使用 cy.get 执行相同操作时,\n cy.get(\'[data-cy="broadcast_type"]\').invoke(\'attr\',\'data-cy\')\n和\n cy.get(\'[data-cy="broadcast_type"]\').its(\'data-cy\')\n都返回 Cypress $Chainer 对象。我不知道那是什么。

\n

我最接近的是跑步\n cy.get(\'[data-cy="broadcast_type"]\').then((elem) => {Object.values(elem[0].attributes).forEach((v) => {console.log(v)})});\n这给了我

\n
class=\xe2\x80\x8b"x-field x-form-item x-form-item-default x-form-type-text x-field-default x-anchor-form-item x-field-focus"\nrole=\xe2\x80\x8b"presentation"\nid=\xe2\x80\x8b"tdscombo-1225"\ndata-cy=\xe2\x80\x8b"broadcast_type"\nstyle=\xe2\x80\x8b"width:\xe2\x80\x8b 625px;\xe2\x80\x8b"\n
Run Code Online (Sandbox Code Playgroud)\n

这些似乎都是某种对象,我无法访问如下属性:v.id。它说undefined.\n我只是希望能够像上面简单的 Javascript 中那样以键值对的形式访问这些属性。

\n

这是 ExtJS 组合框 …

javascript cypress

-1
推荐指数
1
解决办法
166
查看次数

Cypress 在每次测试之间使用时钟,无需再次访问

我有一个组件每 20 秒调用 api(setInterval)

我想测试 api 如果返回不同的结果,我的组件会显示什么。

cy.clock我尝试使用和加速 setInterval cy.tick,但它仅在第一次测试中有效。

这是我的代码:

// test.cy.ts

before(()=>{
  cy.clock(0,['setInterval'])
  cy.visit('my component url')
})
describe('test clock',()=>{
  it('test1',()=>{
    cy.tick(20000) // work
    // call API successfully
  })
  it('test2',()=>{
    cy.tick(20000) // error, you need to call cy.clock before calling cy.tick
  })
})

Run Code Online (Sandbox Code Playgroud)

我尝试在调用之前在“test2”中添加 cy.clock cy.tick(20000),没有错误,但仍然无法正常工作。(我不知道为什么,但 API 没有被调用)

我在这里尝试答案: cy.clock and cy.tick not work with split code

但出现错误:无法读取 null 的属性(读取“详细信息”)

我想知道这是因为 Cypress 会restore在测试之间自动调用。

时钟需要在 setInterval 之前调用,这可能是我添加新时钟但不起作用的原因。

有没有什么方法可以使用相同的时钟功能而无需再次访问该页面?


编辑:

我已经尝试了下面的两个答案但仍然不起作用

时钟停在 1000 并且不会更改为 2000

我正在使用 …

testing cypress

-1
推荐指数
1
解决办法
465
查看次数

.then 中的返回函数

我对 Cypress 异步行为存在以下问题。我需要创建一个函数方法,该方法将从 URL 中获取参数并返回它,因为稍后它将在不同的地方使用

所以该方法将如下所示:

getParameterFromUrl(): string {
  cy.url().then(url => {
    cy.log(url);
    const parameterFromUrl = url.match(/\d+$/)[0];
    cy.log(paramterFromUrl);
    // return parameterFromUrl   I know this doesnt work because is within a then
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在测试的很多部分我将需要获取这个参数并使用它:

const parameter = onMyPageObject.getParameterFromUrl();

cy.log(parameter)
Run Code Online (Sandbox Code Playgroud)

我当然知道这是未定义的。我已经检查了很多可能的解决方案,但任何解决方案都说服了我,因为我必须用 then 外部来解释到处的代码,并在各处匹配正则表达式(我根本不喜欢这一点)。等待只适用于请求,所以我什至可以使用它。

在这种情况下,我可以做什么来改变异步行为以完成像这样简单的事情?

typescript cypress

-1
推荐指数
1
解决办法
138
查看次数

Cypress:从 SQL Server 获取数据并进行循环测试

我有一个自定义命令来从 SQL Server 获取用户数据,效果很好。但现在我找不到循环返回数据的方法。

我需要这样的东西:

var users = []

describe('start tests ', () => {
    before(() => {
        cy.getUser(1, 0).then(value => {
            users.push(value)
        });
    })

    users.forEach((u) => {

        it("Test for user " + u['username'], () => {

            // test script here

        });
    });
})
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为 JavaScriptforEach部分没有等待cy.before(). 我尝试并搜索但找不到解决方案。有任何想法吗?谢谢。

cypress

-1
推荐指数
1
解决办法
195
查看次数