Appium не может прокрутить приложение Android при запуске по кликабельному элементу - PullRequest
0 голосов
/ 06 февраля 2020

Моя ситуация

Я хочу написать UI-тесты для Android приложения, и поэтому мне нужно прокрутить в некоторых фрагментах приложения. Тесты написаны на Kotlin, версия Appium v1.15.1.

Моя проблема

Я использую стандартный подход для прокрутки (см. Ниже), и он работает нормально, пока координаты моей начальной точки не попадают на кликабельный элемент. Я также наблюдал такое поведение при навигации по приложению с помощью Appium Desktop Inspector.

Мой текущий подход

PlatformTouchAction(driver as AppiumDriver)
            .press(PointOption.point(100, 500))
            .waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000)))
            .moveTo(PointOption.point(100, 100))
            .waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000)))
            .release()
            .perform()

Как упоминалось ранее, это работает, если начальная точка (100 500) не находится на элементе, активируемом щелчком мыши.
Если, например, кнопка находится в (100 500) , прокрутка / пролистывание не выполняется, но фактически на слушателях прокрутки все еще называются.

1 Ответ

0 голосов
/ 06 февраля 2020

Вы можете прокрутить с помощью идентификатора ресурса элемента. Это может быть достигнуто с UiAutomator2 как automation engine. Вам необходимо использовать имя автоматизации как UiAutomator2 в желаниях.

Добавить нужную возможность UiAutomator2, если вы используете appium в качестве механизма автоматизации.

capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "UiAutomator2");

Теперь используйте функции ниже, если у вас есть идентификатор ресурса элемента, и индексируйте как 0, если на странице есть один элемент.

public void scrollByID(String Id, int index) {

        try {

             driver.findElement(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().resourceId(\""+Id+"\").instance("+index+"));")); 

        } catch (Exception e) {
           e.printStackTrace();
        }
    }

Это подход динамический c, он будет прокручиваться до элемент не виден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...