作为一个学习安卓的实习生,在年底找到了一个自动化测试的工作,虽然面试的时候跟我说的是开发。不过短暂的接触之后,发现它也有一些有趣的内容,现在写一下博客,记录一些所学内容和容易出错的地方,都是很基础入门的内容,有一部分来自网络,望大神们多多指教和提点。

首先是查看uiautomator工具的用法,这个工具主要是用来定位到手机上的一些控件,然后通过Java代码获得这些控件并对这些控件进行操作。uiautomator基本上下载完sdk里面都会有,在tools文件夹下面,我的目录是:C:\Users\zyc\Desktop\adt-bundle-windows-x86_64-20140702\sdk\tools。进入后找到该文件夹下的uiautomatorviewer.bat,点击之后出现如下图所示:

点击右边的  第二个,点击完成后会出现如下图:

此时点击图片上的任一图标或者控件,右下角会有唯一对应的或resource-id 或text 或content-desc等 这就是我们用来定位控件的依据。

接下来,就可以开始写我们的代码了,写代码前,先了解一下uidevice的一些用法和方法,下面部分参考网络:

UiDevice
代表设备状态。在测试中,可以通过UiDevice实例来检测设备的各种属性,
例如当前的屏幕方向以及屏幕尺寸。同时还可以通过UiDevice实例来执行设备级别的操作,
例如 把设备设置为横屏或者竖屏、按下Home按键等。
例:getUiDevice().pressHome();      //模拟按下home键操作
例:getUiDevice().pressBack();      //模拟按下back键操作
 
UiSelector
代表一个搜索UI控件的条件。如果发现多个满足条件的控件则会返回第一个控件。
返回的结果为UiObject对象。在构造UiSelector的时候可以 组合使用多个属性来定位具体的控件。
如果没有找到控件则会抛出 UiAutomatorObjectNotFoundException 异常

UiObject
代表一个UI控件。通过UiSelector来查找UiObject。

UiCollection
代表控件的集合。获取UiCollection的方式和UiObject一样,通过 UiSelector查找。
 UiCollection对应Android系统中的ViewGroup以及子控件。比如界面中有多个check时,
我们要使用classname获取当前界面中所有的checkbox,就可以使用UICollection来接收获取到的控件集合
 
UiScrollable
代表可滚动的控件。可以用UiScrollable来模拟水平或者垂直滚动的UI元素。
如果需要操作的元素在屏幕外需要滚动屏幕才能看到的情况下需要使用UiScrollable

一、控件定位类:

控件定位属于android自动化中比较常用的,uiautomator可以使用resource-id,
文本,index,classname(控件类型),伪xpath

通过文本定位:

UISelector().text方法
例:textview = new UiObject(new UiSelector().text("user info"));
该方法通过直接查找当前界面上所有的控件来比较每个控件的text属性是否如参数值来定位控件,
挺好理解的,所以就没有必要细说了。

UISelector.textContains方法
例:addNote = new UiObject(new UiSelector().textStartsWith("user"));
此方法跟以上方法类似,但是不需要输入控件的全部text信息

通过resource-id定位:
UISelector().resourceId方法
例:UiObject lb=new UiObject(new UiSelector().resourceId
("com.cleanmaster.mguard:id/relativeLayoutBtns"));
resource-id可以通过android_sdk tools目录下的uiautomatorviewer工具查看

通过classname定位:
UiSelector().classname方法
例:UiCollection list=new UiObject(new UiSelector().className("android.widget.CheckBox"));
 
通过伪xpath定位:
UISelector类提供了一些方法根据控件在界面的XML布局中的层级关系来进行定位,
但是UIAutomator又没有真正的提供类似Appium的findElementWithXpath相关的方法,
所以这个位置我们叫它伪xpath,其实就是通过层级一层一层去定位控件,
通常用于Listview中定位id相同的控件

UiSelector.fromParent或UiObject.getFromParent方法
例:UiObject uio=new UiObject(new UiSelector().text("Cache junk").
fromParent(new UiSelector().className("android.widget.CheckBox")));

通过UiSelector.childSelector或UiObject.getChild方法
刚才是一个通过孩子找父亲再找兄弟的思路,那么这个方法就是我知道你爸爸是谁,我直接通过你爸爸找到儿子
例:UiObject parentView = new UiObject(new UiSelector().className("android.view.View"));
save = parentView.getChild(new UiSelector().text("Save"));

然后是uidevice的一些方法:

uidevice.pressBack(); 模拟点击设备返回键

uidevice.pressHome();模拟点击设备home键

uidevice.pressEnter();  模拟点击设备回车键

uidevice.pressDelete();模拟点击设备删除键

//旋转屏幕(向左旋转)

UiDevice.getInstance().setOrientationLeft();

//小写字母
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_A);

//大写字母
UiDevice.getInstance().pressKeyCode(KeyEvent.KEYCODE_B,1);
//点击固定点
UiDevice.getInstance().click(200, 830);
//获取屏幕高和宽
int h=UiDevice.getInstance().getDisplayHeight();
int w=UiDevice.getInstance().getDisplayWidth();
UiDevice.getInstance().click(w/2, h/2);

//获取包名

System.out.println(UiDevice.getInstance().getCurrentPackageName());

//打开通知栏

UiDevice.getInstance().openNotification();

//打开快速设置

UiDevice.getInstance().openQuickSettings();

//获取xml布局文件 /data/local/tmp 存放位置

UiDevice.getInstance().dumpWindowHierarchy("abc.xml");

//截图

public void testJieTu(){

File storePath=new File("/sdcard/test.png");

UiDevice.getInstance().takeScreenshot(storePath);

}

以下参考网络:http://www.cnblogs.com/kllay/p/5692094.html  点击与长按方面的方法:

举例:UiObject ok = new UiObject(new UiSelector().text("OK"));//声明对象
         ok.click();//点击"OK" text.

1.public boolean click() 点击对象

2.public boolean clickAndWaitForNewWindow(long timeout) 点击对象,等待新窗口出现,
参数为等待超时时长

3.public boolean clickAndWaitForNewWindows() 点击对象,等待新窗口出现

4.public boolean clickBottomRight() 点击对象的右下角

5.public boolean clickTopLeft() 点击对象的左上角

6.public boolean longClick() 长按对象

7.public boolean longClickBottomRight() 长按对象的右下角

8.public bolean longClickTopLeft() 长按对象的左上角

拖拽与滑动方面的方法:

举例:UiObject answerCall = new UiObject(new UiSelector().textStartWith("右滑接听"));
   nswerCall.swipeRight(10);

1.public boolean dragTo(UiObject destObj, int steps)

   拖拽对象到另一个对象上,步长可设置拖动的速度,步长越小,拖动速度越快。

2.public boolean dragTo(int deskX, int deskY, int steps)

    拖拽对象到屏幕某个坐标位置上,步长可设置拖动速度

3.public boolean swipeDown(int steps)

    拖动对象往下滑

4.public boolean swipeLeft(int steps)

    拖动对象往左滑

5.public boolean swipeRight(int steps)

    拖动对象往右滑

6.public boolean swipeUp(int steps)

    拖动对象往上滑

输入文本与清除文本方面的操作:

举例:UiObject inputMessage = new UiObject(new UiSeletor().text("Please inout message content"));

   inputMessage.setText("Message Test") //在短信编辑框中输入文本内容

   UiObject clearMessage = new UiObject(new UiSelector().text("Message Test"));

   clearMessage.clearTextField(); //输入完后清除短信编辑框文本内容

1.public boolean setText(String text) 在对象中输入文本

2.public boolean clearTextField() 清除编辑框文本

获取对象属性方面的方法:

举例:UiObject getTextObject = new UiObject(new UiSelector().className(android.widget.TextView)) 
      //获取第一个textView
      String textrString = getTextObject.getText(); //获得textView的文本

1. public rect getBounds()

    获取对象矩形坐标,矩形坐标左上角与右下角坐标。

2.public UiObject getChild(UiSelector selector)

    获取对象的子类对象,可以递归获取子孙当中的某个对象

3.public int getChildCount()

    获得下一级子类的数量

4.public String getClassName()

    获得对象类名属性的类名文本

5.public String getContentDescription()

    获得对象的描述属性的描述文本

6.public UiObject getFromParent(UiSelector selector)

    从父类获取子类,按照uiselector获取兄弟类

7. public String getPackageName()

    获取对象包名属性的包名文件

8.public final UiSelector getSelector()

    获取selector用于调试

9.public String getText()

    获取对象的文本属性中的文本

属性判断方面的方法:

举例:UiObject inpputTextObject = new UiObject(new UiSelector().className(
"android.widget.Switch")); //声明开关对象

if(inputTextObject.isChecked())

  {

    inputTextObject.click(); //如果开关是开,则点击关闭。

  }

1.public boolean isCheckable() 检查对象的checkable属性是否为true

2.public boolean isChecked() 检查对象的checked属性是否为true

3.public boolean isClickable() 检查对象的clickable属性是否为true

4.public boolean isEnabled() 检查对象的enable属性是否为true

5.public boolean isFocusable() 检查对象的focusable属性是否为true

6.public boolean isLongClickable() 检查对象的longClickable属性是否为true

7.public boolean isScrollable() 检查对象的scrollable属性是否为true

8.public boolean isSelected() 检查对象的selected属性是否为true

手势操作方面的方法:

举例:

UiObject framObject = new UiObject(new UiSelector().className("android.widget.FrameLayout"));

PointerCoords p = new PointerCoords();

  p.x = 500;

  p.y= 500;

  p.pressure = 1;

  p.size = 1;

  PointerCoords p1 = new PointerCoords();

  p1.x = 600;

  p1.y= 600;

  p1.pressure = 1;

  p1.size = 1;

  PointerCoords p2 = new PointerCoords();

  p2.x = 500;

  p2.y=500;

  p2.pressure = 1;

  p2.size = 1;

  frameObject.performMultiPointerGesture(p,p1,p2);

1.public boolean performTwoPointerGesture(Point staretPoint1, 
Point statsPoint2, Point endPoint1, Point endPoint2, int steps)

    执行任意两个手指触控手势,模拟两个手指手势

2.public boolean pinchIn(int precent, int steps)

    手势操作,两点向内收缩

3.public boolean pinchOut(int percent, int steps)

    手势操作,两点向外张开

4.public boolean performMultiPointerGesture(PointerCoords... touches)

    执行单手指触手势,可定义任意手势与形状

判断对象是否存在、是否出现与是否消失方面的方法:

  举例:

  Runtime.getRuntime().exec(am start -n com.android.calculator2/com.android.
        calculator2.Calculator); // 打开计算机

  UiObject addObject = new UiObject(new UiSelector().text("+)); //计算机界面"+"对象

  addObject.waitForExists(10000);

总结:

  1.声明UiOject对象后,不管对象存不存在都不会有问题---先声明对象,后操作;

  2.当对象可能出现可能不出现的时候,需要对对象进行判断;

  1.public boolean waitForExist(long timeout) 等待对象出现

  2.public boolean waitUntilGone(long timeout) 等待对象消失

  3.public boolean exists() 检查对象是否存在

把这些消化完之后,接下来我就开始编写代码,并且把Java代码运行到android手机上,实现最基本的自动打开淘宝并登录功能,我在下一篇会写到:http://blog.csdn.net/qq_33223761/article/details/53848396。

yjh的实习生涯之自动化测试(1)---初识uiautomator(uiautomator的使用和基本方法)相关推荐

  1. yjh的实习生涯之自动化测试(2)---新建一个自动登录淘宝例子以及如何将java代码运行到手机上

    上一篇(http://blog.csdn.net/qq_33223761/article/details/53846914)我们了解了uiautomator的一些基本用法和方法,现在我们再来看看怎么创 ...

  2. 我的大学——实习生涯

    去年暑假旅行回来后,开始萌生要着手用在大学最后一年的时间来写完自己的大学回忆录.可在网易云音乐中搜索电台<PJHubs>收听语音版.此篇文章为第三篇,主要讲述了大学四年中,我所经历的工作. ...

  3. android ui自动化测试框架有哪些,自动化测试框架对比(UIAutomator、Appium、Robotium)...

    一.原理 1.UiAutomator--基于UIAutomation的用户界面自动化测试框架,可以跨应用工作,谷歌亲生的. Android4.3之前:使用inputManager或者更早的Window ...

  4. python360安全浏览器_使用python3.7 的pycharm selenium自动化测试中启动360浏览器、360极速浏览器的方法...

    写于:2019.01.02(实测日) 一.下载360浏览器或360极速浏览器的Chrome驱动 这里最好下载去官网下载最新版的浏览器,版本越新,越利于安装.在做自动化测试中不可能只用360浏览器,也会 ...

  5. 无实习经历的简历如何吸晴?简历劣势弥补的方法

    毕业后找工作,简历制作时缺失工作经历,如何弥补简历无经验的缺失呢?一份漂亮的简历外观对求职者来说也是非常重要的,可以去在线简历模板制作网站-脚步网中下载一款好看的简历模板,搞定漂亮的外表,开始填充精致 ...

  6. app自动化测试——app自动化控制、常见控件定位方法

    文章目录 一.app自动化控制 1.清理数据: 2.启动: 3.关闭: 二.常见控件定位方法 1.android知识 2.ios 基础知识 3.元素定位 4.控件基础知识 5.app dom 结构解析 ...

  7. 初识对象,对象的创建以及方法的定义规则

    目录 什么是对象 什么是类 定义属性 定义方法 方法的定义 总结 课后作业 什么是对象 对象:现实世界中客观存下的实体都是对象(只要你能看得见.摸得着的物体都是对象),由属性和方法组成.万事万物皆对象 ...

  8. 实习一年,自学从Java转向大数据开发

    大学如何自学java的文章: https://blog.csdn.net/CatchLight/article/details/112260371 第一份实习offer 专升本的第一学年末,凭借着自学 ...

  9. SAP成都研究院Sunshine:我的C4C实习感受和保研之路

    今天的文章来自SAP成都一位实习生,曾经和Jerry同在C4C成都开发团队一起工作过.在Sunshine最后一个工作日里,Jerry和Sunshine一起吃饭的时候,她曾经聊到接下来的保研打算和将来工 ...

最新文章

  1. 串口 发送 接收 高位_电工进阶PLC大神,必备PLC串口通讯的基本知识!
  2. 单片微型计算机系统应用和开发特点,单片微机原理及应用 徐春辉 电子工业出版社习题答案.doc...
  3. spring系列-注解驱动原理及源码-声明式事务使用及原理解析
  4. monk js_使用Monk AI进行手语分类
  5. 二叉树知识点最详细最全讲解
  6. solution for python can not import local module
  7. Educoder Basemap和Seaborn 第一关:Seaborn
  8. leetcode[541]翻转字符串里的单词/reverse words in a string 综合考察了字符串的多种操作
  9. Captaris WorkFlow的开发和部署
  10. leetCode题解之寻找string中最后一个word的长度
  11. python数字大小写转换代码_把金额小写转换成大写的Python代码
  12. 第一次安卓作业笔记:一个星座查询app
  13. 如何利用matlab根据excel画三维图像
  14. iOS - MFi 认证
  15. excel表格如何转换成word表格_Word如何制作表格?Word制作表格超实用技巧
  16. 人工智能阿发狗技术都包含哪些内容
  17. 能让3D打印自动支撑和减少压力积累的云软件
  18. 2012年上半年信息系统项目管理师 上午试题和参考答案及解析
  19. 晨读一年的复盘会议_一年后,在家中远程办公,网真和视频会议
  20. Exercise 35: 分支和函数

热门文章

  1. 电子邮件内容安全刻不容缓
  2. GitChat · 人工智能 | 如何零基础用 Keras 快速搭建实用深度学习模型
  3. SolidWorks如何更改二维图纸中的标注样式
  4. Macbook Pro M1安装Homebrew跟git安装
  5. d3成神之路(三):折线图
  6. linux的桌面卸载了怎么恢复,桌面应用|如何通过简单的3步恢复Windows 7同时删除Ubuntu...
  7. 【抗干扰代码】AVR单片机自动复位由于电压不足导致ENC28J60网卡出现的故障
  8. Android中级——色彩处理和图像处理
  9. 计算机图形学基础1——MVP变换
  10. 移动端app设计开发经验之设计篇