------手机自动化测试之Robotium
Robotium是一个通用的测试Android App的框架,所以官方提供了一套通用的PKI文档。我们在下载Solo包的时候同时可以下载一个javadoc包,解压后就能看到官方文档了,不过官方文档是英文版本的,如果通读一遍的话也是挺有难度的。还好网上也有对应的翻译,所以我们不打算讲述所有的API,只讲解一些儿常用的。
3.1 点击类操作
在手机App操作中,点击操作是非常常用的,下面几个API是基本的点击操作:
(1)clickOnText(String text)
clickOnText(java.lang.String text, int match) clickOnText(java.lang.String text, int match, boolean scroll)
功能:点击包含该文字的地方,其中text可以用正则表达式表示。如:(?i)----忽略大小写。默认情况是大小写敏感的,正则表达式与java保持一致。Scroll:true如果可滚动Match:匹配
(2)clickLongOnText(String text)
clickLongOnText(java.lang.String text, int match) clickLongOnText(java.lang.String text, int match, boolean scroll) clickLongOnText(java.lang.String text, int match, int time)
功能:长按一个包含该文字的地方。
参数:
Scroll:true如果可滚动 ,Time:长按的时间 Match:匹配
(3) clickOnButton(int index)
clickOnButton(java.lang.String name)
功能:以序号或是名称单击各种按钮,index代表这个按钮在view中的序号,name是属性值。
(4)clickOnImageButton(int index)
功能:以序号的方式单击一个图片按钮。
(5)clickOnCheckBox(int index)
功能:以序号的方式单击一个复选按钮。
(6)clickOnRadioButton(int index)
功能:以序号来单击一个单选按钮。
(7)clickOnToggleButton(java.lang.String name)
功能:点击一个切换按钮
(8) clickOnEditText(int index)
功能:以序号来单击文本框,使其获得焦点,然后执行后序的操作。
(9)clickOnScreen(float x, float y)
clickLongOnScreen(float x, float y)
clickLongOnScreen(float x, float y, int time)
功能:单击屏幕的某一坐标。参数x,y标识出坐标的位置,time 代表长按的时间。
(10)clickLongOnTextAndPress(java.lang.String text, int index)
功能:长按后从list中选择一个项目
(11)clickOnView(android.view.View view) clickLongOnView(android.view.View view) clickLongOnView(android.view.View view, int time)
功能:单击一个View,或是长按一个View,参数time代码长按的时间。
(12)clickOnImage(int index)
功能:以序号来执行单击图片操作。
(13)clickOnMenuItem(java.lang.String text) clickOnMenuItem(java.lang.String text, boolean subMenu)
功能:以菜单项来单击选择菜单,参数subMenu:子菜单,如果可以设置在子菜单中
3.2 输入类操作
对要操作的App进行输入操作,这也是常见的操作,Robotium输入操作有如下几种:
(1)void enterText(android.widget.EditText editText, String text)
功能:向一个符合条件的EditText输入特定的文本。
(2)void enterText(int index, String text)
功能:对特定的符合序号index的文本框输入文本。
(3)void enterTextInWebElement(By by, String text)
功能:通过By定位,对页面元素输入文本。
(4)void clearEditText(android.widget.EditText editText)
功能:清除特定的文本框中的内容。
(5)void clearEditText(int index)
功能:清除符合序号index的文本框中的内容。
(6)void clearLog()
功能:清除日志文件
(7)void clearTextInWebElement(By by)
功能:清除页面元素文本框内的信息。
这些儿是常用的输入操作,为了不影响操作效果,建议在对文本框进行输入之前,先清空一下。当然像菜单选择,单选框,多选框也能输入的,这些儿操作在上一节已经讲过。
3.3 Get相关操作
在对App元素进行操作之前,首先要获取这个元素的句柄,然后再去执行相关的操作。所以获取到要操作的元素是第一步的,这也是自动化操作最基本的。
(1)getButton(int index)
getButton(java.lang.String text)
getButton(java.lang.String text, boolean onlyVisible)
功能:通过序号,文本获取按钮,参数onlyVisible为true时只获取可见的按钮。
(2)getCurrentActivity()
功能:返回当前activity。
(3)getCurrentButtons()
功能:返回button的list。
(4)getCurrentCheckBoxes()
功能:返回复选框的list。
(5)getCurrentDatePickers()
功能:返回日期选择器的list。
(6) getCurrentEditTexts()
功能:返回当前文本框的list
(7)getCurrentGridViews()
功能:获取当前网格视图List。
(8) getCurrentImageButtons()
getImageButton(int index)
功能:获取当前图片按钮list;根据序号获取图片按钮。
(9)getCurrentImageViews()
功能:获取当前ImageView列表。
(10)getCurrentListViews()
功能:获取当前ListView列表。
(11)getCurrentProgressBars()
功能:获取当前进度条信息。
(12)getCurrentRadioButtons()
功能:获取当前单选按钮列表。
(13)getCurrentScrollViews()
功能:获取当前滚动条列表。
(14)getCurrentTextViews(android.view.View parent)
功能:获取当前TextView的列表。
(15)getCurrentViews()
getView(int id) getViews()
getViews(android.view.View parent)
功能:获取当前View,或是所有View的列表。
(16)getEditText(int index)
getEditText(java.lang.String text)
getEditText(java.lang.String text, boolean onlyVisible)
功能:根据序号,文本获取EditText的句柄。
(17)getText(int index)
getText(java.lang.String text)
getText(java.lang.String text, boolean onlyVisible)
功能:获取文本
3.4 Search相关操作
在要操作的App中查找到相关的元素或是文本,这个是判读执行结果的时候很重要的一步作,下面我们将常用的查找元素的方法介绍一下:
(1)boolean searchButton (String text [, int minimumNumberOfMatches, boolean onlyVisible])
功能:判断当前的屏幕中是否能找到指定的button
参数:
text-查找的button的文字
minimumNumberOfMatches-最小指定多少才算是通过,0表示1个或者多个
onlyVisible-只记录可见的
返回:
true-如果找到了该控件
false-如果没有找到该控件
(2)boolean searchText (String text [, int minimumNumberOfMatches, boolean scroll, boolean onlyVisible])
功能:判断当前的屏幕中是否能找到指定的text,即文本。
参数:
text-查找的Text的文字
minimumNumberOfMatches-最小指定多少才算是通过,0表示1个或者多个
scroll-是否允许滚动搜索,true表示支持,false表示只能在当前屏幕内查找
onlyVisible-只记录可见的
返回:
true-如果找到了该文本
false-如果没有找到该文本
(3)boolean searchToggleButton (String text [, int minimumNumberOfMatches])
功能:判断当前的屏幕中是否能找到指定的ToggleButton
参数:text-查找的ToggleButton的文字。
minimumNumberOfMatches-最小指定多少才算是通过,0表示1个或者多个。
返回:
true-如果找到了该控件
false-如果没有找到该控件
(4)boolean searchEditText (String text)
判断当前的屏幕中是否能找到指定的EditText
参数:text-查找的Text的文字
返回:
true-如果找到了该文本
false-如果没有找到该文本
3.5 Assert断言相关操作
断言是自动化测试的关键,任何测试操作都是由断言来检测用例执行的是否正确。好的断言设置是体现自动化测试人员水平的关键,我们还是先了解一下robotium的断言函数吧!
(1)void assertCurrentActivity (String message, Class activityClass [,boolean isNewInstance])
功能:断言当前的activity是否是预期的
参数:message-如果运行失败打印的消息。
activityClass-预期的activity。
isNewInstance-可选项,实际activity是否是预期activity的继承,如果为true则只要是继承关系就通过,false则必须是当前activity
返回:无
(2)void assertCurrentActivity (String message, String name [,boolean isNewInstance])
功能:断言当前的activity是否是预期的
参数:
message-如果运行失败打印的消息
name-预期activity的名字
isNewInstance-可选项,实际activity是否是预期activity的继承,如果为true则只要是继承关系就通过,false则必须是当前activity
返回:无
(3)void assertMemoryNotLow()
功能:断言目前系统可用内存是否过低,内存空间足够则通过
返回:无
is方法,虽然不是断言,但可以当断言来用。
(4)boolean isCheckBoxChecked (int index | String text)
功能:判断checkBox是否处于被选中的状态,可以通过index和text两种方法定位
参数:
index-检查的checkBox的索引值,如果只有一个可用则为0
text-检查的checkBox的文字,可使用正则表达式
返回:
true-如果被选中
false-如果没有被选中
(5)boolean isRadioButtonChecked (int index | String text)
功能:判断RadioButton是否处于被选中的状态,可以通过index和text两种方法定位
参数:
index-检查的RadioButton的索引值,如果只有一个可用则为0
text-检查的RadioButton的文字,可使用正则表达式
返回:
true-如果被选中
false-如果没有被选中
(6)boolean isRadioButtonChecked (int index | String text)
功能:判断RadioButton是否处于被选中的状态,可以通过index和text两种方法定位
参数:
index-检查的RadioButton的索引值,如果只有一个可用则为0
text-检查的RadioButton的文字,可使用正则表达式
返回:
true-如果被选中
false-如果没有被选中
(7)boolean isToggleButtonChecked (int index | String text)
功能:判断ToggleButton是否处于被选中的状态,可以通过index和text两种方法定位。
参数:
index-检查的ToggleButton的索引值,如果只有一个可用则为0。
text-检查的ToggleButton的文字,可使用正则表达式。
返回:
true-如果被选中
false-如果没有被选中
(8)boolean isTextChecked (String text)
功能:判断text是否处于被选中的状态,可以通过text定位
参数:text-检查的text的文字,可使用正则表达式
返回:
true-如果被选中
false-如果没有被选中
3.6 本章小结
本章我们介绍了Robotium API,solo相关函数,这些儿只是基本的,常用的,但是还有很多相关的函数,随着版本的更新,会增加新的方法。所以建议大家去官方下载最新的API文档,随时了解最新的函数情况,以便更好的编写自己的自动化测试代码。本章我们先了解有哪些儿方法,其功能是什么,参数有哪些儿,致于如何使用,下面的章节我们将会慢慢地介绍到。