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

上一部分提到:自动化测试可以简单分为获取测试工具,找到交互目标,进行操作行为,判断操作结果。这么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。

猜你喜欢

转载自blog.csdn.net/dax120/article/details/78679970