在 iOS 13 UI 测试中访问 UIActivityViewController 上的按钮会导致崩溃
Accessing buttons on a UIActivityViewController in an iOS 13 UI test causes a crash
其他人是否有问题 运行ning Xcode UI 测试 Xcode 11 针对 iOS 13 模拟器或寻找按钮的设备在 UIActivityViewController 上导致崩溃?
我有多个 UI 测试来验证出现在 UIActivityViewController 中的按钮。他们进行预期的设置工作,然后使用类似以下内容查找按钮:
XCTAssertTrue(app.buttons["Copy"].exists)
测试 运行 很好 iOS 10、11 和 12。如果我尝试 运行 在 iOS 13 模拟器或设备上进行相同的测试,当代码尝试访问 app.buttons 时,执行停止,我将在我尝试访问 app.buttons.[=19 的那一行得到 Thread 1: signal SIGABRT
后跟 Failed to get matching snapshots: Lost connection to the application (pid 33047).
=]
增加等待时间甚至是老式的睡眠都无济于事。我试图围绕 XCUIElementTypeQueryProvider
的其他一些查询进行挖掘,以找到没有运气的元素。
如果我调试测试并在测试访问 app.buttons 之前放置一个断点,然后我尝试打印出它包含的内容,我会收到不同的错误消息。
po app.buttons
t = 49.37s Requesting snapshot of accessibility hierarchy for app with pid 37576
expression produced error: error: /var/folders/f2/zhwz28mn1hd815pc78kg02q80000gp/T/expr5-3b2971..swift:1:72: error: 'XCUIElementQuery' is not a member type of 'XCTest'
Swift._DebuggerSupport.stringForPrintObject(Swift.UnsafePointer<XCTest.XCUIElementQuery>(bitPattern: 0x10c73f4d0)!.pointee)
这确实感觉像是一个 Xcode 错误。还有其他人 运行 参与其中吗?
如果有人想尝试一下,这里有一些代码。
来自视图控制器:
@IBAction func showPressed(_ sender: Any) {
let text = "I have something to share."
let vc = UIActivityViewController(activityItems: [text], applicationActivities: nil)
vc.popoverPresentationController?.sourceView = self.view
self.present(vc, animated: true, completion: nil)
}
UI 测试:
func testActivityViewController() {
let app = XCUIApplication()
app.launch()
app.buttons["Show AVC"].tap()
let buttons = app.buttons
let copy = buttons["Copy"]
sleep(2) // Just keeping things simple for the example.
XCTAssertTrue(copy.exists)
}
我在 Xcode 11 上也看到了这种行为,我认为你认为这是一个 Xcode 错误的假设是正确的。
崩溃 似乎已通过 Xcode 版本 11.2 beta 2 (11B44) 修复,但在 UIActivityViewController
中查询按钮仍然存在问题。 (我从来没有看到元素解析。)希望 Apple 能在不久的将来修复元素查找。
我不确定在哪个版本中修复了这个问题,但是 UI 元素的配置与 Xcode 版本 11.2.1 (11B500) 略有不同。现在,您可以通过以下方式从 UIActivityViewController 访问“复制”按钮:
XCUIApplication().otherElements["ActivityListView"].cells.containing(.label(equals: "Copy")).firstMatch
HT 到 用于 otherElements 选择器。
close/cancel 按钮也移动了。这是我找到它的地方:
XCUIApplication().otherElements["ActivityListView"].buttons["Close"].tap()
其他人是否有问题 运行ning Xcode UI 测试 Xcode 11 针对 iOS 13 模拟器或寻找按钮的设备在 UIActivityViewController 上导致崩溃?
我有多个 UI 测试来验证出现在 UIActivityViewController 中的按钮。他们进行预期的设置工作,然后使用类似以下内容查找按钮:
XCTAssertTrue(app.buttons["Copy"].exists)
测试 运行 很好 iOS 10、11 和 12。如果我尝试 运行 在 iOS 13 模拟器或设备上进行相同的测试,当代码尝试访问 app.buttons 时,执行停止,我将在我尝试访问 app.buttons.[=19 的那一行得到 Thread 1: signal SIGABRT
后跟 Failed to get matching snapshots: Lost connection to the application (pid 33047).
=]
增加等待时间甚至是老式的睡眠都无济于事。我试图围绕 XCUIElementTypeQueryProvider
的其他一些查询进行挖掘,以找到没有运气的元素。
如果我调试测试并在测试访问 app.buttons 之前放置一个断点,然后我尝试打印出它包含的内容,我会收到不同的错误消息。
po app.buttons
t = 49.37s Requesting snapshot of accessibility hierarchy for app with pid 37576
expression produced error: error: /var/folders/f2/zhwz28mn1hd815pc78kg02q80000gp/T/expr5-3b2971..swift:1:72: error: 'XCUIElementQuery' is not a member type of 'XCTest'
Swift._DebuggerSupport.stringForPrintObject(Swift.UnsafePointer<XCTest.XCUIElementQuery>(bitPattern: 0x10c73f4d0)!.pointee)
这确实感觉像是一个 Xcode 错误。还有其他人 运行 参与其中吗?
如果有人想尝试一下,这里有一些代码。
来自视图控制器:
@IBAction func showPressed(_ sender: Any) {
let text = "I have something to share."
let vc = UIActivityViewController(activityItems: [text], applicationActivities: nil)
vc.popoverPresentationController?.sourceView = self.view
self.present(vc, animated: true, completion: nil)
}
UI 测试:
func testActivityViewController() {
let app = XCUIApplication()
app.launch()
app.buttons["Show AVC"].tap()
let buttons = app.buttons
let copy = buttons["Copy"]
sleep(2) // Just keeping things simple for the example.
XCTAssertTrue(copy.exists)
}
我在 Xcode 11 上也看到了这种行为,我认为你认为这是一个 Xcode 错误的假设是正确的。
崩溃 似乎已通过 Xcode 版本 11.2 beta 2 (11B44) 修复,但在 UIActivityViewController
中查询按钮仍然存在问题。 (我从来没有看到元素解析。)希望 Apple 能在不久的将来修复元素查找。
我不确定在哪个版本中修复了这个问题,但是 UI 元素的配置与 Xcode 版本 11.2.1 (11B500) 略有不同。现在,您可以通过以下方式从 UIActivityViewController 访问“复制”按钮:
XCUIApplication().otherElements["ActivityListView"].cells.containing(.label(equals: "Copy")).firstMatch
HT 到
close/cancel 按钮也移动了。这是我找到它的地方:
XCUIApplication().otherElements["ActivityListView"].buttons["Close"].tap()