Nightwatch 2.2.2版本中如何正确切换到iframe
Nightwatch 2.2.2 版本切换iframe正确实现方案
Nightwatch 2.x 全系列对齐W3C WebDriver标准,移除了旧版本非标准的ELEMENT属性依赖,旧版裸传数字索引的browser.frame(1)写法已不兼容,以下是实测可用的实现方式:
- 按iframe索引切入
新版frame()方法不再支持直接传入数字索引,需要将索引值放到配置对象的id字段中传入,索引计数规则和旧版本保持一致,从0开始计数:// 切入页面中第2个iframe browser.frame({ id: 1 }) - 按选择器匹配iframe后切入
不需要手动解析元素的ELEMENT属性,直接传入iframe的定位选择器即可,框架会自动完成元素引用解析、加载等待的全流程:// 传入CSS选择器直接切入对应iframe browser.frame('iframe[data-id="contentFrame"]') // 复杂定位场景可传入定位配置对象,支持自定义超时、定位策略 browser.frame({ selector: '//iframe[@class="pay-frame"]', locateStrategy: 'xpath', timeout: 5000 }) - 层级回退操作
切回顶层主文档、切回父级iframe的API逻辑和旧版本兼容:// 无参数调用直接切回最顶层主文档 browser.frame() // 传入null等价于切回顶层主文档 browser.frame(null) // 从嵌套iframe中切回上一级父iframe browser.parentFrame()
注意:新版frame方法内置了iframe加载等待逻辑,只要传入的索引、选择器匹配正确,不需要额外添加等待iframe出现的前置断言,框架会自动等待iframe就绪后再执行切入操作。
内容的提问来源于stack exchange,提问作者SoSo
相关产品推荐
相关产品推荐

