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
相关产品推荐
相关产品推荐

