如何在 Cypress 中动态输入文本

How to dynamically type text in Cypress

我想在cypress中输入动态文本,所以在每个运行,name字段不会重复输入,例如name1,name 2...

所以在 js 文件中我会有类似

的东西
And("I enter a name", () => {
     portalPage.roleName().type("Cypress admin" + 1, { force: true })
})

感谢任何帮助。

在 运行 秒之间,您必须将最后使用的数字写入夹具,

And("I enter a name", () => {
  cy.fixture('name-num.json').then(num => 
     const next = num +1;
     portalPage.roleName().type(`Cypress admin ${next}`, { force: true })
     cy.writeFile('cypress/fixtures/name-num.json', next.toString())
})

如果您在同一个 运行 中多次执行此操作,cy.fixture 将不起作用,因为它会缓存读取的值。

改为使用readFile()

And("I enter a name", () => {
  cy.readFile('cypress/fixtures/name-num.json').then(num => 
     const next = num +1;
     portalPage.roleName().type(`Cypress admin ${next}`, { force: true })
     cy.writeFile('cypress/fixtures/name-num.json', next.toString())
})

如果您只需要同一规范中的值不同,您可以将值存储在 Cypress 环境变量中。在规范完成之前,环境变量不会被清除 运行。

And("I enter a name", () => {
     // set the environment variable to current value + 1, or if it hasn't been set, 1.
     Cypress.env("myNumber", Cypress.env("myNumber")++ ?? 1);
     // use the environment variable
     portalPage.roleName().type("Cypress admin" + Cypress.env("myNumber"), { force: true });
})

您可以使用 faker js 生成唯一的名称,然后使用它。要安装,请使用 npm install @faker-js/faker --save-dev。你的测试应该是这样的:

const faker = require('faker')

And('I enter a name', () => {
  Cypress.env('Name', faker.name.firstName())
  portalPage
    .roleName()
    .type('Cypress admin ' + Cypress.env('Name'), {force: true})
})

如果您愿意,也可以使用全名代替 Cypress admin some-name

const faker = require('faker')

And('I enter a name', () => {
  Cypress.env('Name', faker.name.findName())
  portalPage
    .roleName()
    .type(Cypress.env('Name'), {force: true})
})

如果您正在寻求随机输入,那么 lodash .random() 将生成一个从 0 到输入的随机数。

// will generate random number between 0 and 9999
portalPage.roleName().type(`Cypress admin${Cypress._.random(9999)}`, { force: true })