Проблема с "приостановкой" UITest
Ты спросил:
«Как я могу приостановить Xamarin.UITest и дождаться загрузки изображения на экране, прежде чем перейти к следующему шагу?»
Возможно приостановить Xamarin.UITest, используя что-то вроде Thread.Sleep()
, на любой требуемый период времени. Однако проблема в том, что Thread.Sleep ()
негибко останавливает тестовый прогон. Например, если вы установите Thread.Sleep (10000)
, то поток будет приостановлен ровно на 10 секунд, независимо от того, сколько времени на самом деле требуется вашему приложению для загрузки нужного элемента.
Если ваше изображение загружается всего за 1 секунду на более быстрых устройствах, то при использовании Thread.Sleep(10000)
ваш тест всегда будет занимать минимум 10 секунд. Что еще хуже, если вы используете этот подход и Thread.Sleep
недостаточно долго, тест все равно не пройдет; поэтому вы должны каждый раз заставлять свои тесты работать так же медленно, как ваш «наихудший сценарий». Дополнительная информация: Thread.Sleep
документация< /а>
Решение путем ожидания элемента пользовательского интерфейса без «приостановки» выполнения
Xamarin.UITest
содержит IPp.WaitForElement и API IAp.WaitForNoElement для обработки этих сценарии. Эти API превосходят Thread.Sleep
, потому что вы можете настроить условия, при которых он возобновляется, помимо ожидания в течение заданного периода времени.
Пример
Этот пример фрагмента кода будет ждать 90 секунд, пока появится элемент, который либо помечен, либо имеет идентификатор "myButton".
// Wait up to 90 seconds for myButton to appear
app.WaitForElement(c=>c.Marked("myButton"), "Could not find myButton", new TimeSpan(0,0,0,90,0));
Если для загрузки элемента требуется всего 30 секунд, то в этом примере app.WaitForElement
будет продолжаться через 30 секунд, он выдаст ошибку «Не удалось найти myButton», если после ожидания полных 90 секунд элемент все еще не появился.
Простой запрос с использованием таймаутов по умолчанию и сообщений об ошибках
Вы также можете использовать любой из этих вызовов API, не определяя длину времени ожидания, и в этом случае для локальных тестов UITests время ожидания истекает через 15 секунд, или при запуске в Xamarin Test Cloud время ожидания истекает через 1 минуту. Источник: Руководство Xamarin.UITest "Timeouts & Waiting"
Это простейшая возможная форма приведенного выше запроса, использующая таймауты по умолчанию и сообщение об ошибке по умолчанию «Время ожидания элемента истекло...»:
app.WaitForElement (x => x.Marked ("myButton"));
person
user62171
schedule
06.01.2017