0

在我的赛普拉斯测试中,我需要测试一个在单击时下载.txt、.xlsx 和 .zip 文件的链接,但是当我使用“click()”单击超链接时,它会启动页面加载并期待一个新的由于单击链接而发生的操作。

这是上述问题的屏幕截图

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

是否有任何其他方法可以测试超链接或如何在每次运行测试时存储动态生成的链接?

4

2 回答 2

0

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

我认为这是相同的场景,赛普拉斯测试运行程序只是继续等待页面加载事件,而不是在文件成功下载时转到下一个测试命令。

添加自定义 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

于 2021-12-22T06:57:49.273 回答
0

我找到了一种方法来存储我要单击的元素的链接。由于我能够存储链接,因此我可以使用 cy.downloadFile() 来解决要求。

cy.get('@selector', {timeout: 15000}).then(($input) => {
            cy.downloadFile($input.attr('href'),'cypress/downloads','filename.csv')
        });
于 2022-01-25T14:26:24.427 回答