如何在使用 Cypress 的测试中删除下载的文件

问题描述 投票:0回答:6

我试图在测试运行之前删除下载的文件,但找不到方法。

如何删除下载的文件?

download cypress
6个回答
23
投票

配置选项

"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)
        })
      })
    },
  })
}

4
投票

您可以将此配置添加到cypress.json:

"trashAssetsBeforeRuns": true


3
投票

最快的解决方案是使用 cypress-delete-downloads-folder npm 包。只需添加几行到您的赛普拉斯配置文件中,就可以使用一个命令从您的测试中清除该文件夹:

cy.deleteDownloadsFolder()

1
投票

@罗森·米哈伊洛夫 这是正确的例子,你只是错过了一些括号和行

/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)
                    })
                })
            },
        })
    }

0
投票

将其添加到您的 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 之后添加文件名


0
投票

你可以尝试使用

cy.exec()
:

示例:

cy.exec("find . -name " + <downloadDirectory> + "file");

cy.exec("cd " + <downloadDirectory> + ' ' + "&& rm -rf *");

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.