单击超链接时能够 prevent/stop 在 Cypress 中加载 'Page load'

Ability to prevent/stop loading 'Page load' in Cypress when clicked a hyperlink

在我的赛普拉斯测试中, 我需要测试一个 link,点击时 下载 .txt、.xlsx 和 .zip 文件,但是当我使用“click()”点击 hyperlink,它开始加载页面并期望通过单击 link.

来执行新操作

作为替代方案,我尝试使用 cy.downloadFile() 直接通过 link 下载文件,但我使用的 link 是动态生成的,因此我无法使用那也是。因此,我想将新生成的 link 存储在变量中,然后在每次 运行 测试时在 cy.downloadFile() 中使用它。

是否有任何其他方法来测试 hyperlink 或每次测试 运行 时如何存储动态生成的 link?

你好,我以前遇到过这个问题。

我认为这与 cypress 测试运行器只是保持等待页面加载事件而不是在文件成功下载时转到下一个测试命令的情况相同。

添加自定义 cy.window 事件以监听点击事件并添加超时以“强制”重新加载当前页面,您需要调整超时值以适合您的测试。

    it.only('tes button download', ()=> {
        // visit url
        cy.visit("/spmb/list_nilaiseleksi");
        cy.get('#wrap-button > .btn').click()
        
        //download
        cy.window().document().then(function (doc) {
            doc.addEventListener('click', () => {
              setTimeout(function () { doc.location.reload() }, 5000)
            })
            cy.get(':nth-child(9) > .col-md-12 > .btn').click()
        })

    })

有关 cypress github 问题的更多详细信息和讨论可在此处获得: https://github.com/cypress-io/cypress/issues/14857

我找到了一种方法来存储我要单击的元素的 link。由于我能够存储 link,因此我能够通过使用 cy.downloadFile().

来解决需求
cy.get('@selector', {timeout: 15000}).then(($input) => {
            cy.downloadFile($input.attr('href'),'cypress/downloads','filename.csv')
        });