腾讯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;

}

相关文章
|
2月前
|
测试技术 持续交付 UED
软件测试的艺术:确保质量的实战策略
在软件开发的舞台上,测试是那把确保每个功能如交响乐般和谐奏响的指挥棒。本文将深入探讨软件测试的重要性、基本类型以及如何设计高效的测试策略。我们将通过一个实际的代码示例,展示如何运用这些策略来提升软件质量和用户体验。
|
14天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
2月前
|
运维 监控 应用服务中间件
自动化运维的利器:Ansible实战应用
【10月更文挑战第41天】在现代IT运维领域,自动化已成为提高效率、减少错误的关键。Ansible作为一种简单而强大的自动化工具,正被越来越多的企业采纳。本文将通过实际案例,展示如何使用Ansible简化日常运维任务,包括配置管理和批量部署等,旨在为读者提供一种清晰、易懂的自动化解决方案。
35 1
|
2月前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
78 4
|
2月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
74 3
|
2月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
71 1
|
2月前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
90 2
|
2月前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
58 2
|
3月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
3月前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。