使用appium如何在本机和混合应用程序的下拉列表中读取/打印完整列表?

时间:2015-06-08 07:28:55

标签: scroll count appium picklist

我想使用appium打印或阅读完整的联系人列表(假设我的.apk是一个联系人应用程序,它显示完整的A到Z联系人,通过滚动我可以查看所有联系人)。

我可以计算/打印第一个屏幕中显示的联系人(即显示某些联系人的屏幕默认情况下说10个联系人,而且我必须滚动更多)。我已经解决了上述问题并且正在为此工作一段时间,但之后它会抛出错误,请帮助如何纠正这个问题 java.lang.IndexOutOfBoundsException:Index:9,Size:9

我的代码是`

AppiumDriver driver = null; ArrayList values = new ArrayList();

    DesiredCapabilities cap = new DesiredCapabilities();
    cap.setCapability(MobileCapabilityType.DEVICE_NAME, "Galaxy S4");
    cap.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
    cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4.4");
    cap.setCapability(MobileCapabilityType.APP_PACKAGE, "com.brainworks.contacts");
    cap.setCapability(MobileCapabilityType.APP_ACTIVITY, "com.brainworks.contacts.ui.Main");

    driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),cap);
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    List<WebElement> allContactsOnfirstScreen = driver.findElements(By.xpath("//*[@resource-id='com.brainworks.contacts:id/txt_name']"));
    driver.context("NATIVE_APP");
    Dimension size = driver.manage().window().getSize();
    int StartY = (int)(size.height * 0.70);
    int EndY = (int)(size.height * 0.55);
    int StartX = size.width/2;

    for(int i =0;i<200;i++){
        System.out.println("Contacts are = " + allContactsOnfirstScreen.get(i).getAttribute("text"));
        String Values = allContactsOnfirstScreen.get(i).getAttribute("text");
        values.add(Values);
        System.out.println("Value is = " + values);
        String ext = Values;
        String [] a = ext.split(",");
        String [] b = a[a.length-1].split("//]");
        System.out.println("val = " + b[0]);
        driver.swipe(StartX, StartY, StartX, EndY , 1000);
    }`

我试过的第二种方式

            AppiumDriver driver = null;

    // desired cap as above in the first try

    // same as above -but now what i am doing is i am printing the list in for loop
            // then do a swipe form last element to first element then again print the new list 
            // and this cycle keeps on running until i reach the end of the list or the parameter
            // in the if loop.

    int XOfFirstElement = allContactsOnfirstScreen.get(0).getLocation().getX();
    int YOfFirstElement =  allContactsOnfirstScreen.get(0).getLocation().getY();

    System.out.println("X for XOfFirstElement = " + XOfFirstElement);
    System.out.println("Y for YOfFirstElement = " + YOfFirstElement);

    int XOfLastElement = allContactsOnfirstScreen.get(allContactsOnfirstScreen.size()-1).getLocation().getX();
    int YOfLastElement =  allContactsOnfirstScreen.get(allContactsOnfirstScreen.size()-1).getLocation().getY();

    System.out.println("X for XOfLastElement = " + XOfLastElement);
    System.out.println("Y for YOfLastElement = " + YOfLastElement);

    int XOfSecondLastElement = allContactsOnfirstScreen.get(allContactsOnfirstScreen.size()-2).getLocation().getX();
    int YOfSecondLastElement =  allContactsOnfirstScreen.get(allContactsOnfirstScreen.size()-2).getLocation().getY();

    System.out.println("X for XOfSecondLastElement = " + XOfSecondLastElement);
    System.out.println("Y for YOfSecondLastElement = " + YOfSecondLastElement);

    while(true){
        for(int i = 0 ;i<allContactsOnfirstScreen.size();i++){
            System.out.println("Value is for " + allContactsOnfirstScreen.get(i).getAttribute("text")); 
        }
        driver.swipe(XOfLastElement, YOfLastElement, XOfFirstElement, YOfFirstElement, 1000);
        Thread.sleep(1000L);
        String LastName = allContactsOnfirstScreen.get(allContactsOnfirstScreen.size()-1).getAttribute("text");
        if(LastName.equals("MyLastContactText"))
            break;
    }

现在的问题是 1.&gt;每件事情都按预期工作但发生的事情是有时打印重复值(联系人)(可能是由于该联系人的坐标在刷卡后没有变化) 2.每次因为while循环中的if语句将我带出并且脚本停止时,我无法打印最后一个联系人姓名。

如果有人可以提供帮助,那么如果有任何新的方式PLZ也会让我知道提前谢谢

1 个答案:

答案 0 :(得分:0)

我想,按照代码段,String [] b = a[a.length-1].split("//]");行中的问题。您可能从a.length收到0,这就是异常。您可以在此行之前添加打印变量a吗?

此外,如果这不是问题,您可以在帖子中添加完整的异常堆栈吗?

相关问题