Как использовать прокрутку вниз / прокрутку в Appium с Java-клиентом 7.0.0? - PullRequest
0 голосов
/ 22 марта 2019

Это код, который у меня есть, код не работает, и консоль отправляет следующее: java.lang.ClassCastException: Невозможно привести com.sun.proxy. $ Proxy18 к org.openqa.selenium.remote.RemoteWebElement

Мне нужно провести / прокрутить вниз.

TouchAction swipe = new TouchAction(ApplicationLauncherAndroid.driver)
.tap(element(lblImagen))// first initialElement
.waitAction(waitOptions(Duration.ofMillis(2000)))
.moveTo(element(elementoFinal)) final Element
.release();
swipe.perform();

Ответы [ 2 ]

1 голос
/ 23 марта 2019

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

import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.MobileElement;
import org.openqa.selenium.Dimension;
import static io.appium.java_client.touch.WaitOptions;
import static io.appium.java_client.touch.offset.PointOption;
import static java.time.Duration.ofMillis;

//Vertical Swipe by percentages
    public void verticalSwipeByPercentages(double startPercentage, double endPercentage, double anchorPercentage) {
        Dimension size = driver.manage().window().getSize();
        int anchor = (int) (size.width * anchorPercentage);
        int startPoint = (int) (size.height * startPercentage);
        int endPoint = (int) (size.height * endPercentage);

        new TouchAction(driver)
                .press(PointOption.point(anchor, startPoint))
                .waitAction(WaitOptions.waitOptions(ofMillis(1000)))
                .moveTo(PointOption.point(anchor, endPoint))
                .release().perform();
    }

    //Swipe by elements
    public void swipeByElements (MobileElement startElement, MobileElement endElement) {
        int startX = startElement.getLocation().getX() + (startElement.getSize().getWidth() / 2);
        int startY = startElement.getLocation().getY() + (startElement.getSize().getHeight() / 2);

        int endX = endElement.getLocation().getX() + (endElement.getSize().getWidth() / 2);
        int endY = endElement.getLocation().getY() + (endElement.getSize().getHeight() / 2);

        new TouchAction(driver)
                .press(PointOption.point(startX,startY))
                .waitAction(WaitOptions.waitOptions(ofMillis(1000)))
                .moveTo(PointOption.point(endX, endY))
                .release().perform();
    }

Похоже, вы импортируете неправильный TouchAction. Импорт сенсорного действия из io.appium.java_client.TouchAction

0 голосов
/ 23 марта 2019

@ Педро Перес Абаллай, привет. Я бы предложил использовать следующие альтернативы:

(работает только для инструментальных приложений - и для ListViews) - использует внутренний API приложения и аналогичен тому, как scrollIntoView работает в Интернете, хотя требует, чтобы инструментарий не работал на всех типах представлений прокрутки \ экранов

  • Вариант B: TouchAction - например,

    TouchAction touchAction = new TouchAction(driver); WebElement phone = driver.findElement(in.Repo.obj("apps.Phone")); WebElement contact = driver.findElement(in.Repo.obj("apps.Contacts")); touchAction.press(phone) .waitAction(200) .moveTo(contact) .release() .perform();

  • Вариант C: клиент - SwipeWhileNotFound

  • Опция D: executeScript и укажите, что вы хотите выполнить действие смахивания .

Синтаксис:

driver.executeScript("client:client.swipeWhileNotFound(\"direction\", offset, time);

Пример выполнения прокрутки вверх от границы экрана в течение 500 мс:

driver.executeScript("experitest:client.swipe(\"Up\", 0, 500)");

Параметры:

Направление: Направление, в котором выполняется пролистывание (ВВЕРХ, ВНИЗ, ВЛЕВО, ВПРАВО) Смещение: положение на экране, где начинается свайп Время: продолжительность пролистывания (ниже = ускорение пролистывания)

Обратите внимание

Значения (время \ смещение) обычно рассчитываются как параметры из размера экрана устройства, например, -

int offset = driver.manage().window().getSize().getHeight() / 2; // start from mid screen
int time = driver.manage().window().getSize().getHeight() * 0.3; // just an example

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

С уважением,

Евгений

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