乐闻世界logo
搜索文章和话题

How to check all links in cypress without stopping in case of an error

8 个月前提问
6 个月前修改
浏览次数54

1个答案

1

在Cypress中,要检查网页上的所有链接是否可访问,您可以编写一个测试,遍历每个链接并对其进行GET请求以验证响应状态。为了确保出现错误时测试不会停止,可以使用.then().catch()来处理成功和错误的情况,或者使用Cypress的.request()方法的配置选项来忽略错误。

以下是一个用Cypress编写的示例测试脚本,该脚本遍历页面上的所有<a>标签元素,并对每个链接发起请求以检查其可访问性:

javascript
describe('链接可访问性测试', () => { it('应该能够访问页面上的所有链接', () => { cy.visit('https://example.com'); // 替换为您要测试的页面URL cy.get('a').each(($a) => { const href = $a.prop('href'); if (href) { cy.request({ url: href, failOnStatusCode: false // 这将确保请求响应代码为4xx或5xx时不会导致测试失败 }).then((response) => { expect(response.status).to.be.oneOf([200, 301, 302]); // 这里列举了可以接受的响应状态码 }); } }); }); });

在这个例子中,cy.get('a')命令用于获取页面上的所有链接。each()函数用来迭代这些链接,并对每个链接执行一个动作。在这里,动作是使用cy.request()发送一个GET请求到链接的href属性所指向的地址。

cy.request()命令默认情况下会在响应状态码为4xx或5xx时导致测试失败。为了防止这种情况,我们设置failOnStatusCode: false,这样即使请求失败,也不会导致测试停止。

.then()回调函数中,我们检查响应状态码是否符合我们定义的可接受的状态码列表。例如,通常200表示请求成功,而301和302表示重定向。您可以根据需要调整这个列表。

请注意,这个测试只是检查链接是否可以被成功访问,并不检查链接的目标内容是否正确或有效。此外,并非所有链接都应该返回200状态码;有些可能是故意设计为返回其他状态码的。根据您的实际需求,可能需要对这个脚本进行适当的调整。

2024年6月29日 12:07 回复

你的答案