Невозможно прокрутить элементы внутри ListView с помощью Appium Selenium Android - PullRequest
0 голосов
/ 02 сентября 2018

В течение нескольких дней я пытаюсь найти простое решение для прокрутки в представлении списка

Так как этот Appium Inspector не предоставляет все элементы списка (только путем ручного пролистывания и обновления инспектора, загружаются новые элементы с новым экземпляром.

После исследования выясняю, что расстояние между элементами списка выглядит следующим образом:

Item Location= (15, 828)
Item Location= (15, 1209)
Item Location= (15, 1590)

Так что я предполагаю, что каждый клик должен прокручиваться на 381 пиксель вниз, после стольких попыток я не могу найти решение для этой части кода и буду рад, если кто-то может помочь с этим:

List<WebElement> list = driver.findElements(By.id("net.balink.diplomat.qa:id/btnAddToCart"));
System.out.println("List Size is= " + list.size());

for (int j = 0; j < list.size(); j++) {
    WebElement listItem = list.get(j);
    Point location = listItem.getLocation();
    System.out.println("Location= " + location);
    listItem.click();

    //to do here: swipe 381 px down after any click, then re-initialize 
    //the listItem in order to get a new index - and the loop when 
    //theres no more list items

    Thread.sleep(2000);
}

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Я использую следующий метод для прокрутки экрана:

public static MobileElement scrollElementByContentDesc(String scrollableList, String uiSelector, String textToSearchInList) {
        return driver.findElement(MobileBy.AndroidUIAutomator(
                "new UiScrollable(new UiSelector().resourceId(\"" + scrollableList + "\")).getChildByDescription("
                        + "new UiSelector().className(\"" + uiSelector + "\"), \"" + textToSearchInList+ "\")"));

    }

scrollableList - это идентификатор вашего прокручиваемого элемента списка,

uiSelector является className элемента списка,

textToSearchInList может быть любым текстом, который необходимо найти в списке. Это может быть любой случайный текст, если ваша цель - просто прокрутить список до конца.

Вызовите этот метод из любого метода:

public void someMethod(){
//other code
try{
    MobileElement element= scrollElementByContentDesc("your scrollableList id",
                "uiSelector classname", "any text you need to find in the list);
}catch(Exception e){
    //do nothing
}
}

Если вы хотите провести по co0rdinate, вы можете сделать это следующим образом.

import io.appium.java_client.TouchAction;
import io.appium.java_client.touch.WaitOptions;
import io.appium.java_client.touch.offset.PointOption;
import java.util.concurrent.TimeUnit;
import static java.time.Duration.ofSeconds;

TouchAction action = new TouchAction(driver); 
action.press(PointOption.point(115, 650)).waitAction(WaitOptions.waitOptions(ofSeconds(1)))
                .moveTo(PointOption.point(115, 350)).release().perform();

Обязательно импортируйте правильную библиотеку.

0 голосов
/ 02 сентября 2018

Более надежный подход заключается в использовании собственного способа UiAutomator:

Итак, прежде всего найдите родительское представление элементов списка с атрибутом scrollable: true. Это определенно должен быть хотя бы один.

Затем используйте инспектор для создания и тестирования вашего UiAutomator locator

MobileElement elementScrollTo = driver
            .findElementByAndroidUIAutomator("new UiScrollable(new UiSelector()"
            + ".resourceId(\"android:id/list\")).scrollIntoView("
            + "new UiSelector().text(\"Some text\"));");

UiSelector имеет довольно богатый API , проверьте его и найдите то, что подходит вам больше всего.

Этот подход лучше, чем TouchActions, поскольку вы не зависите от разрешения / координат экрана устройства.

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