单击超链接时能够防止/停止在赛普拉斯中加载“页面加载”

Posted

技术标签:

【中文标题】单击超链接时能够防止/停止在赛普拉斯中加载“页面加载”【英文标题】:Ability to prevent/stop loading 'Page load' in Cypress when clicked a hyperlink 【发布时间】:2022-01-17 15:05:00 【问题描述】:

在我的赛普拉斯测试中, 我需要测试一个链接,该链接在单击时下载一个 .txt、.xlsx 和一个 .zip 文件,但是当我使用“click()”单击超链接时,它会启动 “页面load" 并期望由于单击链接而发生新的操作。 Here is a screenshot of the issue described above 作为替代方案,我尝试使用 cy.downloadFile() 直接通过链接下载文件,但我使用的链接是动态生成的,因此我也无法使用它。因此,我想将新生成的链接存储在变量中,然后每次运行测试时在 cy.downloadFile() 中使用它。 如果有人能告诉我,这将是一个帮助,是否有任何其他方法可以测试超链接或如何在每次运行测试时存储动态生成的链接?

【问题讨论】:

你能分享你的html链接部分吗? 【参考方案1】:

您好,我之前遇到过这个问题。

我认为这与 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

【讨论】:

【参考方案2】:

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

cy.get('@selector', timeout: 15000).then(($input) => 
            cy.downloadFile($input.attr('href'),'cypress/downloads','filename.csv')
        );

【讨论】:

以上是关于单击超链接时能够防止/停止在赛普拉斯中加载“页面加载”的主要内容,如果未能解决你的问题,请参考以下文章

停止在 webViewClient 中加载

赛普拉斯 - 检查按钮是不是存在,如果存在则单击它

单击赛普拉斯中的完全匹配文本

如果第二次测试失败,cypress 将停止执行,但我需要继续运行其他测试?在赛普拉斯

赛普拉斯:测试元素是不是不存在

访问新网址赛普拉斯