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

简介:

3.3.2 ListView列表遍历

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

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

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

for(int i=0;i<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 < length; i++) {

        firstPosition = listView.getFirstVisiblePosition();

        lastPosition = listView.getLastVisiblePosition();

        for (int j = 1; j <= lastPosition - firstPosition; j++) {

            currentPosition++;

            if (currentPosition >= 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 >= listView.getCount()) {

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

            dragUpToShowAll(listView);

        }

        sleeper.sleep();

    }

    sleeper.sleep();

    return relativeLayout;

}

相关文章
|
5月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
780 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
5月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
677 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
5月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
927 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
433 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
6月前
|
XML 存储 Java
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
165 3
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
|
5月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
274 0
|
6月前
|
XML 编解码 Android开发
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
468 0
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
|
6月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
703 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
6月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
582 6