【问题标题】:How to find broken links in a website using Cypress?如何使用赛普拉斯在网站中查找损坏的链接?
【发布时间】:2021-03-04 20:12:05
【问题描述】:

如果有的话,我如何使用赛普拉斯找到网站中所有损坏的链接?有什么插件可以用吗?

如果不是,我应该如何编写我的代码以查看链接是否返回200 状态(或成功链接)?

谢谢!

【问题讨论】:

    标签: automation automated-tests cypress broken-links


    【解决方案1】:

    也许是这个?

    cy.request('yourlink')
      .should((response) => {
        expect(response.status).to.eq(200)
      })
    

    【讨论】:

    • 谢谢!我试过了,但它给了我一个错误!
    • 获取或发布并使用 cy.request 向我显示您的代码,您有什么问题,显示日志。
    • 如果通过链接 OP 表示 <a> 元素,那么也许您需要获取该元素,获取其 href 属性,然后在 href 元素的值上调用 cy.request?
    • 这是我的代码:cy.get("a").each($a => { const message = $a.text() expect($a, message).to.have。 attr("href").not.contain("undefined") }) cy.request("a[href]").should(response => { expect(response.status).to.eq(200) }) .
    • 看起来它向我显示了未定义的链接,但由于很多原因我们可能会损坏链接,所以我需要获取链接并确保它们每个都有效并返回成功的消息 (200)。该测试适用于网站上所有可用的墨水,而不仅仅是一种墨水,我只是展示了我的代码的最后一部分。我需要测试才能在网站上爬行并找到损坏的链接。谢谢
    【解决方案2】:

    试试这个...

    对于第一个选择a[href*="yourdomain.com"],我没有包含“www”的原因是因为对于我的项目,我们也链接到子域,所以我需要包含这些。

    在下半场,:not([href=""],同样对于我的项目,出于某种原因我们有这样的链接,所以我必须确保不包含它。

    $el.prop("href") 从 DOM 元素中获取 href 值。

    我正在使用 cy.request() 向 URL 发送 HTTP 请求,并确保它返回 200 从而证明该页面存在。

    代码如下:

    cy.get('a[href*="yourdomain.com"]:not([href=""])').each(($el) => {
      cy.request($el.prop("href")).as("link");
    });
    
    cy.get("@link").should((response) => {
      expect(response.status).to.eq(200);
    });
    

    您可以将其用于任何页面。您可以在 cypress.json 文件中列出您的页面,也可以通过编程方式将其作为回归测试。

    【讨论】:

      【解决方案3】:

      这是最简单的方法:

       cy.request("yourLink")
      

      是的,不需要添加任何断言。因为默认情况下会断言响应不是 404。所以这一行绰绰有余。


      如果您想加倍努力并测试页面中的所有链接,请执行以下操作:

       cy.get('a').each(link => {
          cy.request(link.prop('href'))
        })
      

      【讨论】:

        猜你喜欢
        • 2019-01-23
        • 1970-01-01
        • 1970-01-01
        • 2020-12-23
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多