java - 如何在Appium中获取和存储列表数据以及如何点击特定的搜索记录

标签 java selenium-webdriver appium appium-android

enter image description here
我正在尝试获取 Year 数据列表并将其存储在列表变量中,但无法存储所有数据。

同时我还想搜索特定年份,如果找不到年份,那么我想滚动并在列表中再次搜索。

我还附上了我在应用程序中的元素的屏幕截图。

这是我在列表变量中存储和搜索记录列表的代码

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.String,byte[],int,int,java.security.ProtectionDomain) 警告:请考虑将此报告给 net.sf.cglib.core.ReflectUtils$1 的维护者 警告:使用 --illegal-access=warn 启用进一步非法反射访问操作的警告 警告:所有非法访问操作将在未来的版本中被拒绝 打印车辆年表2018 打印车辆年表 2000 打印车辆年表 1984 打印车辆年表 1967 打印车辆年表 1952 打印车辆年表 1942 打印车辆年表 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.DriverSignUpPages.fillVehicleInfoOnSignup(DriverSignUpPages.java:275) 在 com.wapanda.tests.ValidateDriverProcess.validateDriverSignupProcess(ValidateDriverProcess.java:108) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0( native 方法) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:564) 在 org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124) 在 org.testng.internal.Invoker.invokeMethod(Invoker.java:580) 在 org.testng.internal.Invoker.invokeTestMethod(Invoker.java:716) 在 org.testng.internal.Invoker.invokeTestMethods(Invoker.java:988) 在 org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) 在 org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) 在 org.testng.TestRunner.privateRun(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.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 在 org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84) 在 org.testng.TestNG.runSuitesSequentially (TestNG.java:1208) 在 org.testng.TestNG.runSuitesLocally(TestNG.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)

最佳答案

错误提示“java.lang.IndexOutOfBoundsException:索引 7 越界,长度为 7”。要修复它,请按以下方式更正 for 循环(“<”替换“<=”)。代码如下所示:

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;
}

关于java - 如何在Appium中获取和存储列表数据以及如何点击特定的搜索记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52852824/

相关文章:

java - 将家长文档包含到 zip 文件中

JAVA Appium Android MultiTouch操作错误消息: “Unable to perform multi pointer gesture” ,“状态”:13

java - 音节计数器计算单词中的音节数

Java/Groovy - GroovyClassLoader 中的内存泄漏

java - Jenkins 上的 Selenium webDriver/Maven java 测试无法与 firefox 通信

python - 如何编写Xpath进行动态值传递?

java - 无法使用机器人类和 Sendkeys 上传文件

android - 处理appium-android中的软键盘事件

java - 使用 Selenium Point 和 Dimension 类在移动屏幕上的 WebElement 的 X Y 坐标是错误的

java.rmi.ServerException : RemoteException occurred in server thread (ClassNotFoundException)