【发布时间】:2020-05-21 12:22:55
【问题描述】:
我是赛普拉斯的新手。如何使用 Cypress 从 excel 文件中读取数据?在 google 中搜索,但找不到有用的答案。
【问题讨论】:
标签: cypress
我是赛普拉斯的新手。如何使用 Cypress 从 excel 文件中读取数据?在 google 中搜索,但找不到有用的答案。
【问题讨论】:
标签: cypress
在 cypress 中,您可以创建 cypress task 以使用 SheetJS 库读取 xlsx 文件。
cypress\integration\read-xlsx.spec.js
context('Xlsx file', () => {
it('Read excel file', () => {
cy.task('readXlsx', { file: 'my-excel.xlsx', sheet: "Sheet1" }).then((rows) => {
expect(rows.length).to.equal(543)
// expect(rows[0]["column name"]).to.equal(11060)
})
})
})
$ npm install xlsx
cypress\plugins\read-xlsx.js
const fs = require('fs');
const XLSX = require('xlsx');
const read = ({file, sheet}) => {
const buf = fs.readFileSync(file);
const workbook = XLSX.read(buf, { type: 'buffer' });
const rows = XLSX.utils.sheet_to_json(workbook.Sheets[sheet]);
return rows
}
module.exports = {
read,
}
cypress\plugins\index.js
const readXlsx = require('./read-xlsx')
module.exports = (on, config) => {
on('task', {
'readXlsx': readXlsx.read
})
}
【讨论】:
这里是如何使用 excel 作为 cypress 测试源代码的说明https://medium.com/@you54f/dynamically-generate-data-in-cypress-from-csv-xlsx-7805961eff55
首先,您需要使用 Xlsx 将您的 xlsx 文件转换为 json
import { writeFileSync } from "fs"; import * as XLSX from "xlsx"; try { const workBook = XLSX.readFile("./testData/testData.xlsx"); const jsonData = XLSX.utils.sheet_to_json(workBook.Sheets.testData); writeFileSync( "./cypress/fixtures/testData.json", JSON.stringify(jsonData, null, 4), "utf-8" ); } catch (e) { throw Error(e); }
然后导入 json 文件并遍历每一行并以您想要的方式使用数据。在此示例中,它尝试登录到系统。
import { login } from "../support/pageObjects/login.page"; const testData = require("../fixtures/testData.json"); describe("Dynamically Generated Tests", () => { testData.forEach((testDataRow: any) => { const data = { username: testDataRow.username, password: testDataRow.password }; context(`Generating a test for ${data.username}`, () => { it("should fail to login for the specified details", () => { login.visit(); login.username.type(data.username); login.password.type(`${data.password}{enter}`); login.errorMsg.contains("Your username is invalid!"); login.logOutButton.should("not.exist"); }); }); }); });
【讨论】:
对我来说,第一个答案非常有效。但我必须做一个小修复。
将函数用作 Cypress 任务(插件)
cypress/plugins/index.js
const readXlsx = require('./read-xlsx')
module.exports = (on, config) => {
on('task', {
'readXlsx': readXlsx.read
})
}
当我使用此代码时,我在 cypress 中收到以下错误。
CypressError cy.task('log') 失败并出现以下错误: 插件文件中未处理任务“日志”。注册了以下任务:readXlsx
并且下面的修复工作
const readXlsx = require('./read-xlsx')
module.exports = (on, config) => {
on('task', {
'readXlsx': readXlsx.read,
log (message) {
console.log(message)
return null
}
})
}
【讨论】: