UIScrollable getChildByText недостаточно прокручивается, прежде чем сдаться

Я использую инструмент uiautomator для написания некоторых автоматических тестов для своего приложения.

Вот код, который вызывает проблемы:

UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true));
appViews.setAsHorizontalList(); // works on API 17+
UiObject settingsApp = appViews.getChildByText(new UiSelector().className(android.widget.TextView.class.getName()), "Settings");
        settingsApp.clickAndWaitForNewWindow();

Когда я запускаю это на телефоне KitKat, телефон переходит на главный экран, затем нажимает «Приложения», затем выбирает «вкладку «Приложения» (эта часть кода была опущена в этом посте для ясности), а затем начинает искать «Настройки». значок - он прокручивается горизонтально один раз влево, выбирается вкладка «Загруженные», затем он прокручивается обратно вправо, настроек нет, поэтому тест не проходит.

Затем я взял телефон в руки и еще раз прокрутил влево, и там были «Настройки».

Мой вопрос: почему он не прокручивал все страницы, пока не нашел, где находятся «Настройки»?


person Kaloyan Roussev    schedule 14.02.2015    source источник
comment
Что такое appViews?   -  person IgorGanapolsky    schedule 16.03.2017


Ответы (2)


Вы можете установить максимальное количество пролистываний в соответствии с вашими потребностями с помощью UiScrollable. .setMaxSearchSwipes(), который регулирует количество прокруток, разрешенных при выполнении действия прокрутки в поисках дочернего элемента.

person Diego Torres Milano    schedule 17.02.2015
comment
По умолчанию 55, сделал 2 - person Kaloyan Roussev; 17.02.2015

Я просмотрел документацию UIScrollable здесь:

https://android.googlesource.com/platform/frameworks/testing/+/f612e6a05f47b28ae0f5715545658c08dd759dd7/uiautomator/library/src/com/android/uiautomator/core/UiScrollable.java

И я нашел этот метод:

scrollBackward()

Поэтому я решил позаботиться о проблеме самостоятельно следующим образом:

    boolean settingsFound = false;
    while(!settingsFound) {
        appViews.scrollBackward();
        try {
            UiObject settingsApp = appViews.getChildByText(new UiSelector().className(android.widget.TextView.class.getName()), "Settings", true);
            settingsApp.clickAndWaitForNewWindow();
            settingsFound = true;
        } catch (Exception e){  
            e.printStackTrace();
        }   
    }

Этот код продолжал прокручиваться вправо, пока «Настройки» не были видны, а затем щелкнул по нему.

person Kaloyan Roussev    schedule 14.02.2015