赛普拉斯使用正则表达式识别下载的文件
Cypress identify the downloaded file using regex
我有一种情况,我必须根据 API 响应验证下载的文本文件的数据。
下面是我试过的代码。
测试:
const path = require('path')
const downloadsFolder = Cypress.config('downloadsFolder')
cy.task('deleteFolder', downloadsFolder)
const downloadedFilename = path.join(downloadsFolder, 'ABCDEF.txt')//'*.txt'
....
cy.get('@portmemo').its('response.body')
.then((response) => {
var json = JSON.parse(response);
const resCon = json[0].content.replaceAll(/[\n\r]/g, '');
cy.readFile(downloadedFilename).then((fc) => {
const formatedfc = fc.replaceAll(/[\n\r]/g, '');
cy.wrap(formatedfc).should('contains', resCon)
})
})
/cypress/plugins/index.js
中的任务
const { rmdir } = require('fs')
module.exports = (on, config) => {
console.log("cucumber started")
on('task', {
deleteFolder(folderName) {
return new Promise((resolve, reject) => {
rmdir(folderName, { maxRetries: 5, recursive: true }, (err) => {
if (err) {
console.error(err);
return reject(err)
}
resolve(null)
})
})
},
})
当我将 downloadedFilename 作为 'ABCDEF.txt' 时,它工作正常 [我在这里进行了硬编码]。但是我需要一些帮助来获取(动态)文件名,因为它每次都会更改 [例如:AUADLFA.txt、CIABJPT.txt、SVACJTM.txt、PKPQ1TM.txt 等,] .
我尝试使用“.text”,但我得到“在 4000 毫秒后重试超时:cy.readFile("C:\Repositories\xyz-testautomation\cypress\downloads/.txt") 失败,因为文件不存在错误。
我也提到了这个doc,但还没有成功。
使用正则表达式实现相同目的的正确方法是什么?也想知道有没有办法获取最近下载的文件名?
你可以利用这个问题中显示的任务
/cypress/plugins/index.js
const fs = require('fs');
on('task', {
downloads: (downloadspath) => {
return fs.readdirSync(downloadspath)
}
})
此 returns 下载文件夹中的文件列表。
理想情况下,您可以轻松地设置 trashAssetsBeforeRuns 配置。这样一来,数组将只包含一个文件,无需比较下载前后的数组。
(刚刚注意到你有一个任务)。
我有一种情况,我必须根据 API 响应验证下载的文本文件的数据。
下面是我试过的代码。
测试:
const path = require('path')
const downloadsFolder = Cypress.config('downloadsFolder')
cy.task('deleteFolder', downloadsFolder)
const downloadedFilename = path.join(downloadsFolder, 'ABCDEF.txt')//'*.txt'
....
cy.get('@portmemo').its('response.body')
.then((response) => {
var json = JSON.parse(response);
const resCon = json[0].content.replaceAll(/[\n\r]/g, '');
cy.readFile(downloadedFilename).then((fc) => {
const formatedfc = fc.replaceAll(/[\n\r]/g, '');
cy.wrap(formatedfc).should('contains', resCon)
})
})
/cypress/plugins/index.js
中的任务const { rmdir } = require('fs')
module.exports = (on, config) => {
console.log("cucumber started")
on('task', {
deleteFolder(folderName) {
return new Promise((resolve, reject) => {
rmdir(folderName, { maxRetries: 5, recursive: true }, (err) => {
if (err) {
console.error(err);
return reject(err)
}
resolve(null)
})
})
},
})
当我将 downloadedFilename 作为 'ABCDEF.txt' 时,它工作正常 [我在这里进行了硬编码]。但是我需要一些帮助来获取(动态)文件名,因为它每次都会更改 [例如:AUADLFA.txt、CIABJPT.txt、SVACJTM.txt、PKPQ1TM.txt 等,] .
我尝试使用“.text”,但我得到“在 4000 毫秒后重试超时:cy.readFile("C:\Repositories\xyz-testautomation\cypress\downloads/.txt") 失败,因为文件不存在错误。
我也提到了这个doc,但还没有成功。
使用正则表达式实现相同目的的正确方法是什么?也想知道有没有办法获取最近下载的文件名?
你可以利用这个问题中显示的任务
/cypress/plugins/index.js
const fs = require('fs');
on('task', {
downloads: (downloadspath) => {
return fs.readdirSync(downloadspath)
}
})
此 returns 下载文件夹中的文件列表。
理想情况下,您可以轻松地设置 trashAssetsBeforeRuns 配置。这样一来,数组将只包含一个文件,无需比较下载前后的数组。
(刚刚注意到你有一个任务)。