Я пытаюсь написать контрольный пример, используя новый UI Testing, доступный в Xcode 7 beta 2. В приложении есть экран входа в систему, где он вызывает сервер для входа в систему. С этим связана задержка, так как это асинхронная операция.
Есть ли способ вызвать механизм задержки или ожидания в XCTestCase, прежде чем перейти к дальнейшим шагам?
Нет доступной документации, и я просмотрел файлы заголовков классов. Не смог найти ничего связанного с этим.
Есть идеи / предложения?
ios
ios9
xcode-ui-testing
xcode7-beta2
xctwaiter
Tejas HS
источник
источник
NSThread.sleepForTimeInterval(1)
должно работатьdispatch_after
,dispatch_queue
вещи)Ответы:
Асинхронное тестирование пользовательского интерфейса было введено в Xcode 7 Beta 4. Ожидать метку с текстом «Hello, world!» чтобы появиться вы можете сделать следующее:
Более подробную информацию о UI Testing можно найти в моем блоге.
источник
waitForExpectationsWithTimeout
автоматически провалит ваш тест, что весьма печально.app.launch()
, Кажется, просто перезапустить приложение. Это необходимо?Кроме того, вы можете просто спать:
Поскольку UITests запускаются в другом процессе, это работает. Я не знаю, насколько это целесообразно, но это работает.
источник
usleep
iOS 11 / Xcode 9
Это отличная замена для всех пользовательских реализаций на этом сайте!
Обязательно посмотрите мой ответ здесь: https://stackoverflow.com/a/48937714/971329 . Там я опишу альтернативу ожидания запросов, которая значительно сократит время ваших тестов!
источник
XCTestCase
и он работает как шарм. Я не понимаю, почему такие подходыsleep(3)
так высоко оцениваются, потому что это увеличивает время тестирования искусственно и на самом деле не подходит при расширении набора тестов.Xcode 9 представил новые трюки с XCTWaiter
Тестовый случай ждет явно
Делегаты экземпляра официанта для тестирования
Класс официанта возвращает результат
пример использования
До Xcode 9
Цель С
ИСПОЛЬЗОВАНИЕ
стриж
ИСПОЛЬЗОВАНИЕ
или
ИСТОЧНИК
источник
Начиная с Xcode 8.3, мы можем использовать
XCTWaiter
http://masilotti.com/xctest-waiting/Еще один трюк - написать
wait
функцию, спасибо Джону Санделлу за то, что он показал ее мне.и использовать его как
источник
Основываясь на ответе @ Теда , я использовал это расширение:
Вы можете использовать это так
Это также позволяет ожидать исчезновения элемента или изменения любого другого свойства (используя соответствующий блок).
источник
Редактировать:
На самом деле мне пришло в голову, что в Xcode 7b4 тестирование пользовательского интерфейса теперь имеет
expectationForPredicate:evaluatedWithObject:handler:
Оригинал:
Другой способ - вращать цикл выполнения в течение заданного промежутка времени. Действительно полезно, только если вы знаете, сколько (приблизительного) времени вам нужно ждать
Obj-C:
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow: <<time to wait in seconds>>]]
Swift:
NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate(timeIntervalSinceNow: <<time to wait in seconds>>))
Это не очень полезно, если вам нужно проверить некоторые условия, чтобы продолжить тест. Для запуска условных проверок используйте
while
цикл.источник
Следующий код работает только с Objective C.
Просто вызовите эту функцию, как указано ниже.
источник
В моем случае
sleep
создан побочный эффект, поэтому я использовалwait
источник
В соответствии с API для XCUIElement
.exists
можно использовать для проверки, существует ли запрос или нет, поэтому в некоторых случаях может быть полезен следующий синтаксис!Если вы уверены, что ваши ожидания оправдаются, вы можете попробовать выполнить это. Следует отметить, что сбой может быть предпочтительным, если ожидание слишком велико, и в этом случае
waitForExpectationsWithTimeout(_,handler:_)
следует использовать пост @Joe Masilotti.источник
сон заблокирует поток
Msgstr "Обработка цикла выполнения не происходит, пока поток заблокирован."
Вы можете использовать waitForExistence
источник
Это создаст задержку, не переводя поток в спящий режим и не выдавая ошибку по таймауту:
Поскольку ожидание переворачивается, время ожидания истекает незаметно.
источник