在 adb 中迭代列表视图 - uiautomator

Iterating list view in adb - uiautomator

我正在尝试在 adb shell 中迭代列表视图。我正在使用 uiautomator,但是,我的元素似乎比设备中捕获的元素多。如果我要使用滚动,我将能够访问元素。但是无论如何我不必滚动并简单地遍历列表元素吗?

此屏幕截图由 uiautomator 完成。

我的代码片段。

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

这似乎无法打印任何内容或遍历列表视图。

我正在使用下面的代码在 phone 书中按姓名查找联系人 [这是一个列表元素]。希望这段代码对你有帮助。此刻我查看每个元素,如果请求的元素可用,我退出循环,否则我向下滑动。我不确定它会有多大帮助,但它会给出一个基本的想法。我正在使用 appium 进行一些 UI 自动化。有更好知识的人请指导或纠正是否有任何方法可以加快此 activity 以获取列表所有元素的列表,这也对我有帮助

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