Как прокрутить вверх в Android Appium - PullRequest
0 голосов
/ 25 июня 2018

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

 new TouchAction((PerformsTouchActions) driver).press(point(anchor, startPoint))
.waitAction(waitOptions(Duration.ofMillis(duration))).moveTo(point(anchor, endPoint)).release()
                .perform();

Есть ли какой-нибудь хороший способ для достижения функциональности прокрутки в Android?

Ответы [ 3 ]

0 голосов
/ 18 июля 2018

Вот пример, как добиться прокрутки в Android:

public static void swipe(MobileDriver driver, DIRECTION direction, long duration) {
    Dimension size = driver.manage().window().getSize();

    int startX = 0;
    int endX = 0;
    int startY = 0;
    int endY = 0;

    switch (direction) {
        case RIGHT:
            startY = (int) (size.height / 2);
            startX = (int) (size.width * 0.90);
            endX = (int) (size.width * 0.05);
            new TouchAction(driver)
                    .press(startX, startY)
                    .waitAction(Duration.ofMillis(duration))
                    .moveTo(endX, startY)
                    .release()
                    .perform();
            break;

        case LEFT:
            startY = (int) (size.height / 2);
            startX = (int) (size.width * 0.05);
            endX = (int) (size.width * 0.90);
            new TouchAction(driver)
                    .press(startX, startY)
                    .waitAction(Duration.ofMillis(duration))
                    .moveTo(endX, startY)
                    .release()
                    .perform();

            break;

        case UP:
            endY = (int) (size.height * 0.70);
            startY = (int) (size.height * 0.30);
            startX = (size.width / 2);
            new TouchAction(driver)
                    .press(startX, startY)
                    .waitAction(Duration.ofMillis(duration))
                    .moveTo(startX, endY)
                    .release()
                    .perform();
            break;


        case DOWN:
            startY = (int) (size.height * 0.70);
            endY = (int) (size.height * 0.30);
            startX = (size.width / 2);
            new TouchAction(driver)
                    .press(startX, startY)
                    .waitAction(Duration.ofMillis(duration))
                    .moveTo(startX, endY)
                    .release()
                    .perform();

            break;

    }
}

и enum, чтобы установить направление:

public enum DIRECTION {
    DOWN, UP, LEFT, RIGHT;
}

и, наконец, использование:

swipe(driver, DIRECTION.UP, 3);

Надеюсь, это поможет,

0 голосов
/ 12 октября 2018

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

public void swipeRight() throws Exception {

    //The viewing size of the device
    Dimension size = driver.manage().window().getSize();

    //Starting x location set to 5% of the width (near left)
    int startx = (int) (size.width * 0.05);
    //Ending x location set to 95% of the width (near right)
    int endx = (int) (size.width * 0.95);
    //y position set to mid-screen vertically
    int starty = size.height / 2;

    scroll(startx, starty, endx, starty);
}

/**
 * This method does a swipe downwards
 * @author Bill Hileman
 * @throws Exception
 */
public void scrollUp() throws Exception {

    //The viewing size of the device
    Dimension size = driver.manage().window().getSize();

    //Starting y location set to 20% of the height (near bottom)
    int starty = (int) (size.height * 0.20);
    //Ending y location set to 80% of the height (near top)
    int endy = (int) (size.height * 0.80);
    //x position set to mid-screen horizontally
    int startx = size.width / 2;

    scroll(startx, starty, startx, endy);
}
0 голосов
/ 25 июня 2018

Если приложение гибридное, и вы находитесь в веб-контексте, вы можете попробовать это:

driver.execute_script("arguments[0].scrollIntoView();", element)

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

Однако, если приложение находится в собственном контексте, TouchAction является хорошим выбором, поскольку вы уже реализовали его.

Но есть и другая работа, предоставляемая appium, так как сенсорные действия не работают в iOS, а именно использование мобильного интерфейса, который выглядит примерно так:

driver.execute_script("mobile: scroll", {"direction": "up"})
...