javascript - cypress - 访问主站点时出现 403 禁止错误
问题描述
我正在尝试 cy.visit() 我的单页应用程序,该应用程序需要在浏览器中加载我的证书才能正确运行。运行测试时,它会因 403 禁止错误而失败。有一个糟糕的解决方法,我在 cypress/chrome 浏览器窗口中打开一个新选项卡并直接转到我的网络应用程序,它会提示我选择我的证书几次,然后加载页面。如果我然后重新加载测试,它会以某种方式保留我的证书选择并直接进入页面并运行测试。如果它必须像在 before 或 beforeEach 循环中那样执行第二次 cy.visit() ,则它会返回 403 禁止错误。似乎证书提示在启动 cypress/chrome 浏览器时会破坏测试,因为它通常会提示选择证书。由于它自动执行此操作,因此提示永远不会发生,
有没有人遇到过这种情况并提出比我的解决方法更好的解决方案?
解决方案
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 中完成。这是一个痛苦的设置,涉及一些团队的努力和一个喜欢参与测试的伟大开发人员。赛普拉斯已经证明是值得所有努力的,所以如果你现在还没有解决它,希望你重新考虑使用它。
推荐阅读
- python - 就 n 和 m 而言,以下算法的运行时复杂度是多少?
- vb.net - 从下拉框中选择项目时尝试激活特定的控制器功能
- php - httpful:当 JSON 属性值是 XML 中的字符串时,响应损坏
- exception - Keycloak 12.0.4 导出抛出异常
- html - 如何为不同的按钮组选择和更改颜色按钮?
- python - Python套接字如何添加多个客户端并向每个客户端发送字节
- javascript - ngx-dataTable 如何应用格式化功能
- node.js - 混淆 node_modules 被 .dockerignore 忽略
- python - arduino pyfirmata 模拟阅读
- php - 以编程方式设置发货 WooCommerce