2016-12-05 3 views
2

Я пишу тесты UI в XCode 8 для очень сложного приложения. Я обнаруживаю несколько проблем, один из которых заключается в том, что каждый тест, который я запускаю, занимает несколько минут.Xcode 8 UI Testing Very Long

Поток для конкретного теста, который я запускаю, даже не настолько сложный.

Я получаю много сообщений «Подождите приложение».

Кто-нибудь знает, почему тесты так долго выполняются, или у вас есть какие-то предложения о том, как я могу ускорить их? Демо-версия WWDC была в основном мгновенной, но это было очень простое приложение.

Вот пример того, что я вижу и как долго это требуется. (Тест также до сих пор работает!)

t = 504.16s   Wait for app to idle 
t = 625.29s   App animations complete notification not received, will attempt to continue. 
t = 625.30s   Synthesize event 
t = 625.67s   Wait for app to idle 

Спасибо!

Обновление: Когда я немного взаимодействую с приложением, сохраняя элементы, которые мне нужны, например, потянув за табурету, тесты продолжаются.

+0

Что это, что ваше приложение делает в течение длительных промежутков? – matt

+0

@matt, я не уверен? Похоже, что все представления загружены. Есть синхронизация устройства, вы думаете, что это может быть так? – ArielSD

ответ

2

Благодаря @Oletha - Я нашел этот вопрос, который может быть специфическим для этого приложения:

После удаления большого количества кода в то время, чтобы увидеть, где этот вопрос, мы обнаружили, что мы называли beginRefreshing и endRefreshing на подклассе UIRefreshControl, на последовательных линиях.

Что-то об этом застопорило пользовательский интерфейс, достаточный для того, чтобы удерживать приложение в ожидании приложения на холостом ходу в течение нескольких минут.

Мы заменили эти две строки специальным методом, и теперь тесты работают нормально.

+0

Я также сталкиваюсь с этой проблемой. Можете ли вы научить меня, как писать пользовательский код? – Newbie009

+0

Вы также испытываете длительные задержки с 'beginRefreshing' и' endRefreshing'? – ArielSD

+1

Да, но я решил это уже. – Newbie009

3

Рамка будет ждать, пока приложение станет статичным, поэтому, если какие-либо представления ожидают или отображаются какие-либо индикаторы активности, возможно, включая индикатор сетевой активности в строке состояния, инфраструктура будет зависать до тех пор, пока приложение не будет оставаться. Это делается для предотвращения условий гонки при загрузке анимаций и компонентов во время выполнения тестов пользовательского интерфейса.

Если вы считаете, что это нормально, чтобы отменить некоторые из этих действий, чтобы ускорить тестирование пользовательского интерфейса, вы можете попробовать экспериментировать с удалением индикаторов активности.

+0

Это похоже на действительно хороший результат. Когда я немного взаимодействую с приложением, например, потянув вниз по экрану, тест продолжается.Кроме того, индикатор активности сети будет выполняться каждые тридцать секунд, но тест все равно застопорится, даже если он не вращается. Как вы относитесь к переопределению свойств 'isAnimating'? – ArielSD

+0

Я не лучший человек, чтобы рассказать вам о анимации во взглядах, но из того, что я понимаю, вы можете посмотреть, как вы обрабатываете блоки завершения анимации в своем приложении. Посмотрите, правильно ли они заканчиваются? Я думаю, что ошибался в отношении свойства isAnimating, поскольку он предназначен только для UIImageView. Собираюсь удалить этот бит из моего ответа. – Oletha

0

Я была такая же проблема - на реальном устройстве я бы постоянно видеть «Дождитесь приложения на холостом ходу»

2 простые решения:

1) Если вы работаете на устройстве, убедитесь, что он сохранен еще (т.е. не перемещается). Выполняя тесты, удерживая устройство, он всегда будет ждать простоя приложения. Размещенные на столе, тесты прошли нормально.

2) В качестве альтернативы, запустить тесты на тренажере, если это возможно

Смежные вопросы