2015-08-24 63 views
0

我想迭代adb shell中的列表視圖。我正在使用uiautomator,但是,似乎我有比設備中捕獲的元素更多的元素。如果我使用滾動,我將能夠訪問元素。但是,無論如何,我不必滾動,只需遍歷列表元素?在adb中迭代列表視圖 - uiautomator

enter image description here

該屏幕截圖是通過uiautomator完成。

我的代碼片段。

>>> a = d(index = 0, className = 'android.widget.ListView') 
>>> for i in a.child(): print i.info 

這似乎不能夠打印任何東西或迭代通過列表視圖。

回答

1

我正在使用下面的代碼在電話簿[這是一個列表元素]中按名稱查找聯繫人。希望這段代碼能幫助你。此刻,我查看每個元素,並且如果請求的元素可用,我退出循環,除此之外,我將其轉移。我不知道它會有多大幫助,但它會給出一個基本的想法。我正在使用appium進行一些UI自動化。有人,有更好的知識,請指導或更正,如果有任何加快此活動的方式來獲取列表中的所有元素的列表,這也應該幫助我

public Boolean Get_PhContact_ByName(MobileDriver d, String strName){ 
    Boolean bFoundName = false; 
    while(bFoundName == false) 
    { 
     List <WebElement> ContactList = d.findElements(By.id(ID_MENU_CONTACT_NAMES)); 
     int lstSize = ContactList.size(); 
     System.out.println(String.valueOf(lstSize)); 
     for(int iIndex = 0; iIndex < lstSize; iIndex++) 
     { 
      WebElement xName = ContactList.get(iIndex); 
      String strNameOrNumber = xName.getText().replaceAll("(?:\\n|\\r)", "").trim(); 
      System.out.println(strNameOrNumber); 
      if(strNameOrNumber.equals(strName)) 
      { 
       System.out.println("Found Name" + strName); 
       xName.click(); 
       bFoundName = true; 
      } 
     } 
     if(bFoundName == false) 
      PerformSwipeDown(d); 
    } 
    return true; 
} 


public void PerformSwipeDown(MobileDriver d) 
{ 
    String originalContext = d.getContext(); 
    d.context("NATIVE_APP"); 

    org.openqa.selenium.Dimension size = (org.openqa.selenium.Dimension) d.manage().window().getSize(); 
    int starty = (int) (size.height * 0.8); 
    int endy = (int) (size.height * 0.20); 
    int startx = size.width/2; 
    ((AndroidDriver)d).swipe(startx, starty, startx, endy, 1000); 
    d.context(originalContext); 
} 

public void PerformSwipeUp(MobileDriver d) 
{ 
    String originalContext = d.getContext(); 
    d.context("NATIVE_APP"); 

    org.openqa.selenium.Dimension size = (org.openqa.selenium.Dimension) d.manage().window().getSize(); 
    int starty = (int) (size.height * 0.20); 
    int endy = (int) (size.height * 0.8); 
    int startx = size.width/2; 
    ((AndroidDriver)d).swipe(startx, starty, startx, endy, 1000); 
    d.context(originalContext); 
}