2014-10-05 3 views
2

В наших тестовых примерах uiautomator мы используем UiObject.clickAndWaitForNewWindow для запуска любого нажатия. Однако иногда это просто слишком долго для устройства для ответа/загрузки страницы. Таким образом, до того, как страница будет полностью загружена, любой последующий анализ/тест завершится неудачно, так как ожидаемые виджеты еще не готовы. Это не позволяет выполнить некоторые из наших тестовых случаев неопределенным способом. Большую часть времени просто перезапускают тестовые примеры, которые они проходят.UiObject clickAndWaitForNewWindow занимает слишком много времени, чтобы загрузить

Есть ли способ убедиться, что UiObject.clickAndWaitForNewWindow загружает ожидаемую страницу полностью, прежде чем продолжить следующую проверку? Мы можем вставить оператор сна сразу после UiObject.clickAndWaitForNewWindow, который работает как меч с двойным краем, но на самом деле это не решает эту проблему.

UiObject.clickAndWaitForNewWindow(); 
// how to wait until the page is loaded completely 
new UiSelector(...); // search for widgets that are supposed to be on the newly loaded page 

ответ

0

Один из способов здесь - добавить цикл цикла.

Скажите, когда вы нажмете на какой-то элемент в одном окне, а затем появляется новый экран, и вы хотите выполнить действие какого-либо элемента (например меню) в новом окне и этот элемент определяется как -

//say you tapped on some element(say abc) on the first window 
abc.click(); 

//now you want to wait till the element (say menu) appears on the next screen which is decl as - 
UiObject menu = new UiObject(new UiSelector().resourceId("com.example.test:id/elmnt")); 

//add a while loop to check if that element exists and add a print statement just to keep printing till that element appears on the screen- 
while (!menu.exists()) { 

    System.out.println("Menu will appear in some time"); 

} 

System.out.println("Menu appeared"); 
//carry other operations here 
+0

спасибо Smriti! Предполагается, что мы знаем идентификатор ресурса «com.example.test: id/elmnt». что, если мы этого не сделаем? или, что еще хуже, мы не знаем какого-либо специального виджета, который может помочь нам идентифицировать новую страницу. – user908645

+0

Возможно, мне следовало бы спросить об этом, так или иначе, как ctor, строящий полный объект перед возвратом, в ui automator, который сообщает, что все виджеты готовы на новой странице? – user908645

0

Я использую

UiDevice.waitForWindowUpdate(package, timeout); 

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

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