![](/img/trans.png)
[英]How to dismiss the UIActivityViewController during a UI test with Xcode 11 & iOS 13
[英]Accessing buttons on a UIActivityViewController in an iOS 13 UI test causes a crash
是否還有其他人在運行 Xcode UI 測試時遇到問題,使用 Xcode 11 針對 iOS 13 模擬器或設備在尋找 UIActivityViewController 上的按鈕會導致崩潰?
我有多個 UI 測試來驗證 UIActivityViewController 中出現的按鈕。 他們完成了預期的設置工作,然后通過以下方式查找按鈕:
XCTAssertTrue(app.buttons["Copy"].exists)
測試運行良好 iOS 10、11 和 12。如果我嘗試在 iOS 13 模擬器或設備上運行相同的測試,代碼嘗試訪問 app.buttons 的那一刻,執行停止,我將得到一個Thread 1: signal SIGABRT
后跟Failed to get matching snapshots: Lost connection to the application (pid 33047).
在我嘗試訪問 app.buttons 的那一行。
添加等待甚至是老式的睡眠都無濟於事。 我試圖挖掘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 錯誤。 有沒有其他人遇到過這個?
如果其他人想嘗試一下,這里有一些代碼。
從 controller 的角度來看:
@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)
}
用戶界面測試:
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
中查詢按鈕仍然失敗。 (我從來沒有看到元素解析。)希望蘋果能在不久的將來修復元素查找。
我不確定這是在哪個版本中修復的,但從 Xcode 版本 11.2.1 (11B500) 開始,UI 元素的配置略有不同。 以下是您現在可以從 UIActivityViewController 訪問 Copy 按鈕的方式:
XCUIApplication().otherElements["ActivityListView"].cells.containing(.label(equals: "Copy")).firstMatch
HT 到https://stackoverflow.com/a/48450562/19626用於 otherElements 選擇器。
關閉/取消按鈕也移動了。 這是我找到它的地方:
XCUIApplication().otherElements["ActivityListView"].buttons["Close"].tap()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.