首页 > 解决方案 > cypress - 访问主站点时出现 403 禁止错误

问题描述

我正在尝试 cy.visit() 我的单页应用程序,该应用程序需要在浏览器中加载我的证书才能正确运行。运行测试时,它会因 403 禁止错误而失败。有一个糟糕的解决方法,我在 cypress/chrome 浏览器窗口中打开一个新选项卡并直接转到我的网络应用程序,它会提示我选择我的证书几次,然后加载页面。如果我然后重新加载测试,它会以某种方式保留我的证书选择并直接进入页面并运行测试。如果它必须像在 before 或 beforeEach 循环中那样执行第二次 cy.visit() ,则它会返回 403 禁止错误。似乎证书提示在启动 cypress/chrome 浏览器时会破坏测试,因为它通常会提示选择证书。由于它自动执行此操作,因此提示永远不会发生,

有没有人遇到过这种情况并提出比我的解决方法更好的解决方案?

标签: javascriptssl-certificatecypress

解决方案


httpProxy.createProxyServer({
target: {
protocol: 'https:',
host: 'my-domain-name',
port: 443,
pfx: fs.readFileSync('path/to/certificate.p12'),
passphrase: 'password', },
changeOrigin: true,
}).listen(4440);

解决方案:

添加一个 http 代理服务器并将 PKI 附加到传出请求上,假设您将代理设置为侦听 localhost:4440,所以现在您正在执行 cy.visit( http://localhost:4440 )。代理将 visit() 请求转发到 host:'my-domain-name' 并附加 PKI。

出于某种原因,无论赛普拉斯在后台做什么,都会阻止赛普拉斯浏览器在 PKI 证书上加载/转发。您可能还需要使用 cert utils https://www.systutorials.com/docs/linux/man/1-certutil/在执行服务器数据库上安装证书。CY 电子浏览器将自动加载安装在 db 上的证书,因此重要的是,您只有在那里拥有有权访问被测应用程序的证书。当想要在 CI 管道中运行时,这一切都可以在 Ansible 中完成。这是一个痛苦的设置,涉及一些团队的努力和一个喜欢参与测试的伟大开发人员。赛普拉斯已经证明是值得所有努力的,所以如果你现在还没有解决它,希望你重新考虑使用它。


推荐阅读