Cypress 尝试加载页面,而不是尝试读取文件?

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

赛普拉斯代码

it('Check all pdf files after buying webstore items: AXQA-7446', () => {
    cy.visit(Cypress.env('base_url') + '/en/ShoppingCart/ThankYou/');
    cy.get('.ax-btn.ax-btn-secondary.ax-full-width').click();
    cy.get('.d-none.d-md-block.ax-pl-1').eq(0).click({timeout: 5000});
    cy.get('.ax-pb-2.semi-bold').children().should('have.length.gt', 0);
    cy.get('.ax-btn.ax-btn-secondary.ax-mb-1.ax-btn-sm').eq(0).click();    
    const currentDate = dayjs().format('YYYYMMDD');
    const fileName = 'Receipt_' + currentDate + '*.pdf';

    const filePath = path.join(__dirname, '..', '..', 'cypress', 'downloads', fileName);

    // Check if the file exists
    cy.task('fileExists', filePath).then((exists) => {
      expect(exists).to.be.true; // Assert that the file exists
    });
});

这是我从测试中得到的回应。

我想添加测试来检查文件是否存在。

未加载如图所示的页面。

有人可以向我解释我做错了什么吗?

download cypress
1个回答
2
投票

就测试下载而言,您似乎没有做错任何事情。

我建议该应用程序正在尝试显示下载的 PDF,并且查看器与 Cypress 测试运行程序不兼容。

您需要与开发人员核实 PDF 查看器的工作原理,但一种流行的方法是

window.open(<pdf-name>)

要处理这种情况,请将窗口打开函数存根到

cy.visit()
上并确认该函数已被调用。这可以防止激活实际的查看器,然后您的测试可以确认物理文件的下载。

以下是测试的大致方法:

cy.visit(<my-url>, {
  onBeforeLoad: (win) => {
    cy.stub(win, 'open').as('open')  // stubbing so that the viewer does not load
  }
})
...
cy.get('button').click()       // initiate the download

cy.get('@open').should('have.been.called')  // confirm the open command occurred

cy.task('fileExists', ...        // confirm the download here
© www.soinside.com 2019 - 2024. All rights reserved.