You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Appium+WebdriverIO原生自动化中验证Safari页面正确性

可以在原生自动化流程中通过Appium/WebdriverIO获取Safari的URL

完全可以实现,核心是通过切换上下文在原生应用和Safari的Web视图之间切换,具体步骤如下:

实现步骤

  1. 获取并切换到Safari的Web视图上下文
    iOS中,原生应用和Safari分属不同的自动化上下文。你需要先获取当前所有可用上下文,筛选出Safari对应的Web视图上下文(通常包含WEBVIEW_com.apple.mobilesafari标识),再切换到该上下文。

  2. 获取Safari当前加载的URL
    切换到Web视图上下文后,直接调用WebdriverIO的getUrl()方法即可获取当前页面的URL。

  3. 切换回原生应用上下文
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:20:38