天天看点

腾讯Android自动化测试实战3.3.2 ListView列表遍历

<b>3.3.2 listview列表遍历 </b>

编写android端的自动化测试用例,最常见的控件有listview,而要想测试listview,就必然要涉及listview的遍历。

关于listview的遍历,可能首先想到的是类似如代码清单3-20的实现方式。

代码清单3-20 设想中的列表遍历

for(int

i=0;i&lt;listview. getcount();i++){

    listview.getchildat(int index);

    ……;

}

但是,在android中,对于listview.getchildat(int index)而言,如果子控件是在屏幕之外的话,那么是无法点击的,因此要想点击或测试屏幕之外的子控件,就需要不断向上滑动。因此我们可以先遍历当前屏幕内的子控件,然后翻一屏,再遍历屏幕内的子控件,如此反复就可以遍历listview所有的子控件了。

对于listview而言,通过getfirstvisibleposition()和getlastvisibleposition()可以获取listview在屏幕中第一个可见子控件及最后一个可见子控件在列表中的位置。当遍历至当前最后一个子控件时,通过solo.scrolllisttoline(listview, lastposition)方法将列表滑至lastposition所在的位置,即实现翻屏的效果。当遍历至每个child子控件时,可以通过该子控件的布局结构来判断该子控件是否为要查找的控件。另外,需要注意的是,正如前文所介绍的,scrolllisttoline(listview, lastposition)方法并不会直接产生上滑手势,因此如果列表需要产生上滑动作才能加载更多的话,则还需要配合使用drag方法进行上拉加载更多。

如代码清单3-21所示,遍历列表,查找列表中子节点为relativelayout且子节点的标题为×××的子控件。

代码清单3-21 遍历列表并找到指定标题的child

public

relativelayout findcardbytype(int maxcount) {

    // 获取当前界面中的listview

    listview listview = getcurrentlistview();

    int firstposition = 0;

    int lastposition = 0;

    relativelayout relativelayout = null;

    int currentposition = 1;

    labelall:

    for (int i = 0; i &lt; length; i++) {

        firstposition =

listview.getfirstvisibleposition();

        lastposition =

listview.getlastvisibleposition();

        for (int j = 1; j &lt;= lastposition -

firstposition; j++) {

            currentposition++;

            if (currentposition &gt;= maxcount)

{

                break labelall;

            }

            // 判断该节点是否为relativelayout

            if (listview.getchildat(j)

instanceof relativelayout) {

                relativelayout =

(relativelayout) listview.getchildat(j);

                // 这里可以对该relativelayount进行判断,例如获取该//relativelayout中的子控件,如果有标题则判断标题等

                if

(issatisfied(relativelayout)) {

                    break labelall;

                }

                relativelayout = null;

        }

        solo.scrolllisttoline(listview,

lastposition);

        if (lastposition &gt;=

listview.getcount()) {

            // 当需要上拉加载更多时,调用drag实现的方法进行上拉加载更多

            draguptoshowall(listview);

        sleeper.sleep();

    }

    sleeper.sleep();

    return relativelayout;

继续阅读