【发布时间】:2021-07-22 12:54:34
【问题描述】:
我在一个角度组件中有一个 iframe,我使用组件工厂动态地向其中注入一个组件 X(将本机元素附加到 iframe 的主体)。我这样做的原因是因为我需要媒体查询才能在组件中运行。如果没有 ViewEncapsulation.ShadowDom,在框架内注入的组件将是“无样式”的。
到目前为止,一切都很好,而且功能完全按照我的意愿工作。但是,在 e2e 测试期间,我无法访问 shadow-root 中的任何元素,我尝试了多种方法,例如 document.querySelector('component-id').shadowRoot.querySelector('element-id') 甚至提到了 here 的库和变通方法。
一切都会导致同样的错误
StaleElementReferenceError:过时的元素引用:过时的元素不是 找到了
总结一下,
- 一个带有 Shadow Dom 封装的 Angular 组件被注入到 iframe 中
- 无法使用所有可用方法访问注入组件的 shadowroot 内的元素
【问题讨论】:
-
你控制iframe的全部内容吗?还是来自另一个站点,而您只是在那里注入了自己的东西?
-
@AviadP。我控制框架的全部内容,iframe 被注入了一个组件(在同一个项目中)。主要使用 iframe,因为我们需要媒体查询才能正常工作
-
问题,如果你控制了iframe内容,为什么不把它指向app中的一个url呢?为什么要麻烦从外部注入 iframe?
-
这是个好问题。这样做的原因是整个应用程序是一个包含多层组件和路由的SPA,而最终iframe内部显示的内容只是一个简单的组件
-
设置一个仅显示该组件并将 iframe 的源 URL 指向该组件的 Angular 路由有多难?
标签: angular protractor angular-e2e