如何在 Xcode UI 测试中识别控制中心元素?
Posted
技术标签:
【中文标题】如何在 Xcode UI 测试中识别控制中心元素?【英文标题】:How do I identify control center elements in Xcode UI tests? 【发布时间】:2017-03-27 08:18:44 【问题描述】:我设法打开了设备的控制中心,但我无法识别按钮,我需要更准确的 Wi-Fi。我用录音机试过了,它被识别为
app.scrollViews.otherElements.scrollViews.otherElements.switches["Wi-Fi"]
但是当我尝试再次运行测试时,它失败了,因为它没有找到元素。 我也尝试将它作为其他类型的元素(按钮或各种条形元素),但没有任何效果。还尝试通过简单地使用 app.buttons["Wi-Fi"] 的标签来识别它,但仍然没有结果。
有人知道解决办法吗?
【问题讨论】:
您是否尝试过使用 Identity Inspector 检查 WiFi 按钮? 可能需要先等待项目出现。您的测试可能会在它显示在屏幕上之前尝试检查它的存在。 masilotti.com/xctest-helpers @Frederik 与检查员一起,我知道该元素是一个标记为“Wi-Fi”的按钮 @Hodson 我尝试了 Masilotti 博客中的等待方法,但无法识别该元素。我对权限警报有同样的问题。也许是因为他们不是应用程序的后代? 【参考方案1】:现在可以使用 Xcode 9 访问控制中心(Springboard 控制它)。目前只能在物理设备上实现,因为 Xcode 9 beta 模拟器没有控制中心。也许这会在 Xcode 正式发布时得到解决。现在你必须使用真实的设备。
此测试打开控制中心并点击 WiFi 按钮:
func testSwitchOffWiFi()
let app = XCUIApplication()
let springboard = XCUIApplication(bundleIdentifier: "com.apple.springboard")
app.launch()
// open control center
let coord1 = app.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.99))
let coord2 = app.coordinate(withNormalizedOffset: CGVector(dx: 0.5, dy: 0.5))
coord1.press(forDuration: 0.1, thenDragTo: coord2)
let wifiButton = springboard.switches["wifi-button"]
wifiButton.tap()
【讨论】:
【参考方案2】:使用设置应用程序很容易完成...
首先,如果您查询任务栏,您会知道飞行模式图标是否存在。XCUIElement* airplaneModeIcon = app.windows.otherElements[@"Airplane mode on"];
const bool isAirplaneModeEnabled = airplaneModeIcon.exists;
XCUIApplication* settings = [[XCUIApplication alloc] initWithBundleIdentifier:@"com.apple.Preferences"];
[settings launch];
XCUIElement* airplaneModeCell = settings.tables.cells[@"Airplane Mode"];
// Do what you have to do with the Cell...
【讨论】:
【参考方案3】:控制中心在您的测试应用范围之外,因此您的 UI 测试无法访问。
要禁用 wifi,您需要物理断开设备与 Internet 的连接,因为无法通过编程方式断开 wifi。
【讨论】:
我设法与启动以发送反馈的邮件应用程序进行交互,这就是为什么我认为为控制中心工作也是有意义的。有区别对待吗? 当您的应用打开一封电子邮件时,它是电子邮件的精简版,因为它嵌入在您的应用中。如果您的应用程序要链接到完整的邮件应用程序,您将无法与之交互。 :) 我明白 :) 我会结束这个问题。还有其他想法如何管理测试中的 wifi 连接吗? 可能有一些东西可以在simctl
工具中切换 wifi 可达性,但我认为将它与您的测试同步以在测试中更改 wifi 状态是不合理的。对不起!以上是关于如何在 Xcode UI 测试中识别控制中心元素?的主要内容,如果未能解决你的问题,请参考以下文章