Доступ к кнопкам на UIActivityViewController в тесте пользовательского интерфейса iOS 13 вызывает сбой

Есть ли у кого-нибудь еще проблемы с запуском тестов пользовательского интерфейса Xcode с Xcode 11, нацеленным на симулятор iOS 13 или устройство, где поиск кнопок на UIActivityViewController вызывает сбой?

У меня есть несколько тестов пользовательского интерфейса, которые проверяют кнопки, которые появляются в 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. Кто-нибудь еще сталкивался с этим?

Вот небольшой код, если кто-то еще хочет его попробовать.

Из контроллера представления:

@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)
}

person Mattio    schedule 01.10.2019    source источник


Ответы (2)


Я наблюдаю такое поведение и с Xcode 11, и я думаю, что ваше предположение о том, что это ошибка Xcode, является правильным.

сбой, по-видимому, исправлен в Xcode версии 11.2 beta 2 (11B44), но запрос кнопок в UIActivityViewController по-прежнему не работает. (Я никогда не вижу разрешения элемента.) Надеюсь, Apple исправит поиск элементов в ближайшем будущем.

person Brandon Littell    schedule 11.10.2019
comment
Скрестим пальцы за бета-версию 3. - person Mattio; 14.10.2019
comment
Все еще происходит в Xcode 12.1 и 12.2 - person alekop; 12.12.2020

Я не уверен, в какой именно версии это было исправлено, но элементы пользовательского интерфейса доступны в несколько иной конфигурации, чем в Xcode версии 11.2.1 (11B500). Вот как теперь можно получить доступ к кнопке Копировать из UIActivityViewController:

XCUIApplication().otherElements["ActivityListView"].cells.containing(.label(equals: "Copy")).firstMatch

HT на https://stackoverflow.com/a/48450562/19626 для селектора otherElements.

Кнопка закрытия / отмены тоже переместилась. Вот где я это нашел:

XCUIApplication().otherElements["ActivityListView"].buttons["Close"].tap()
person Mattio    schedule 19.12.2019