Robtium API

Robotium API

基本API

完整 API:http://robotium.googlecode.com/svn/doc/index.html

个人常用:

solo.getView(R.id.X);                         通过 R.id.X得到View的指针(记得引用被测试工程的 .R, X是目标id)
solo .getView(R.id.X, int index)           如果有多个同名view, 用index指定是第几个。

solo.clickLongOnView( View )              最常用的点击函数

solo.clickOnView(solo.getView(R.id.X));     二者合用

#如果 R.id.X在当前界面不可见,会出Bug. 如果不确定其存在(如更新提示),先用solo.waitForView(Id, matchTime,  timeout)确保其存在

solo.getCurrentActivity()                       得到当前activity的context,可以直接操作。我一般用来判断是否为预期activity如:

     if( !(solo.getCurrentActivity() instanceof  myActivity) )

solo.enterText( View, String)                 在View 输入指定的字符串


solo.sleep(int time)                            等待一段时间,单位为毫秒。一般是为了让程序点击后有足够时间来响应

solo.takeScretiumenshot(String name);       屏幕截图,名称为name. 保存在/sdcard/Robotium-Screenshots/足够时间来

solo .waitForActivity(myActivity.class , int timeout)  等待某个activity
solo .assertCurrentActivity(String msg , myActivity.class );  如果不是预期activity则报错并输出 msg

solo.drag(x0, x1, y0, y1, step)                    模拟从(x0,y0)拖拽到(x1,y1)共step步。屏幕左上角为(0, 0) 
solo .scrollToTop();                                      把屏幕拉倒最上方(复位用)
solo.goBack()                                                模拟点击退回键
solo.goBacktoActivity("ActivityName")      回到名为ActivityName的界面
solo.clickInList(int index);                             点击listView中的第index项。不推荐使用,经常出问题。直接用getView(R.id.X, index)再点击。当前前提是点击对象有id
solo.scrollToSide(Solo.RIGHT);                  从右往左滑动屏幕
solo.scrollViewToSide(View, Solo.RIGHT); 把指定 View从右往左滑动

获得View id的方式
${android-sdk}/tools/hierarchyviewer.bat   或者  ${android-sdk}/tools/monitor.bat 然后Inspect 就可以看到每个View的id(如果有的话)

断言方法assert(robotium特有的断言方式,实际项目中和Junit的assert方法配合使用)

void assertCurrentActivity (String message, Class activityClass [,boolean isNewInstance])
断言当前的activity是否是预期的
参数:
message-如果运行失败打印的消息
activityClass-预期的activity
isNewInstance-可选项,实际activity是否是预期activity的继承,如果为true则只要是继承关系就通过,false则必须是当前activity
返回: 无
             
void assertCurrentActivity (String message, String name [,boolean isNewInstance])
断言当前的activity是否是预期的
参数:
message-如果运行失败打印的消息
name-预期activity的名字
isNewInstance-可选项,实际activity是否是预期activity的继承,如果为true则只要是继承关系就通过,false则必须是当前activity
返回: 无

void assertMemoryNotLow()
断言目前系统可用内存是否过低,内存空间足够则通过

 

返回:无


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, ]  String text)

判断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 [, int timeout, boolean scroll])

等待某个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)

通过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识别,支持正则表达式

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值