我正在使用以下版本进行赛普拉斯自动化
Cypress package version: 13.6.4
Cypress binary version: 13.6.4
Electron version: 25.8.4
Bundled Node version:
18.15.0
我正在从 Xlsx 文件读取数据并转换为 json,然后在 --headed 模式下运行时遇到问题。
案例 1:当使用命令“npx cypress run --headed”运行我的代码时,然后在浏览器中出现错误
案例 2:当使用命令“npx cypress run”运行我的代码时,没有收到此错误
分享我在cypress中使用的代码
const XLSX = require('xlsx')
const fs = require('fs')
const readData = (testCaseIdData) => {
try{
const testDataFilePath = "cypress\\fixtures\\TestData.xlsx"
// const workbook = XLSX.readFile(testDataFilePath);
const buf = fs.readFileSync(testDataFilePath);
const workbook = XLSX.read(buf, {type: 'buffer'})
const sheetName = workbook.SheetNames[0]; // Assuming data is in the first sheet
const worksheet = workbook.Sheets[sheetName];
const jsonData = XLSX.utils.sheet_to_json(worksheet);
// Filter JSON data based on test case ID column
const filteredData = jsonData.filter((row) => row['TestCaseId'] === testCaseIdData);
console.log(filteredData[0])
return filteredData[0]
}catch(e){
console.log(e)
}
}
module.exports = {
// `on` is used to hook into various events Cypress emits
readData,
}
const readXlsxData = require('./read-xlsx')
module.exports = (on, config) =>{
on('task',{
'readXlsxData': readXlsxData.readData
})
}
const { defineConfig } = require("cypress");
module.exports = defineConfig({
chromeWebSecurity:false,
e2e: {
setupNodeEvents(on, config) {
// implement node event listeners here
return require('./cypress/plugins/index.js')(on, config)
},
specPattern:'cypress/e2e/practice_code.js'
},
});
describe('Reading XLSX file and converting to JSON', () => {
it('should convert XLSX data to JSON based on test case ID column', () => {
const testCaseIdData = 'TC_002'; // Update this with the test case ID you want to filter
var data = cy.task('readXlsxData', testCaseIdData)
cy.log(data)
console.log(data)
});
});
请帮忙解决!!
我希望测试运行时应该打印我的结果。
根据Cypress文档-最佳实践,使用命令的返回值是一种反模式,包括
cy.task()
。
反模式:尝试使用 const、let 或 var 分配命令的返回值。
最佳实践:使用别名和闭包来访问和存储命令产生的内容。
所以你的测试代码应该是这样的:
cy.task('readXlsxData', testCaseIdData)
.then(data => {
cy.log(data)
console.log(data)
})