Как извлечь и сохранить данные списка в Appium и как щелкнуть по определенной поисковой записи - PullRequest
0 голосов
/ 17 октября 2018

enter image description here
Я пытаюсь получить и сохранить список данных года в переменной списка, но не могу сохранить все данные.

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

Я также прилагаю скриншот своих элементов в приложении.

Это мой код для хранения и поиска списка записей в переменной списка

public void fetchVehicleListAndClickOnYear(String year) {

        java.util.List<MobileElement> vehicleList =driver.findElementsById(packageName+":id/title"); 

        for (int i=0;i<= vehicleList.size();i++) {
            String actuallist = vehicleList.get(i).getText();
            System.out.println("Print vehicle year list " +actuallist);
            if(actuallist.equals(year)) {
                driver.findElementByName(year).click();
            } else {
                Utils.scrollDown(driver);
            }
        }
    }

    public void fillVehicleInfoOnSignup(String Vehicle_Year) {

        vehicleYearTextBox.click();
        Utils.PauseTestExecution(2);
        fetchVehicleListAndClickOnYear(Vehicle_Year);

    }



For scrolling code 

public static void scrollDown(AndroidDriver<MobileElement> driver) {
            //if pressX was zero it didn't work for me
            int pressX = driver.manage().window().getSize().width / 2;
            // 4/5 of the screen as the bottom finger-press point
            int bottomY = driver.manage().window().getSize().height * 4/5;
            // just non zero point, as it didn't scroll to zero normally
            int topY = driver.manage().window().getSize().height / 8;
            //scroll with TouchAction by itself
            scroll(pressX, bottomY, pressX, topY,driver);
        }

        public static void scroll(int fromX, int fromY, int toX, int toY,AndroidDriver<MobileElement> driver) {
            TouchAction touchAction = new TouchAction(driver);
            new TouchAction(driver).press(PointOption.point(fromX, fromY)).waitAction().moveTo(PointOption.point(toX, toY)).release().perform();
        }

Ошибка при отображении

ПРЕДУПРЕЖДЕНИЕ: произошла недопустимая операция доступа с отражением ПРЕДУПРЕЖДЕНИЕ: незаконный доступ с отражением по net.sf.cglib.core.ReflectUtils $ 1 (файл: /Users/daffolapmac-73/eclipse-workspace/Wapanda_Driver_Automation/libfiles/cglib-3.2.8.jar) для метода java.lang.ClassLoader.defineClass (java.lang.[], int, int, java.security.ProtectionDomain) ПРЕДУПРЕЖДЕНИЕ: рассмотрите возможность сообщения об этом сопровождающим net.sf.cglib.core.ReflectUtils $ 1. ПРЕДУПРЕЖДЕНИЕ. Используйте --illegal-access = warn, чтобы включить предупреждения о дальнейших действиях.операции легального рефлексивного доступа ПРЕДУПРЕЖДЕНИЕ. Все будущие операции нелегального доступа будут запрещены в следующей версии. Распечатать список год выпуска автомобиля 2018 Распечатать список год выпуска автомобиля 2000 Распечатать список год выпуска автомобиля 1967 Распечатать список года выпуска автомобиля 1952 Распечатать список года выпуска автомобиля 1942 Распечатать год выпуска автомобиляlist 1941 java.lang.IndexOutOfBoundsException: индекс 7 за пределами длины 7 в java.base / jdk.internal.util.Preconditions.outOfBounds (Preconditions.java:64) в java.base / jdk.internal.util.Preconditions.outOfBoundsCheckIndex (Preconditions.java:70) в java.base / jdk.internal.util.Preconditions.checkIndex (Preconditions.java:248) в java.base / java.util.Objects.checkIndex (Objects.java:372)в java.base / java.util.ArrayList.get (ArrayList.java:440) в com.wapanda.pages.DriverSignUpPages.fetchVehicleListAndClickOnYear (DriverSignUpPages.java:261) в com.wapanda.pages.DriffPignSp: 275) на com.wapanda.tests.ValidateDriverProcess.validateDriverSignupProcess (ValidateDriverProcess.java:108) в java.base / jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в java.base / jdk.internal.reflect.NativeMethodAccessorImpl.Met.java.jj .jj ()base / jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.base / java.lang.reflect.Method.invoke (Method.java:564) в org.testng.internal.hodHotMethodInvocationHelper.java:124) в org.testng.internal.Invoker.invokeMethod (Invoker.java:580) в org.testng.internal.Invoker.invokeTestMethod (Invoker.java:716) в org.testest.internal.Invoker.invoke(Invoker.java:988) в org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker.java:125) в org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:10un) (org.Run)TestRunner.java:648) в org.testng.TestRunner.run (TestRunner.java:505) в org.testng.SuiteRunner.runTest (SuiteRunner.java:455)в org.testng.SuiteRunner.runSequentially (SuiteRunner.java:450) в org.testng.SuiteRunner.privateRun (SuiteRunner.java:415) в org.testng.SuiteRunner.run (SuiteRunner.java:364) в org.test.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) по адресу org.testng.SuiteRunnerWorker.run (SuiteRunnerWorker.java:84) по адресу org.testng.TestNG.runSuitesSequentially (TestNG.java:120Lung.Ung. At. Org at..java: 1137) в org.testng.TestNG.runSuites (TestNG.java:1049) в org.testng.TestNG.run (TestNG.java:1017) в org.testng.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG.java:114) в org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.java:251) в org.testng.remote.RemoteTestNG.main (RemoteTestNG.java:77)

Ответы [ 2 ]

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

Ошибка говорит "java.lang.IndexOutOfBoundsException: Индекс 7 выходит за пределы длины 7". Чтобы исправить это, исправьте цикл for следующим образом ("<" insdead of "<=").Код будет выглядеть следующим образом: </p>

for (int i=0;i<vehicleList.size();i++) {
            String actuallist = vehicleList.get(i).getText();

https://docs.oracle.com/javase/7/docs/api/java/lang/IndexOutOfBoundsException.html

Модифицированный код для возврата списка отображаемого года.(примечание: код потенциально может быть оптимизирован, чтобы иметь один цикл. Поскольку логика прокрутки не ясна, я сохранил ее как есть)

public List<String> fetchVehicleListAndClickOnYear(String year) {

    java.util.List<MobileElement> vehicleList =driver.findElementsById(packageName+":id/title");

    java.util.List<String> displayedYears = new ArrayList<>();
    //logic to add displayed years to list
    for (MobileElement yearEl: vehicleList) {
        displayedYears.add(yearEl.getText());
    }

    //logic to click
    for (int i=0;i< vehicleList.size();i++) {
        String actuallist = vehicleList.get(i).getText();
        System.out.println("Print vehicle year list " +actuallist);
        if(actuallist.equals(year)) {
            driver.findElementByName(year).click();
        } else {
            Utils.scrollDown(driver);
        }
    }
    return displayedYears;
}
0 голосов
/ 17 октября 2018

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

В вашем примере отображаются даты с 2018 по 2012 год, поэтому при инициализации списка онбудет содержать только эти элементы.

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

Другая вещь - это ваша процедура прокрутки, вы, кажется, пытаетесь прокрутить сОт 80% высоты до 20% высоты (4/5 и 1/8), но сам список занимает только половину экрана, нижнюю половину.Вместо этого я рекомендую, чтобы у вас была начальная позиция y на уровне 80 или 90 процентов, и прокрутите до 70 или 60 процентов.Это будут небольшие свитки, но они должны находиться в области видимости, так что вы можете попробовать различные числа.

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

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