Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)
本人之前以前撰文描写叙述Appium和UIAutomator框架是怎样定位Android界面上的控件的。
1. 背景
- NotesList Activity的第一个页面列表中会包括note3到note9的笔记
- NoteList Activity往下拉后还会看到有note1到note2以及两个反复的名称为note的笔记
- 点击系统的menu后会出现“Add note”这个menu entry供我们測试验证用
2. 通过控件的文本信息text进行定位
2.1Solo.clickOnText(String text)
2.1.1 演示样例
solo.clickOnText("^note$");
assertTrue(solo.searchText("^note$"));
找到第一个text绝对等于note的控件并进行点击。
2.1.2 分析和建议
- Robotium会自己主动往下滚动直到定位到目标控件为止:这就是为什么以上演示样例不用先进行scrolldown动作就能够直接查找到在第二个页面的“note”的原因
- Robotium假设查找到的满足条件的控件多于一个的话,默认会返回第一个
- Robotium依据text进行控件定位的时候默认就是支持用正則表達式的
solo.clickOnText("note");
assertTrue(solo.searchText("^note$"));
在这里点击的将会列表最上面的日记,在我们的样例中就是“note9”。为什么呢?由于note1到note9以及note都包括了“note”这个text,而以上代码中的參数在正則表達式中的意思是“查找文本中包括note字串的控件进行点击”。所以我们必须把它改成"^note$"以精确查找text绝对等于note的控件。
2.2 Solo.clickOnText(String text, int match)
2.2.1 演示样例
solo.clickOnText("^note$", 2);
assertTrue(solo.searchText("^note$"));
2.2.2 解析
2.3 Solo.clickOnText(String text, int match, boolean scroll)
2.3.1 演示样例
solo.clickOnText("^note2$", 1, false);
assertTrue(solo.searchText("^note2$"));
2.3.2 解析
3. ListView子控件定位
3.1Solo.clickInList(int line):指定行数进行定位
3.1.1 演示样例
solo.clickInList(2);
assertTrue(solo.searchText("^note8$"));
3.1.2 解析
3.2 Solo.clickInList(int line, int index):同一时候指定第几个ListView的第几行进行定位
3.2.1 演示样例
solo.clickInList(2, 0);
assertTrue(solo.searchText("^note8$"));
3.2.2 解析
4. ActionBar控件定位
4.1 Solo.clickOnActionBarHomeButton()
4.2 Solo.clickOnActionBarItem(int id)
5. 通过控件的排列顺序来定位
- Solo.clickOnButton(int index)
- Solo.clickOnCheckBox(int index);
- Solo.clickOnEditText(int index)
- Solo.clickOnImage(int index)
- Solo.clickOnImageButton(int index)
- Solo.clickOnRadioButton(int index)
5.1 演示样例
solo.clickLongOnTextAndPress("note9", 2);
solo.clickOnButton(0);
5.2 分析
- 长按note9那个笔记
- 在弹出menu中选择由0数起的第2个menu entry,也就是“Edit Title”
- 点击界面从左到右由上往下由0数起的第0个Button,也就是“ok“这个Button
6. 通过控件的内部属性来定位
- ResrouceId:能够是字符串类型(通过UIAutomatorViewer获得)也能够是整型(通过R.java文件获得)
- ClassName:控件的Class(能够通过UIAutomatorViewer获得),只是注意不是字符串,而是真实的class
这里我们用getView来作为一个样例来说明怎样通过控件内部属性获得控件,以起到一个抛砖引玉的左右。当然除了getView,Robotium还支持其它的入getViews,getCurrentViews等方法,但原理一致,就不累述了。
6.1 Solo.getView(String/int id,[int index])
6.1.1 演示样例
View view = null;
view = solo.getView("android:id/text1",1);
solo.clickOnView(view);
6.1.2 分析
View view = null;
view = solo.getView("android:id/text1");
solo.clickOnView(view);
6.2 Solo.getView(Class<T> viewClass, int index)
6.2.1 演示样例
View view = null; view = solo.getView(TextView.class,1);
solo.clickOnView(view);
点击从0開始的第1个TextView类型的控件,也就是下图中的note4。依照从左到右自上往下的顺序,<span style="font-family: Arial, Helvetica, sans-serif;">这里的第0个是ListView的Title名称为Notes的 那个TextView:</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><img src="http://img.blog.csdn.net/20141004182018767?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1YmFpdGlhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
</span>
6.2.2 解析
- Robotium
:Class类型 || 不须要FQCN(也就是不须要写成andoid.widget.Textview,这在UIAutomator和Appium中是必须的) - UIAutomator:
String类型 || FQCN - Appium
:String类型 || FQCN
7 无需定位的控件
8 还有吗?
- 通过坐标点操作控件 :easy理解,就是获得坐标点然后点击屏幕坐标。
- 获取和操作WebView控件 :如今用不上,到时实用到了再去深究
- 还有其它吗?
|
Item |
Description |
Warning |
|
Author |
天地会珠海分舵 |
转载请注明出处! 很多其它精彩文章请查看本人博客! |
|
Blog Address |
Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)的更多相关文章
- 转载:Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)
来源于:http://blog.csdn.net/zhubaitian/article/details/39803857 1. 背景 为保持这个系列的一致性,我们继续用SDK自带的NotePad实例应 ...
- Robotium之Android控件定位实践和建议
本人之前曾经撰文描述Appium和UIAutomator框架是如何定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议Appium基于安卓的各种FindEl ...
- MonkenRunner通过HierarchyViewer定位控件的方法和建议(Appium/UIAutomator/Robotium姊妹篇)
1. 背景 在使用MonkeyRunner的时候我们经常会用到Chimchat下面的HierarchyViewer模块来获取目标控件的一些信息来辅助我们测试,但在MonkeyRunner的官网上是没有 ...
- MonkenRunner通过HierarchyViewer定位控制的方法和建议(Appium/UIAutomator/Robotium侣)
1. 背景 正在使用MonkeyRunner当我们经常使用Chimchat下面HierarchyViewer模块获得目标控制的一些信息,以协助我们测试.但在MonkeyRunner官方的说法是没有看到 ...
- 【转】UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)
原文地址:http://blog.csdn.net/zhubaitian/article/details/39777951 在本人之前的一篇文章<<Appium基于安卓的各种FindEle ...
- UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)
在本人之前的一篇文章<<Appium基于安卓的各种FindElement的控件定位方法实践和建议>>第二章节谈到Appium可以通过使用UIAutomator的方法去定位And ...
- UIAutomator定位Android控件的方法
UIAutomator各种控件定位的方法. 1. 背景 使用SDK自带的NotePad应用,尝试去获得在NotesList那个Activity里的Menu Options上面的那个Add note菜单 ...
- 【转】Appium基于安卓的各种FindElement的控件定位方法实践
原文地址:http://blog.csdn.net/zhubaitian/article/details/39754041#t11 AppiumDriver的各种findElement方法的尝试,尝试 ...
- Appium基于安卓的各种FindElement的控件定位方法实践和建议
AppiumDriver的各种findElement方法的尝试,尝试的目标应用是SDK自带的Notepad应用. 1. findElementByName 1.1 示例 el = driver.fin ...
随机推荐
- p95 3.5、3.8
3.5 有一农夫带一条狼,一只羊和一筐菜欲从河的左岸乘船到右岸,但受下列条件限制:(1)船太小,农夫每次只能带一样东西过河:(2)如果没有农夫看管,则狼要吃羊,羊要吃菜.请设计一个过河方案,是的农夫 ...
- Problem D Ananagrams(map的使用)
题目链接:Problem D 题意:输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文本中的另一个单词.在判断是否满足条件时,字母不区分大小写. 但是输出时应保留原始大小写, ...
- Depth-First Search
深度搜索和宽度搜索对立,宽度搜索是横向搜索(队列实现),而深度搜索是纵向搜索(递归实现): 看下面这个例子: 现在需要驾车穿越一片沙漠,总的行驶路程为L.小胖的吉普装满油能行驶X距离,同时其后备箱最多 ...
- JavaScript 运动框架 Step by step
http://blog.csdn.net/rsj217/article/details/7986905 关于offsetLeft:http://www.cnblogs.com/JackJiang/ar ...
- C#_socket拆包_封包_模拟乱序包
拆包一直是个硬伤呀,MLGB的,服务端各种乱数据,果断整理下 拆包思路:设计一个网络协议,一般都会分包,一个包就相当于一个逻辑上的命令. .如果我们用udp协议,省事的多,一次会收到一个完整的包,但U ...
- idea中使用scala运行spark出现Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class
idea中使用scala运行spark出现: Exception in thread "main" java.lang.NoClassDefFoundError: scala/co ...
- 【转】使用Boost Graph library(二)
原文转自:http://shanzhizi.blog.51cto.com/5066308/942972 让我们从一个新的图的开始,定义一些属性,然后加入一些带属性的顶点和边.我们将给出所有的代码,这样 ...
- Protel99 SE快捷键大全
为了方便观看我们的protel99 se视频教程的朋友,我们在这里发布了protel99 se的所有的键盘的快捷分健大全,希望大家在学习我们的视频教程的时候,可以熟悉以下这些快捷键,因为平时我们用pr ...
- HDU 3350 #define is unsafe
题目大意:给定一个只含有MAX和+操作的式子,求加法运行了多少次,其中MAX使用宏定义. 题解:注意一个规律,对于MAX(A,B)其中A中加a次,B中加b次若A>B,则加a*2+b次,否则a+b ...
- 常用 API
运行 Java 程序的参数.使用 Scanner 获取键盘输入.使用 BufferedReader 获取键盘输入.System类.Runtime类.Object类.Java 7新增的 Objects ...