0

我正在用 POM 写一个 Cypress。我想将断言文本/消息放在 textdata.json/txt 中,这样我就不会用太多的文本/信息填充页面类。我尝试了不同的方法,例如;

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

或者

cy.get("element") .should("have.text", this.data.variable name from json file)

具有前功能但不起作用。

知道我怎样才能取悦这个吗?

4

2 回答 2

0

也许最简单和最不脆弱的方法是将文本添加到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)
})

夹具文件只读取一次,并且不会在测试之间由赛普拉斯运行程序清除(这是局部变量发生的情况)。

只要确保您没有将它们命名为赛普拉斯已经使用的属性(console.log(Cypress)检查)。

您也可以通过将其before(() => cy.readFile...移至cypress/support/index来全局执行此操作(适用于所有规格) 。

于 2021-03-15T08:46:36.260 回答
0

根据您的要求,当您尝试在 DAMP 和 DRY 原则之间找到正确的平衡时,您不想使用page class我认为是公平的。我可以建议以下文本/消息的最小用法:

一个。使用 import 而不是 readFile

赛普拉斯/夹具/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)

湾。使用fixtures而不是readFile

赛普拉斯/夹具/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 / 选择器文件:(我在我的项目中使用这个堆)

赛普拉斯/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)
于 2021-03-15T06:50:23.153 回答