automation - Cypress - 检查文件是否已下载

标签 automation automated-tests cypress

我在尝试检查文件是否已下载时遇到了一些问题。
单击按钮会生成一个 PDF 文件并开始下载。
我需要检查它是否有效。
Cypress 能做到这一点吗?

最佳答案

柏树/插件/index.js

    const path = require('path');
    const fs = require('fs');
    
    const downloadDirectory = path.join(__dirname, '..', 'downloads');
    
    const findPDF = (PDFfilename) => {
      const PDFFileName = `${downloadDirectory}/${PDFfilename}`;
      const contents = fs.existsSync(PDFFileName);
      return contents;
    };
    
    const hasPDF = (PDFfilename, ms) => {
      const delay = 10;
      return new Promise((resolve, reject) => {
        if (ms < 0) {
          return reject(
            new Error(`Could not find PDF ${downloadDirectory}/${PDFfilename}`)
          );
        }
        const found = findPDF(PDFfilename);
        if (found) {
          return resolve(true);
        }
        setTimeout(() => {
          hasPDF(PDFfilename, ms - delay).then(resolve, reject);
        }, 10);
      });
    };
    
    module.exports = (on, config) => {
      require('@cypress/code-coverage/task')(on, config);
      on('before:browser:launch', (browser, options) => {
        if (browser.family === 'chromium') {
          options.preferences.default['download'] = {
            default_directory: downloadDirectory,
          };
          return options;
        }
        if (browser.family === 'firefox') {
          options.preferences['browser.download.dir'] = downloadDirectory;
          options.preferences['browser.download.folderList'] = 2;
          options.preferences['browser.helperApps.neverAsk.saveToDisk'] =
            'text/csv';
          return options;
        }
      });
    
      on('task', {
        isExistPDF(PDFfilename, ms = 4000) {
          console.log(
            `looking for PDF file in ${downloadDirectory}`,
            PDFfilename,
            ms
          );
          return hasPDF(PDFfilename, ms);
        },
      });
    
      return config;
    };
集成/pdfExport.spec.js
    before('Clear downloads folder', () => {
       cy.exec('rm cypress/downloads/*', { log: true, failOnNonZeroExit: false });
    });
        
    it('Should download my PDF file and verify its present', () => {
        cy.get('ExportPdfButton').click();
        cy.task('isExistPDF', 'MyPDF.pdf').should('equal', true);
    });

关于automation - Cypress - 检查文件是否已下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60509843/

相关文章:

javascript - 如何从 JavaScript 函数调用 Java 方法?

windows - VBA:IE-如何在没有弹出文件上传表单的情况下将路径名分配给文件输入标签?

javascript - 为什么选择 JavaScript 作为 UI 测试自动化的语言?

php - 使用抽象参数实例化对象

testing - 如何在 Cypress 中点击 x 次

docker - Cypress ci缺少libgtk-x11-2.0.so.0

javascript - 在 visual studio 代码中丢失了 cypress 的智能感知

java - Robotium 脚本中的当前日期验证

python - 如何自动将数据帧切片成批处理以避免 python 中的 MemoryError

.net - 我们可以编写脚本并使浏览器自动化,最好是使用 .Net 吗?