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

}

时间: 2024-10-07 12:37:01

腾讯Android自动化测试实战3.3.2 ListView列表遍历的相关文章

腾讯Android自动化测试实战

腾讯Android自动化测试实战 丁如敏 盛娟 等著 图书在版编目(CIP)数据 腾讯Android自动化测试实战 / 丁如敏等著. -北京:机械工业出版社,2016.10 ISBN 978-7-111-54875-1 Ⅰ. 腾-   Ⅱ. 丁-   Ⅲ. 移动终端-应用程序–程序设计   Ⅳ. TN929.53 中国版本图书馆CIP数据核字(2016)第223713号 腾讯Android自动化测试实战 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037) 责任编辑:

腾讯Android自动化测试实战导读

前 言 Preface 为什么要写这本书 早在2010年年底,我们团队就有出一本关于移动互联网测试书籍的计划(那时候移动互联网测试书籍基本没有),当时计划的内容涉及面比较广,涵盖测试设计.测试用例管理.测试流程.自动化测试.专项测试等领域.不过,由于各种原因被搁浅,确实有点儿可惜,否则移动互联网测试国内的第一本书当时就面世了.这次终于又有机会整理这些年的测试经验并形成一本书了,借此可以跟业界的同行一起交流切磋. TMQ(Tencent Mobile Quality)腾讯移动品质中心,是腾讯内部最

腾讯Android自动化测试实战1.1 Android自动化测试框架概述

1.1 Android自动化测试框架概述 2007年Android开源时,Monkey.Instrumentation和MonkeyRunner这3个测试框架,是跟Android源码一起发布的,这也是最早可用的自动化测试框架,那几年大家基本都是用这些框架来开展自动化相关测试工作的.2010年,第一个第三方的测试工具Robotium(基于Instrumentation)发布了,不少测试人员就转用这个框架,Robotium社区逐步发展起来.图1-1所示为Robotium热度随时间变化的趋势. 201

腾讯Android自动化测试实战第2章

第2章 自动化测试框架及应用领域综述 近几年,随着移动互联网的快速发展,智能终端的App应用越来越广,Android测试技术也备受重视,新的终端自动化测试框架层出不穷,本章笔者就自动化测试的入门知识及其应用做一个浅显的梳理与总结,与读者一同探讨移动终端自动化测试思路和方案.同时,本书主要也是围绕本章节提到的基础框架及其应用场景进行实战分析与演练,以亲身体验总结出实际项目经验,给准备实施或正在实施自动化测试的读者提供一些帮助和建议. 自动化测试在软件测试的各大沙龙.行业峰会以及培训课程中都是一个热

腾讯Android自动化测试实战2.1.2 自动化测试框架基本原理

2.1.2 自动化测试框架基本原理 经过前面的一个简单的自动化测试案例,我们对Android的自动化测试有了一个感性的认识,很多有相关工作经验的测试同学也都会理解,这和PC的自动化测试思路是相通的,只不过所借助的框架不同,目前业界已经有很多成熟的开源Android端自动化测试框架,经常用到的框架代表有Robotium和UI Automator,各个框架可能在具体应用上有些不同,如有些偏稳定性,有些适用于Web应用,有些能支持跨应用,等等,但其主要思想是通过控件的位置.名称.属性等获取控件对象,并

腾讯Android自动化测试实战3.3.3 修改Robotium以支持X5WebView

3.3.3 修改Robotium以支持X5WebView 本节中的X5WebView指QQ浏览器团队出品的腾讯X5内核中的WebView.除了QQ.微信.应用宝等众多腾讯内部产品在使用X5内核外,京东.58同城等众多腾讯外部的合作伙伴也在使用X5内核. 腾讯X5网站:http://x5.tencent.com/. 然而Robotium本身并不支持获取X5WebView中的元素,因此无法对使用了X5内核的Web页面进行自动化测试,而通过3.2.2节中介绍的Robotium支持WebView原理可知

腾讯Android自动化测试实战第3章

第3章 Robotium框架工作原理及实践 2010年,当Android还处于发展早期时,拥有丰富自动化测试经验的Renas Reda创建了Robotium项目,在Robotium发展到4.0版本时开始支持App中的Web自动化,经过几年的发展,Robotium现在已经是一款成熟.全面.稳定的自动化测试框架.更重要的是,Robotium是一款开源的测试框架,在世界各地都有活跃的贡献者对其进行更新与维护,因此,无须担心将来Robotium会随着Android的发展而变得不可用.不易用,相反,Rob

腾讯Android自动化测试实战3.2.1 Robotium支持Native原理

3.2.1 Robotium支持Native原理 1. 获取控件原理 我们知道Android会为res目录下的所有资源分配ID,例如在布局xml文件中使用了 android:id="@+id/example_id",那么在Android工程编译时就会在R.java中相应地为该布局控件分配一个int型的ID,在Android工程中就可以通过Activity.Context或View等对象调用findViewById(int id)方法引用相应布局中的控件.因此,在测试工程中,如果是在源码

腾讯Android自动化测试实战3.3.1 控件ID相同时获取控件

3.3 Robotium实践运用 3.3.1 控件ID相同时获取控件 实际界面中常常有一些子控件是相同ID甚至没有ID的,但这时候一般其父视图是有ID的.如图3-14所示,每个TAB的控件ID是相同的.   图3-14 拥有相同ID的底部TAB 因为界面中也很可能会出现多个发现.游戏这样的文本,因此也不能采取类似getText("发现")这样的方式.这里,我们就可以通过ID获取唯一父控件,再通过过滤方式获取指定的控件. //先根据ID获得唯一的布局LinearLayout Linear