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

Cypress 如何访问不同来源的 url ?

4 个月前提问
3 个月前修改
浏览次数20

1个答案

1

在使用Cypress进行端对端测试时,通常我们会遇到需要访问或测试不同来源(origin)的URL的情况。由于同源策略(Same Origin Policy),Cypress 默认不允许在一个测试用例中访问多个不同的来源。但是,Cypress 提供了一些方法来处理这种情况。

1. 使用 cy.origin 命令

从 Cypress 9.6.0 版本开始,引入了 cy.origin 命令,这个命令允许在同一个测试中与其他来源的页面进行交互。这是处理不同来源URL的推荐方法。 cy.origin 接受两个参数:另一个来源的URL和一个回调函数,回调函数中可以执行对该来源的操作。

例子: 假设我们需要在测试中访问 Google 搜索页面和我们自己的应用页面。

javascript
it('should be able to interact with multiple origins', () => { cy.visit('https://我们的应用.com'); // 访问我们的应用 cy.get('.some-element').should('be.visible'); // 检查元素 cy.origin('https://www.google.com', () => { cy.visit('/'); // 访问 Google cy.get('input[name="q"]').type('Cypress Testing{enter}'); // 在搜索框中输入 }); cy.url().should('include', 'https://我们的应用.com'); // 验证我们回到了我们的应用 });

2. 通过配置修改

虽然 cy.origin 是推荐的方式,但在早期版本的 Cypress 或者特定情况下,我们可能会通过修改配置来允许跨域访问。可以通过设置 chromeWebSecurityfalsecypress.json 配置文件中来禁用同源策略的限制。

例子:

json
{ "chromeWebSecurity": false }

这使得在测试中可以自由地访问任何URL,不过需要注意的是,关闭同源策略可能会带来安全性和稳定性的风险。

3. 使用代理服务器

另一种技术是在测试环境中使用代理服务器,将所有外部请求重定向到同一个来源。这通常是通过配置你的网络环境或使用某些特定的中间件完成的,而不是直接通过 Cypress 完成。

总之,要在Cypress中处理多来源URL,最好使用 cy.origin 命令,这是最新也是最安全的方法。如果使用旧版本的Cypress或有特殊需求,还可以考虑修改配置或使用代理服务器。

2024年6月29日 12:07 回复

你的答案