«Не удалось получить соответствующие снимки: истекло время ожидания при оценке запроса интерфейса». в XCUITest - PullRequest
0 голосов
/ 16 апреля 2020

Я пишу тесты пользовательского интерфейса для приложения, которое содержит огромные ячейки (~ 1000) в своем табличном представлении. Попытка получить доступ к элементам ячейки покажет следующую ошибку:

Не удалось получить совпадающие снимки: истекло время ожидания при оценке запроса пользовательского интерфейса.

Scenar ios :

  • Если я попытаюсь получить количество ячеек на XCUIApplication().tables.firstMatch.cells.count, будет выдано исключение
  • Печать XCUIApplication().debugDescription для в первый раз печатает всю иерархию (хотя для печати требуется ~ 10 сек)
  • После этого, если я пытаюсь напечатать точно такую ​​же строку XCUIApplication().debugDescription, выдается исключение

Я могу не проверяет количество ячеек и не может получить доступ к элементам ячеек. Система пытается оценить все элементы пользовательского интерфейса всякий раз, когда я получаю доступ к элементу в XCUIApplication().

. Это ожидаемое поведение, поэтому я подумал о том, чтобы сделать копию данных XCUIApplication() локально и обработать мои запросы. с этим локально сохраненным экземпляром. Итак, я попробовал это:

private lazy var dummyApp: XCUIApplication = {
   return XCUIApplication()
}()

Здесь я использовал переменную lazy (потому что я хочу вызвать XCUIApplication() только один раз, чтобы система не делала снимки), которая возвращает экземпляр XCUIApplication() и попытался напечатать число ячеек как:

dummyApp.tables.firstMatch.cells.count

Это также выдает ту же ошибку.

Вопрос:

Есть ли способ сохранить XCUIApplication() вся структура с локальной переменной? Или я могу остановить / расширить процесс моментального снимка перед доступом к элементу?

PS: я использую Xcode 11.3.1. Я сталкиваюсь с этой проблемой в течение длительного времени. Публикация этой проблемы как отдельного вопроса, поскольку XCUITest изменил свое взаимодействие с приложением с Xcode 9.

1 Ответ

0 голосов
/ 16 апреля 2020

Ответ :

Вы можете использовать

let snapshot = app.snapshot()

, который дает вам снимок приложения и всех элементов и подэлементов.
https://developer.apple.com/documentation/xctest/xcuielementsnapshot https://developer.apple.com/documentation/xctest/xcuielementattributes


Говоря о производительности.

Ваш UITableView слишком велик для каркасов тестирования черного ящика, таких как XCTest (Appium, Katalon Studio et c).

Если вы хотите протестировать его, вам следует подумать о переходе на EarlGrey 2.0 (или другие фреймворки Gray Box). Хорошо, что вы можете использовать EarlGrey 2.0 вместе с существующими тестами XCTest.

Подробнее о тестировании производительности фреймворков можно прочитать в этой статье https://devexperts.com/blog/ios-ui-testing-frameworks-performance-comparison/

PS Такой большой Таблицы также вредны для пользователей. Рассмотрите возможность изменения вашего интерфейса.

...