【发布时间】:2021-11-14 00:20:25
【问题描述】:
我在使用带有 Selenium 和 SafariDriver 的 NightwatchJS 测试一段代码时遇到了困难。
我在 nightwatch repo 上有一个open issue,虽然我不确定这是否是 nightwatch 的问题还是更深层次的问题。
要测试的 HTML 内容类似于:
<body>
<iframe id="top-iframe" src="about:blank">
#document
<html>
<body>
<container>
<!-- access this iframe to test -->
<iframe id="nested-iframe" src="news.google.com"></iframe>
</container>
</body>
</html>
</iframe>
</body>
需要从顶级文档访问#nested-frame 以检查内容。
测试代码使用NightwatchJS,有关配置、设置和代码的更多详细信息在GitHub issue。
问题的要点:
问题是要访问嵌套的 iFrame,它需要首先找到 #top-frame web 元素,使用返回的 web 元素并将其传递给 frame,这使得 WebDriver 调用将测试会话的上下文更改为该框架.这对 Chrome、FF 和 Safari 来说都很好,因为它们都可以找到这个框架 Web 元素并切换到框架上下文。我对 Safari 正在更改 iFrame 上下文的测试(虽然不确定它有多好)是尝试找到它可以找到的嵌套框架以外的另一个 DOM 元素。使用 Safari 时出现问题,在切换到 #top-frame 后,它找不到 #nested-frame 网络元素,并且 Nightwatch 从 HTTP 调用返回 404 no such element。很奇怪吧?
这很令人费解,我最近的想法是这可能是一个跨源问题。但后来我在 WebDriver switch to frame 上阅读:
NOTE WebDriver is not bound by the same origin policy, so it is always possible to switch into child browsing contexts, even if they are different origin to the current browsing context.
我还尝试从 Safari 开发者菜单中检查 Disable Cross Origin Restrictions。
如前所述,我可以在#top-frame 中找到另一个DOM 元素。我尝试了诸如 10-15 秒超时之类的事情,认为它可能需要加载。我可以用调试器检查浏览器,看到#nested-frame 在那里并且内容按预期加载。没有控制台错误表明任何内容加载失败。
这对我来说非常令人费解,我不确定如何进一步调试。也许其他有新观点的人可以提出建议,或者如果有人遇到过类似的情况。将其作为信息扔到宇宙中也仅限于该主题,因此也许这可以对其他人有所帮助。蒂亚!
【问题讨论】:
标签: selenium selenium-webdriver iframe nightwatch.js safaridriver