如何在 XCode 模拟器中更改客户端配置以进行自动化 UI 测试

How To Change Client Configuration In XCode Simulator For Automated UI Testing

使用 XCTest 编写 UI 测试后,我试图在模拟器的“设置”应用程序中更改构建指向的服务器。这是如此自动化测试 运行 在正确的地方。有没有办法通过可访问性和 UI 测试代码来做到这一点?

How can I change this URL?

编辑:@oletha 的回答很完美。这是我在Objective-C中使用的解决方案:

我将启动参数设置为 configServer=@"URL"

for (NSString *launchArgument in [[NSProcessInfo processInfo] arguments]) { if ([launchArgument hasPrefix:@"configServer"]) { return [launchArgument componentsSeparatedByString:@"="].lastObject; } }

根据 Xcode 8.2,您无法在您自己的应用目标之外实现 UI 自动化,因此您无法与设备上的“设置”应用进行交互。我觉得这是一个错误并提交了一个雷达 (http://www.openradar.me/27802551),你可能也想这样做。

我想您要更改的 URL 存储在您的首选项中的某个位置。如果是这种情况,您可以在执行测试期间使用 SBTUITestTunnel 动态更改它。这是一个第 3 方库,允许通过 UI 测试与您的应用程序交互,启用网络模拟和监控、数据注入等。对于您的用例,它允许轻松更新 NSUserDefaults.

您可以在启动应用程序之前通过设置 launchArguments 属性 向应用程序发送启动参数。然后,您可以将您的应用程序设置为在启动期间读取启动参数,并在使用该启动参数启动时设置模拟服务器的 URL。

// test code
let app = XCUIApplication()
app.launchArguments = ["UITESTS"]
app.launch()

// app code
if NSProcessInfo.processInfo().arguments.contains("UITESTS") {
    // set different server URL
}

您可能想在您的应用委托上的 applicationDidFinishLaunching 中添加 URL 切换代码。