NightwatchJS搭配SafariDriver测试时无法识别嵌套iFrame问题求助
NightwatchJS 搭配 Selenium + SafariDriver 嵌套iframe访问异常问题
我在使用NightwatchJS搭配Selenium和SafariDriver测试代码时遇到了问题,已经在Nightwatch仓库提交了未解决的issue,暂时无法确定是Nightwatch本身的问题还是底层依赖的问题。
待测试的HTML结构大致如下:
<body> <iframe id="top-iframe" src="about:blank"> #document <html> <body> <container> <!-- 需访问该iframe执行测试 --> <iframe id="nested-iframe" src="news.google.com"></iframe> </container> </body> </html> </iframe> </body>
测试需要从顶层文档访问#nested-iframe以校验其内容。测试代码基于NightwatchJS开发,完整配置、环境搭建和代码细节可查看对应的GitHub issue。
问题核心
要访问嵌套iFrame,需要先定位到#top-iframe元素,将返回的元素传入frame方法,调用WebDriver接口将测试会话的上下文切换到该框架内。这一步在Chrome、火狐和Safari上都可正常执行,三类浏览器都能识别到顶层iframe元素并完成上下文切换。我通过查找顶层iframe内除嵌套iframe外的其他DOM元素,验证了Safari确实已完成iFrame上下文切换。
但问题在于,Safari切换到#top-iframe上下文后,无法识别#nested-iframe元素,Nightwatch的HTTP调用返回404 no such element错误,这一现象非常奇怪。
已排查项
- 排除跨域问题:我起初猜测是跨域问题,但查阅WebDriver切换框架的官方文档可知,WebDriver不受同源策略约束,因此始终可以切换到子浏览上下文,即便它们与当前浏览上下文不同源。我也尝试在Safari开发者菜单中勾选了
Disable Cross Origin Restrictions选项,问题依旧存在。 - 排除元素未加载问题:我可以在
#top-iframe内定位到其他DOM元素,也设置了10-15秒的超时等待页面加载,通过浏览器调试器可以看到#nested-iframe确实存在且内容正常加载,控制台也没有任何内容加载失败的报错。
目前我没有进一步调试的思路,希望有相关经验的开发者能给出建议,或者有遇到过同类问题的开发者可以分享解决方案,也希望该问题的记录能帮到遇到同样情况的人,提前感谢!
内容的提问来源于stack exchange,提问作者Mike Wilcox
相关产品推荐
相关产品推荐

