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

如何在iOS模拟器UI自动化测试中验证无网络场景?

iOS模拟器验证无网络错误界面的实用方案

1. 用Xcode自带的网络调节器(Xcode 15+)

Xcode 15之后直接集成了对模拟器的网络控制功能,不用单独装工具:

  • 运行模拟器后,打开Xcode顶部的Debug菜单,选择Network Link Conditioner
  • 在弹出的面板里选Offline,模拟器立刻断网,就能测试你的错误界面了

2. 命令行直接操控模拟器网络

用xcrun simctl命令可以快速切换模拟器网络状态,适合写自动化脚本:

  • 断网:xcrun simctl status_bar <模拟器UDID> override --cellularMode disconnected
  • 恢复网络:xcrun simctl status_bar <模拟器UDID> clear
    不知道UDID的话,跑xcrun simctl list devices就能看到当前运行的模拟器ID

3. 在测试代码里Mock网络请求(推荐自动化测试用)

不用真断网,直接在XCTest代码里拦截API请求,模拟失败场景:

  • 写一个URLProtocol子类,拦截所有请求后返回网络错误
  • 示例代码:
class MockOfflineProtocol: URLProtocol {
    override class func canInit(with request: URLRequest) -> Bool { true }
    override class func canonicalRequest(for request: URLRequest) -> URLRequest { request }
    
    override func startLoading() {
        client?.urlProtocol(self, didFailWithError: URLError(.notConnectedToInternet))
    }
    
    override func stopLoading() {}
}

// 测试用例里注册/取消注册
override func setUp() {
    super.setUp()
    URLProtocol.registerClass(MockOfflineProtocol.self)
}

override func tearDown() {
    URLProtocol.unregisterClass(MockOfflineProtocol.self)
    super.tearDown()
}

这种方法不受系统设置干扰,自动化测试跑起来更稳定。

4. 用Charles代理模拟断网

如果平时用Charles抓包,直接用它的限流功能就能模拟无网络:

  • 打开Charles,点顶部Proxy -> Throttle Settings
  • 勾选Enable Throttling,然后把Bandwidth设为No Bandwidth,模拟器的所有请求都会失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:56:04