首页 > 解决方案 > 赛普拉斯 - 在 iframe 中运行测试

问题描述

我正在尝试在 iframe 中查找元素,但它不起作用。

有没有人有一些系统可以在 iframe 中使用 Cypress 运行测试?某种进入 iframe 并在那里工作的方法。

标签: automationautomated-testscypress

解决方案


这是这里提到的一个已知问题。您可以创建自己的自定义 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 的原因,您可能必须设置chromeWebSecurityfalsein cypress.json(将 chromeWebSecurity 设置为 false 允许您访问嵌入在应用程序中的跨域 iframe,并且还可以导航到任何超级域而不会出现跨域错误) .

这是一种解决方法,它在本地对我有用,但在 CI 运行期间不起作用。


推荐阅读