Appium: как провести пальцем по левому элементу списка - PullRequest
0 голосов
/ 22 января 2019

У меня есть приложение для Android, где моя деятельность содержит представление списка. Я работаю автоматизированный тестовый случай для проведите пальцем, чтобы удалить элемент списка просмотра. Я написал этот код для получения списка:

    List<WebElement> list = driver.findElements(By.id("com.xyz.email:id/conversation_list_view"));        
    list.get(0).click();

Этот код должен нажимать на первый элемент списка, но он не работает должным образом.

Я написал другой код для считывания, чтобы удалить элемент списка:

MobileElement emailCell = (MobileElement) driver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v4.widget.DrawerLayout/android.widget.LinearLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.ListView/android.widget.FrameLayout/android.view.View");
    androidPhone.swipeOnElement("left", emailCell);

У меня есть готовая функция с именем "swipeOnElement", которая смахивает элемент справа налево.

    Dimension size = driver.manage().window().getSize();

    double endX = 0;
    double endY = 0;

    int elementX = element.getCenter().x;
    int elementY = element.getCenter().y;
    int finalX;
    int finalY;

    switch (direction) {
        case "left":
            endX = size.width;
            break;

        case "right":
            endX = 0;
            break;

        case "up":
            endY = 0;
            break;

        case "down":
            endY = size.height;
            break;
    }
    if (direction == "left" | direction == "right") {
        finalX = (int) endX;
        finalY = elementY;
    } else {
        finalX = elementX;
        finalY = (int) endY;
    }
    System.out.println("startY=" + elementY);
    System.out.println("startX=" + elementX);
    System.out.println("endY=" + finalY);
    System.out.println("endX=" + finalX);

    new TouchAction(driver)
            .press(element)
            .waitAction(300)
            .moveTo(finalX, finalY)
            .release()
            .perform();
    delay(1000);

Эта функция в порядке. Работает отлично. Но когда я попробовал его в элементе списка, он не работал должным образом. Я не знаю, почему он так себя ведет. Любая помощь, пожалуйста!

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Здесь я нашел свое решение:

Существует класс TouchAction, в котором вы должны задавать параметры и вызываемые функции в форме функциональной цепочки.

new TouchAction(driver)
            .press(mobileElement)
            .waitAction(300)
            .moveTo(0,100)
            .release()
            .perform();

Здесь драйвер - это объект AppiumDriver, а mobileElement - это объект MobileElement. Функция moveTo - это то, что именно делает все смахивание. Требуется начальная позиция и конечная позиция для смахивания.

0 голосов
/ 24 января 2019

Попробуйте

swipeLeft(MobileElement mobileElement) {
        LOGGER.info("Swiping Left ...");
        Dimension size = getWindowSize();
        int x1 = (int) (size.width * 0.01);
         new TouchAction(driver).press(mobileElement).waitAction(Duration.ofSeconds(1)).moveTo(x1,0).release().perform();
    }
...