如何在Appium+WebdriverIO原生自动化中验证Safari页面正确性
可以在原生自动化流程中通过Appium/WebdriverIO获取Safari的URL
完全可以实现,核心是通过切换上下文在原生应用和Safari的Web视图之间切换,具体步骤如下:
实现步骤
获取并切换到Safari的Web视图上下文
iOS中,原生应用和Safari分属不同的自动化上下文。你需要先获取当前所有可用上下文,筛选出Safari对应的Web视图上下文(通常包含WEBVIEW_com.apple.mobilesafari标识),再切换到该上下文。获取Safari当前加载的URL
切换到Web视图上下文后,直接调用WebdriverIO的getUrl()方法即可获取当前页面的URL。切换回原生应用上下文
URL验证完成后,切回原生上下文(标识为NATIVE_APP)即可继续后续的原生应用测试。
WebdriverIO代码示例
// 点击原生应用内的跳转按钮(假设你已经定位到该按钮) await $('~open-safari-button').click(); // 等待Safari启动并加载页面(可根据实际情况调整等待逻辑) await browser.waitUntil(async () => { const contexts = await browser.getContexts(); return contexts.some(ctx => ctx.includes('WEBVIEW_com.apple.mobilesafari')); }, { timeout: 10000, timeoutMsg: 'Safari Web上下文未出现' }); // 获取所有可用上下文并筛选Safari的Web视图 const contexts = await browser.getContexts(); const safariWebContext = contexts.find(ctx => ctx.includes('WEBVIEW_com.apple.mobilesafari')); // 切换到Safari的Web视图 await browser.switchContext(safariWebContext); // 获取当前URL并验证 const currentUrl = await browser.getUrl(); expect(currentUrl).toBe('https://your-target-url.com'); // 替换为预期的URL // 切换回原生应用上下文 await browser.switchContext('NATIVE_APP');
注意事项
- 确保测试设备/模拟器已开启Safari的Web Inspector:进入
设置 > Safari > 高级,开启Web Inspector选项。 - 处理Safari的弹窗:首次打开Safari可能会出现权限弹窗(如“是否允许通知”),需提前通过原生上下文定位并点击确认。
- 上下文名称适配:不同iOS版本或设备的Web视图上下文名称可能略有差异,使用
includes筛选比硬编码更稳妥。
内容的提问来源于stack exchange,提问作者user6939
相关产品推荐
相关产品推荐

