使用 configFile 断言文本数据

Text data assert with configFile

我正在用 POM 编写 Cypress。我想将 assert texts/messages 放在文本数据中。json/txt 这样我就不会在页面 class 中填充太多 texts/information。我尝试了不同的方法,例如;

cy.get("element")
  .readFile('cypress\fixtures\testData.json')
  .should("have.text", variable name from json file)

cy.get("元素") .should("have.text", this.data.variable 来自 json 文件的名称)

有之前的功能,但没有用。

知道如何让这个满意吗?

根据您的要求,您不想使用 page class,我认为当您试图在 DAMP 和 DRY 原则之间找到适当的平衡时,这是公平的。我可以建议 texts/messages 的以下最小用法:

一个。使用 import 而不是 readFile

cypress/fixtures/testData.json:

{
 "text": "variable name from json file"
}

cypress/integration/spec.js(测试文件):

import * as testData from '../fixtures/testData'

cy.get("element").should("have.text", testData.text)

b.使用 fixtures 而不是 readFile

cypress/fixtures/testData.json:

{
 "text": "variable name from json file"
}

cypress/integration/spec.js(测试文件):

cy.fixture('testData').then((data) => {
 cy.get("element").should("have.text", data.text)
})

c.使用自定义的 POM / 选择器文件:(我在我的项目中使用这个堆)

cypress/pages/loginPage.js:

export const testDataModel = {
 text: "variable name from json file"
}

cypress/integration/spec.js(测试文件):

import {testDataModel} from '../pages/loginPage'

cy.get("element").should("have.text", testDataModel.text)

也许最简单和最不脆弱的方法是将文本添加到 Cypress 对象。

before(() => {
  cy.readFile('cypress\fixtures\testData.json')
    .then(data => Cypress.texts = data);
})

it('tests with testData', () => {
  cy.get("element").should("have.text", Cypress.texts.myElementText)
})

fixture 文件只读一次,在测试之间不会被 Cypress runner 清除(这是局部变量发生的情况)。

只要确保您没有将它们命名为与 Cypress 已经使用的 属性 相同的名称(console.log(Cypress) 进行检查)。

您也可以通过将 before(() => cy.readFile... 移动到 cypress/support/index.

来全局(针对所有规格)执行此操作