automation - 赛普拉斯 - 在 iframe 中运行测试
问题描述
我正在尝试在 iframe 中查找元素,但它不起作用。
有没有人有一些系统可以在 iframe 中使用 Cypress 运行测试?某种进入 iframe 并在那里工作的方法。
解决方案
这是这里提到的一个已知问题。您可以创建自己的自定义 cypress 命令来模拟 iframe 功能。将以下功能添加到您的cypress/support/commands.js
Cypress.Commands.add('iframe', { prevSubject: 'element' }, ($iframe, selector) => {
Cypress.log({
name: 'iframe',
consoleProps() {
return {
iframe: $iframe,
};
},
});
return new Cypress.Promise(resolve => {
resolve($iframe.contents().find(selector));
});
});
然后你可以像这样使用它:
cy.get('#iframe-id')
.iframe('body #elementToFind')
.should('exist')
此外,由于 CORS/same-origin policy 的原因,您可能必须设置chromeWebSecurity
为false
in cypress.json
(将 chromeWebSecurity 设置为 false 允许您访问嵌入在应用程序中的跨域 iframe,并且还可以导航到任何超级域而不会出现跨域错误) .
这是一种解决方法,它在本地对我有用,但在 CI 运行期间不起作用。
推荐阅读
- r - 无法在 R 中模拟具有已知相关性和约束的比例
- arrays - 在不超载内存的情况下对 UIView 进行多张截图
- ios - WKWebview 服务工作者
- python-3.x - 从python读取二维数组文本文件时出现问题
- javascript - 如何在 Google App Scipt 中插入此表情符号?
- javascript - 基于枚举的 AJV if-then-else 条件类型
- regex - HAproxy 重定向和基于参考代码的路径重写
- windows - 无法使用 Jenkins 在 cygwin(mintty 终端)上执行 shell 脚本
- postgresql - 在 AWS ECS 上部署 docker 容器失败
- c# - 我可以使用 dotnet publish 命令构建 .NET Framework 应用程序吗?