Dom*_*ála 8 automation automated-tests cypress
我在尝试检查文件是否已下载时遇到了一些问题。
单击按钮会生成一个 PDF 文件并开始下载。
我需要检查它是否有效。
赛普拉斯能做到这一点吗?
赛普拉斯/插件/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);
}, delay);
});
};
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;
};
Run Code Online (Sandbox Code Playgroud)
集成/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);
});
Run Code Online (Sandbox Code Playgroud)
我建议您查看 HTTP 响应正文。您可以通过以下方式获得响应cy.server().route('GET', 'url').as('download')(如果您不知道这些方法,请查看 cypress 文档)。
并捕获响应以验证正文不为空:
cy.wait('@download')
.then((xhr) => {
assert.isNotNull(xhr.response.body, 'Body not empty')
})
Run Code Online (Sandbox Code Playgroud)
或者,如果下载成功时有弹出窗口宣布成功,您也可以验证弹出窗口是否存在:
cy.get('...').find('.my-pop-up-success').should('be.visible')
Run Code Online (Sandbox Code Playgroud)
最好的,
编辑
Cypress 6.0.0 中已弃用 cy.server() 和 cy.route()。在未来的版本中,将删除对 cy.server() 和 cy.route() 的支持。考虑使用 cy.intercept() 代替。
根据迁移指南,这等效于:cy.intercept('GET', 'url').as('download')
| 归档时间: |
|
| 查看次数: |
9915 次 |
| 最近记录: |