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

Detox测试:iOS模拟器中从默认浏览器返回应用的点击问题

解决Detox无法点击iOS模拟器返回应用按钮的问题

我完全懂你现在的困扰——iOS模拟器里明明有返回应用的按钮,但Detox脚本就是点不到,测试卡在这里真的头疼对吧?给你几个实用的解决方案,你可以按需试试:

方案1:用深链接直接唤起应用(最稳妥)

不用纠结系统按钮,Detox支持通过应用深链接直接跳回你的App,比点击系统按钮可靠多了。

修改你的测试代码如下:

it('12. Check icon with site and go back to App', async () => { 
  await element(by.id('icon.Site')).tap(); // 跳转到Safari
  // 替换成你自己App的深链接(比如myapp://,需要提前在Xcode配置好)
  await device.openURL({ url: 'myapp://' }); 
  // 验证是否成功回到App,比如检查首页元素是否可见
  await expect(element(by.id('home-screen'))).toBeVisible();
});

注意:要确保你的App在Xcode的Info.plist里配置了对应的CFBundleURLTypes,不然深链接没法唤起应用。

方案2:调用原生XCTest API点击系统按钮

如果一定要模拟点击那个系统返回按钮,可以借助Detox的device.execute()调用原生XCTest的能力,直接定位并点击按钮。

试试这段代码:

it('12. Check icon with site and go back to App', async () => { 
  await element(by.id('icon.Site')).tap(); // 跳转到Safari
  // 执行原生脚本找到返回按钮并点击
  await device.execute(() => {
    const returnButton = XCUIApplication(bundleIdentifier: "com.apple.mobilesafari")
      .buttons.matching(label: "Application").firstMatch;
    if (returnButton.exists) {
      returnButton.tap();
    }
  });
  // 验证回到应用
  await expect(element(by.id('home-screen'))).toBeVisible();
});

要是按钮的label不对,你可以用Xcode的Accessibility Inspector工具,直接查看模拟器里按钮的准确标识。

方案3:调整测试策略,绕过系统按钮

如果上面两种方法都不适用,其实可以换个思路:不用强制返回App,而是先验证跳转行为是否正确,再重启App回到测试流程。

比如:

it('12. Check icon with site and go back to App', async () => { 
  await element(by.id('icon.Site')).tap();
  // 验证是否成功跳转到目标URL
  const currentUrl = await device.execute(() => {
    return XCUIApplication(bundleIdentifier: "com.apple.mobilesafari").textFields.firstMatch.value;
  });
  await expect(currentUrl).toContain("你的目标URL关键词");
  // 直接重启App继续后续测试
  await device.launchApp({newInstance: true});
});

内容的提问来源于stack exchange,提问作者Fisher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:25:33