我试图在测试运行之前删除下载的文件,但找不到方法。
如何删除下载的文件?
配置选项
"trashAssetsBeforeRuns": true
默认为true,因此除非您已经更改了它,否则这不是您正在寻找的答案。
请注意,它仅适用于
cypress run
(无头)模式,参考cypress.d.ts(通过简单测试确认)。
另请注意
downloadsFolder
配置选项,默认为 /cypress/downloads
。在项目之外,使用完整路径。
对于
cypress open
,食谱 local-download-spec.js 为您提供了一个示例。
测试
import { deleteDownloadsFolder } from './utils'
...
beforeEach(deleteDownloadsFolder)
...
实用工具
export const deleteDownloadsFolder = () => {
const downloadsFolder = Cypress.config('downloadsFolder')
cy.task('deleteFolder', downloadsFolder)
}
/cypress/plugins/index.js 中的任务
const { rmdir } = require('fs')
module.exports = (on, config) => {
on('task', {
deleteFolder(folderName) {
console.log('deleting folder %s', folderName)
return new Promise((resolve, reject) => {
rmdir(folderName, { maxRetries: 10, recursive: true }, (err) => {
if (err) {
console.error(err)
return reject(err)
}
resolve(null)
})
})
},
})
}
您可以将此配置添加到cypress.json:
"trashAssetsBeforeRuns": true
最快的解决方案是使用 cypress-delete-downloads-folder npm 包。只需添加几行到您的赛普拉斯配置文件中,就可以使用一个命令从您的测试中清除该文件夹:
cy.deleteDownloadsFolder()
@罗森·米哈伊洛夫 这是正确的例子,你只是错过了一些括号和行
/cypress/plugins/index.js 中的任务
/// <reference types="cypress" />
/* eslint-disable no-console */
const { rmdir } = require('fs')
/**
* @type {Cypress.PluginConfig}
*/
module.exports = (on, config) => {
// `on` is used to hook into various events Cypress emits
// `config` is the resolved Cypress config
// register utility tasks to read and parse Excel files
on('task', {
deleteFolder(folderName) {
console.log('deleting folder %s', folderName)
return new Promise((resolve, reject) => {
rmdir(folderName, { maxRetries: 10, recursive: true }, (err) => {
if (err) {
console.error(err)
return reject(err)
}
resolve(null)
})
})
},
})
}
将其添加到您的 config.js 中
on('task', {
deleteFolder(folderName) {
return new Promise((resolve, reject) => {
rm(
folderName,
{
maxRetries: 10,
recursive: true
},
(err) => {
if (err) {
console.error(err)
}
resolve(null)
}
)
})
}
})
然后将其添加到您的测试中:
beforeEach(() => {
cy.task('deleteFolder', 'cypress//downloads//');
});
如果特别想删除文件,可以在 cypress//downloads//filename 之后添加文件名
你可以尝试使用
cy.exec()
:
示例:
cy.exec("find . -name " + <downloadDirectory> + "file");
cy.exec("cd " + <downloadDirectory> + ' ' + "&& rm -rf *");