Cypress使用指南:如何通过Cypress命令验证PDF文件中的数据
Cypress PDF内容校验问题解决方法
问题原因
pdf-parse库解析完成后返回的是包含6个属性的对象,你直接打印整个对象就会显示object{6},其中只有text属性存储了PDF的纯文本内容。
解决方案
方案1:不修改插件代码,直接在测试用例中取值
调整spec文件的代码如下:
it('tests a pdf', () => { cy.task('getPdfContent', 'sample.pdf').then(pdfData => { // 提取PDF文本内容 const pdfContent = pdfData.text // 打印文本内容 cy.log(pdfContent) // 校验文本是否包含指定内容 expect(pdfContent).to.contain('你需要匹配的内容') // 按行拆分后校验指定行内容 const contentLines = pdfContent.split(/\n|\r\n/) expect(contentLines[1]).to.eq('第二行预期内容') }) })
方案2:修改插件代码直接返回文本内容
调整plugins/index.js中的parsePdf函数,直接返回文本,后续调用无需再额外取值:
const parsePdf = async (pdfName) => { const pdfPathname = path.join(repoRoot, pdfName) let dataBuffer = fs.readFileSync(pdfPathname); const pdfResult = await pdf(dataBuffer) // 直接返回纯文本内容 return pdfResult.text }
修改后spec文件中拿到的返回值就是纯文本,可以直接打印和校验:
it('tests a pdf', () => { cy.task('getPdfContent', 'sample.pdf').then(pdfContent => { cy.log(pdfContent) expect(pdfContent).to.contain('预期内容') }) })
注意事项
- 先确认项目已安装pdf-parse依赖,未安装可执行命令:
npm install pdf-parse --save-dev - 确认路径配置中的
sample.pdf文件真实存在,可在parsePdf函数中打印pdfPathname确认路径是否正确 - 扫描版的图片格式PDF无法通过pdf-parse提取文本,需要配合OCR工具处理
- 如果PDF设置了加密权限,也会导致提取文本失败
内容的提问来源于stack exchange,提问作者Shivam Shah
相关产品推荐
相关产品推荐

