通过滚动直到所有联系人列表的末尾,使用appium读取我的Android设备中的联系人

时间:2017-02-20 17:40:29

标签: appium

我在使用appium阅读联系人列表我的Android设备时遇到了问题。 我的目标是通过滚动到页面末尾阅读Android设备中的所有联系人,并在到达最后一次联系结束后退出。

我使用了以下代码。

package sampleinfo;

import java.util.ArrayList;
import java.util.List;

import org.openqa.selenium.Dimension;
import io.appium.java_client.MobileElement;

public class Readingcontacts extends sampleappiumlaunch{

    List<String>previous=new ArrayList<String>();
    List<String>current=new ArrayList<String>();

        public void scrolltillEnd(){

            System.out.println("Intiated method to read contacts of current window");
              readContacts();

              while(!current.equals(previous)){

                  System.out.println("Intiated method to Scroll...");
                  verticalScroll();

                     System.out.println("adding current window contacts to previous window list");
                     previous.addAll(current);

                     System.out.println("@@@@@@Previous List is of elements were....@@@@"+previous);

                     System.out.println("Intiated method to read contacts of current window");
                     readContacts();

              }

                 System.out.println("****End of while loop..reached end of page..***");
                 String finalcontact = current.get(current.size() - 1);
                 System.out.println("Final contact name is"+finalcontact);

        }

        public void readContacts(){
            String layout = "android.widget.ListView";
            MobileElement Rootelframe = (MobileElement) appiumdriver.findElementByAndroidUIAutomator(
                    "new UiSelector().className(\"" + layout + "\").enabled(true).instance(0)");

            List<MobileElement>viewgroup=Rootelframe.findElementsByClassName("android.view.ViewGroup");
            for (int i=0;i<viewgroup.size();i++) {

                  try{
                      System.out.println("####..currently in view group index of...####"+i);
                      String str=viewgroup.get(i).findElementByClassName("android.widget.TextView").getText().toString();
                      System.out.println("@@@@@...Current List element is....@@@@"+str);
                      current.add(i, str);
                       }

                catch(Exception e){
                    System.out.println("currently Text view element is not visiable in view group index of"+i);
                }

            }
            System.out.println("*****current List of elements were.....******"+current);


        }



        public void verticalScroll() {          
            Dimension size=appiumdriver.manage().window().getSize();

      int y_start=(int)(size.height*0.70);
      int y_end=(int)(size.height*0.30);
      int x=size.width/2;

      if(!current.equals(previous)){
        appiumdriver.swipe(x,y_start,x,y_end,5000);
      }
      else{
        System.out.println("Reached end of page");
      }
    }
}

2 个答案:

答案 0 :(得分:0)

您提出的条件无效。变量当前上一个永远不会匹配。您可以通过在 verticalScroll()方法的else部分设置标志并在while循环中检查相同的标志来尝试下面的代码。

声明名为isPageEndReached = false的布尔变量类。如果到达页面末尾,则将值设置为true。并检查循环中的值是否为&#39;如果是,则打破循环。

答案 1 :(得分:0)

在填充之前和当前之前清除它们,而不要使用current.add(i, str);来代替current.add(str);