Robotium API
基本API
完整 API:http://robotium.googlecode.com/svn/doc/index.html
个人常用:
solo.clickLongOnView( View )
solo.clickOnView(solo.getView(R.id.X));
#如果 R.id.X在当前界面不可见,会出Bug. 如果不确定其存在(如更新提示),先用solo.waitForView(Id, matchTime,
solo.getCurrentActivity()
solo.enterText( View, String)
solo.sleep(int time)
返回: 无
返回: 无
返回:无
is方法
boolean isCheckBoxChecked (int index | String text)
判断checkBox是否处于被选中的状态,可以通过index和text两种方法定位
参数:
index-检查的checkBox的索引值,如果只有一个可用则为0
text-检查的checkBox的文字,可使用正则表达式
返回:
true-如果被选中
false-如果没有被选中
boolean isRadioButtonChecked (int index | String text)
判断RadioButton是否处于被选中的状态,可以通过index和text两种方法定位
参数:
index-检查的RadioButton的索引值,如果只有一个可用则为0
text-检查的RadioButton的文字,可使用正则表达式
返回:
true-如果被选中
false-如果没有被选中
boolean isRadioButtonChecked (int index | String text)
判断RadioButton是否处于被选中的状态,可以通过index和text两种方法定位
参数:
index-检查的RadioButton的索引值,如果只有一个可用则为0
text-检查的RadioButton的文字,可使用正则表达式
返回:
true-如果被选中
false-如果没有被选中
boolean isToggleButtonChecked (int index | String text)
判断ToggleButton是否处于被选中的状态,可以通过index和text两种方法定位
参数:
index-检查的ToggleButton的索引值,如果只有一个可用则为0
text-检查的ToggleButton的文字,可使用正则表达式
返回:
true-如果被选中
false-如果没有被选中
boolean isSpinnerTextSelected ( [int index, ]
判断SpinnerText是否处于被选中的状态,可以通过index定位
参数:
index-检查的SpinnerText的索引值,如果只有一个可用则为0
text-检查的SpinnerText的文字,可使用正则表达式
返回:
true-如果被选中
false-如果没有被选中
boolean isTextChecked (String text)
判断text是否处于被选中的状态,可以通过text定位
参数:
text-检查的text的文字,可使用正则表达式
返回:
true-如果被选中
false-如果没有被选中
search方法
boolean searchButton (String text [, int minimumNumberOfMatches, boolean onlyVisible])
判断当前的屏幕中是否能找到指定的button
参数:
text-查找的button的文字
minimumNumberOfMatches-最小指定多少才算是通过,0表示1个或者多个
onlyVisible-只记录可见的
返回:
true-如果找到了该控件
false-如果没有找到该控件
boolean searchText (String text [, int minimumNumberOfMatches, boolean scroll, boolean onlyVisible])
判断当前的屏幕中是否能找到指定的text,即文本
参数:
text-查找的Text的文字
minimumNumberOfMatches-最小指定多少才算是通过,0表示1个或者多个
scroll-是否允许滚动搜索,true表示支持,false表示只能在当前屏幕内查找
onlyVisible-只记录可见的
返回:
true-如果找到了该文本
false-如果没有找到该文本
boolean searchToggleButton (String text [, int minimumNumberOfMatches])
判断当前的屏幕中是否能找到指定的ToggleButton
参数:
text-查找的ToggleButton的文字
minimumNumberOfMatches-最小指定多少才算是通过,0表示1个或者多个
返回:
true-如果找到了该控件
false-如果没有找到该控件
boolean searchEditText (String text)
判断当前的屏幕中是否能找到指定的EditText
参数:
text-查找的Text的文字
返回:true-如果找到了该文本
false-如果没有找到该文本
测试中经常出现明明有控件或者文本,但是由于界面没有载入完成或者其他原因导致assert判断的结果失败。或者两次执行,一次成功,一次失败的情况。所以需要加入这些等待某些控件或者文本载入的方法,以加强程序执行的健壮性。
sleep是固定长度时间的等待,waitFor则是等待某个控件或者文本载入后再进行下一步操作。
故两者都能用的情况下,推荐waitFor
sleep,固定时间的等待
void sleep(int time)
让测试停止若干时间以便进行下一步操作
参数:
time-停止的时间,单位是毫秒,如sleep(2000),是停止了2秒钟
返回:
无
waitFor,等待特定的某个控件或者文本载入后再进行下一步操作
boolean waitForActivity ( Class activityClass | String name [, int timeout])
等待某个activity载入以进行下一步操作
参数:
activityClass-定位activity的class
name-定位activity的名称
timeout-失效时间,如果过了这个时间就不再等待,认为失败。单位毫秒,默认20秒
返回:
true-在失效时间前出现了activity
false-过了失效时间仍未找到
boolean waitForView ( Class viewClass [, int timeout, boolean scroll])
等待某个view载入以进行下一步操作,通过view的class定位
参数:
viewClass-定位view的class
timeout-失效时间,如果过了这个时间就不再等待,认为失败。单位毫秒,默认20秒
scroll-是否允许滚动搜索,true表示支持,false表示只能在当前屏幕内查找
返回:
true-在失效时间前出现了view
false-过了失效时间仍未找到
boolean waitForView (int id [, int minimumNumberOfMatches, int timeout, boolean scroll])
等待某个view载入以进行下一步操作,通过view的id定位
参数:
id-定位view的id
minimumNumberOfMatches-最小指定多少才可以往下进行,0表示1个或者多个
timeout-失效时间,如果过了这个时间就不再等待,认为失败。单位毫秒,默认20秒
scroll-是否允许滚动搜索,true表示支持,false表示只能在当前屏幕内查找
返回:
true-在失效时间前出现了view
false-过了失效时间仍未找到
boolean waitForView ( android.view.View.view
等待某个view载入以进行下一步操作,通过view名称定位
参数:
view-定位view的名称
timeout-失效时间,如果过了这个时间就不再等待,认为失败。单位毫秒,默认20秒
scroll-是否允许滚动搜索,true表示支持,false表示只能在当前屏幕内查找
返回:
true-在失效时间前出现了view
false-过了失效时间仍未找到
boolean waitForText (String text [, int minimumNumberOfMatches, int timeout, boolean scroll, boolean onlyVisible])
等待某个文本载入以进行下一步操作
参数:
text-等待的文本
minimumNumberOfMatches-最小指定多少才可以往下进行,0表示1个或者多个
timeout-失效时间,如果过了这个时间就不再等待,认为失败。单位毫秒,默认20秒
scroll-是否允许滚动搜索,true表示支持,false表示只能在当前屏幕内查找
onlyVisible-只有可见的才会被统计
返回:
true-在失效时间前出现了view
false-过了失效时间仍未找到
boolean waitForDialogToOpen([int timeout])
等待对话框打开
参数:
timeout-失效时间,如果过了这个时间就不再等待,认为失败。单位毫秒,默认20秒
返回:
true-在失效时间前打开了dialog
false-过了失效时间仍未打开
boolean waitForDialogToClose([int timeout])
等待对话框关闭
参数:
timeout-失效时间,如果过了这个时间就不再等待,认为失败。单位毫秒,默认20秒
返回:
true-在失效时间前关闭了dialog
false-过了失效时间仍未关闭
boolean waitForWebElement (By by [, int minimumNumberOfMatches, int timeout, boolean scroll])
等待某个web控件载入以进行下一步操作
参数:
by-定位web控件的by属性
minimumNumberOfMatches-最小指定多少才可以往下进行,0表示1个或者多个
timeout-失效时间,如果过了这个时间就不再等待,认为失败。单位毫秒,默认20秒
scroll-是否允许滚动搜索,true表示支持,false表示只能在当前屏幕内查找
返回:
true-在失效时间前出现了web控件
false-过了失效时间仍未找到
boolean waitForFragmentById (int id [, int timeout])
等待Fragment载入以进行下一步操作,以id定位Fragment
参数:
id-定位Fragment的id
timeout-失效时间,如果过了这个时间就不再等待,认为失败。单位毫秒,默认20秒
返回:
true-在失效时间前出现了Fragment
false-过了失效时间仍未找到
boolean waitForFragmentByTag (String id [, int timeout])
等待Fragment载入以进行下一步操作,以tag定位Fragment
参数:
tag-定位Fragment的tag
timeout-失效时间,如果过了这个时间就不再等待,认为失败。单位毫秒,默认20秒
返回:
true-在失效时间前出现了Fragment
false-过了失效时间仍未找到
boolean waitForLogMessage (String logMessage [, int timeout])
等待日志信息载入以进行下一步操作
参数:
logMessage-等待加载的日志
timeout-失效时间,如果过了这个时间就不再等待,认为失败。单位毫秒,默认20秒
返回:
true-在失效时间前出现了logMessage
false-过了失效时间仍未找到
boolean waitForCondition (Condition condition, int timeout)
等待某种条件加载以进行下一步操作
参数:
condition-需要满足的条件
timeout-失效时间,如果过了这个时间就不再等待,认为失败。单位毫秒,默认20秒
返回:
true-在失效时间前出现了满足condition的条件
false-过了失效时间仍未找到
注:Condition是一个interface,里面只有一个方法isSatisfied () ,用于多条件的等待
在Robotium中,可以通过id、index、控件名称或者对应的text正则表达式来定位一个本地的控件。那么对于外部的web控件来说,在你的程序里面无法像本地控件一样找到id、index什么的,怎么来定位呢?
其实Robotium提供了定位web控件的类和方法,分别在By和Solo里面。其中By是专门用来定位web属性的,Solo里面部分方法是可以用于web控件的,部分方法是专门为了web控件设置的。
大家可以使用PC端的浏览器模拟User-Agent为android手机的方式,来查看web控件的属性。Chrome有自带的User-Agent模拟,FireFox需要下载插件才可以。我就是用的FireFox的插件,如下图:
By里面的方法介绍
By id(String id)
通过id来定位一个WebElement,最常用的方法,一般来说是首选。
参数:
id-WebElement的id
返回值
By-定位的WebElement
By name(String name)
通过name来定位一个WebElement,也很常用。
参数:
name-WebElement的name
返回值
By-定位的WebElement
By className(String ClassName)
通过className来定位一个WebElement,也很常用。
参数:
className-WebElement的className
返回值
By-定位的WebElement
By tagName(String tagName)
通过tagName来定位一个WebElement,也很常用。
参数:
tagName-WebElement的tagName
返回值
By-定位的WebElement
By xpath(String xpath)
通过xpath来定位一个WebElement,定位搜索结果的不二选择。
参数:
xpath-WebElement的xpath
返回值
By-定位的WebElement
By cssSelector(String sccSelector)
通过cssSelector来定位一个WebElement。据说是速度最快的识别方法,但我对css没那么熟,不经常使用。
参数:
cssSelector-WebElement的cssSelector
返回值
By-定位的WebElement
By textContent(String
通过textContent来定位一个WebElement,可以使用正则表达式。据说是最慢的识别方式,不推荐使用。
参数:
textContent-WebElement的textContent
返回值
By-定位的WebElement
String getValue()
返回属性的值
参数:
无
返回值:
该属性的值
Solo里面的WebElement专有方法,由于前面已经有介绍,在此不加赘述了
void clearTextInWebElement (By by)
清除WebElement中的值
void clickOnWebElement(By by [, int match, boolean scroll])
点击WebElement,通过web属性识别
void clickOnWebElement(WebElement webElement)
点击WebElement,通过webElement名称识别
void enterTextInWebElement (By by, String Text)
输入内容,通过web属性识别webElement
void typeTextInWebElement (By by | WebElement webElement , String Text [, int match])
输入内容,通过web属性识别webElement
ArrayList getCurrentWebElements([By by])
获取所有WebElement,并存到ArrayList中
WebElement getWebElement (By by, int index)
获取WebElement,通过web属性识别
boolean waitForWebElement (By by [, int minimumNumberOfMatches, int timeout , boolean scroll})
等待WebElement响应
Solo里面的WebElement和Native控件共有的方法
void clickOnText(String text [, int match , boolean scroll])
点击文字,通过text识别,支持正则表达式
void clickLongOnText(String text [, int match , int time|boolean scroll])
长按文字,通过text识别,支持正则表达式