【发布时间】:2019-11-06 14:08:22
【问题描述】:
使用最新版本的 Xcode 11 在 iOS 13 上运行,我找不到区分 XCTest UI 测试中的标题和静态文本的方法。
如果我使用 Xcode 11 但在 iOS 12 上运行,我仍然可以通过使用 XCTest 过滤 .other 元素类型来找到具有 .header 特征的视图,但在 iOS 13 视图上使用 .header 特征现在只是由带有 XCTest 的 .staticText 元素类型标识,即使您没有在应用程序中设置 .staticText 可访问性特征。
这给我们带来了一个问题,因为我们使用它来确保我们记得在视图上正确设置标题特征以实现可访问性,以及能够确保我们正在查看正确的屏幕测试。
诚然,只能通过.other 找到标题并不好,但至少它是一种将标题与常规文本区分开来的方法。
这里有一些示例代码来解释:
// ViewController.swift
headerLabel.isAccessibilityElement = true // headerLabel is just a UILabel IBOutlet
headerLabel.accessibilityTraits = [.header]
headerLabel.text = "My Header"
// ViewControllerTests.swift
XCTAssertTrue(XCUIApplication().otherElements["My Header"].firstMatch.waitForExistence(timeout: 30)) // This fails on iOS 13 but works on iOS 12 :(
XCTAssertTrue(XCUIApplication().staticTexts["My Header"].firstMatch.waitForExistence(timeout: 30)) // This fails on iOS 12 but works on iOS 13...
如果你在 Xcode 中 po XCUIApplication() 可以看到,在 iOS 13 上,标题现在只是一个 staticText 与其他所有标签相同。
我尝试过组合不同的accessibilityTraits(因为您可以拥有多个),例如:
headerLabel.accessibilityTraits = [.header, .staticText]
但这无济于事。
【问题讨论】:
-
更烦人的是,表格部分的标题仍然是
.other... -
这对我来说似乎是 XCUI 中的一个错误,如果我完全隐藏标签以防止可访问性,它仍然会显示在 XCUI 中,即使它不是故意的。