如何在 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 测试中识别控制中心元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何 UI 测试使用系统提供的控制器的工作流

在 Xcode UI 测试中编辑记录的元素

Xcode ui 测试:staticTexts 开头

ui测试xcode,如何使用cellquery点击表格视图单元格按钮

在没有可访问性 ID 的 Xcode UI 测试中定位元素

Xcode 8:UI 测试远程按钮错误:找不到焦点元素