【学以致用】android功能实现3---UIautomator 2.0(2)

来源:互联网 发布:淘宝先锋乒羽商城 编辑:程序博客网 时间:2024/06/05 22:59

上一部分提到:自动化测试可以简单分为获取测试工具,找到交互目标,进行操作行为,判断操作结果。这么4步,并且讲解了第一步UiDevice的初始化和使用。

 

接来下讲解后面3步:

 

2.找到交互目标:

 

交互目标常用有2种,UiObjectUiScrollable,分的对应着不用滑动的操作目标和需要滑动的操作目标。

 

UiObject是属于UIautomator,而UiObject2则是属于UIautomator 2.0

UiObject2正常情况是通过UiDevice来寻找。

UiObject2 x= mDevice.findObject(BySelector);

 

从代码可以看到,第二步的重点是BySelector的查找,找到正确的目标,则x代表目标进行操作。

 

下面列举了14中比较常用的方式,其中最常用的是By.text By.clazz By.pkg By.res四种。

 

分别是显示的文字、组件的类名、文件的包名、在布局中的id名字,这四种基本涵盖所有的内容。

 

1By.textContains(String substring)通过text包含字符进行选取

2By.textStartsWith(String substring)通过text第一个字符进行选取

3By.textEndsWith(String substring)通过text最后一个字符进行选取

4By.text(String substring)通过text文本进行选取

5By.text(Pattern textValue)通过text正则式进行选取

 

6By.clazz(String className)通过class名称进行先取

7By.clazz(String packageName, String className)通过package/class名称进行选取

8By.clazz(Class clazz)通过class进行选取

9By.clazz(Pattern className)通过正则class名称进行选取

 

10By.pkg(String applicationPackage)通过package名称进行选取

11By.pkg(Pattern applicationPackage)通过正则package名称进行选取

 

12By.res(String resourceName)通过resource-id进行选取

13By.res(String resourcePackage, String resourceId)通过package,resource-id名称进行选取

14By.res(Pattern resourceName)通过正则resource-id进行选取

 

 

14个只要填写了括号里面的内容,就形成了BySelector,

 

比如:

UiObject2 canlendar= mDevice.findObject(By.text(“日历”));

就寻找到了桌面上的canlendar的文件。如果桌面上有多个名为日历的文件,则寻找到的是BySelector找到的第一个。

 

于是对应的寻找就有找好几个的策略,比如短信应用里面有好几个名字为“领导”的短信,那么,

UiObject2 canlendar= mDevice.findObject(By.text(“领导”)); 

是找到第一个名为领导的目标。

List <UiObject2> canlendarList= mDevice.findObjects(By.text(“领导”)); 

则是所能找到的所有名为领导的目标群,区别在于mDevice后面跟的是findObject还是findObjects。寻找目标群体则多一个s

 

对于canlendar,还可以获取其子部件:

getChildCount()获取其子部件的个数

getChildren()获取子部件的集合

还有一种获取的方案wait(UiObject2Condition<R> condition, long timeout),是指获取的时候,可以等待一段时间。

 

UiScrollable是获取可以滑动的目标,和UiObject2的区别,体现在第三部进行操作行为。

UiScrollable是使用UiSelector来获取目标,UiSelectorBy,在使用上换汤不换药。也是通过显示的文字、组件的类名、文件的包名、在布局中的id名字等待来获取

 

new UiScrollable(new UiSelector().text( “xx” ));

new UiScrollable(new UiSelector().clazz( “com.android.xxx” ));

new UiScrollable(new UiSelector().pkg( “xxx” ));

new UiScrollable(new UiSelector().resourceIdMatches( “id” ));

 

其实UiAutomator2.0是在UiAutomator进行了优化的行为。

同样,BySelector也是比UiSelector更加优化的代码。

 

在使用时,建议优先选择UiObject2 x= mDevice.findObject(BySelector);

仅在面临带有多样化滑动操作时,才使用UiScrollable。

原创粉丝点击