赛普拉斯使用正则表达式识别下载的文件

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 配置。这样一来,数组将只包含一个文件,无需比较下载前后的数组。

(刚刚注意到你有一个任务)。