簡體   English   中英

在 iOS 13 UI 測試中訪問 UIActivityViewController 上的按鈕會導致崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM