APP自动化框架LazyAndroid使用手册(2)--元素自动抓取

作者:黄书力

概述

前面的一篇博文简要介绍了安卓自动化测试框架LazyAndroid的组成结构和基本功能,本文将详细描述此框架中元素自动抓取工具lazy-uiautomaterviewer的使用方法。
uiautomatorviewer是谷歌在Android4.1及之后的版本中发布的一个用来扫描和分析Android应用程序的UI组件的GUI工具。
使用uiautomatorviewer,可以查看应用的UI布局、组件以及相关的属性。

lazy-uiautomatorviewer**是在uiautomatorviewer的基础上进行二次开发,添加了以下新功能的安卓App页面元素抓取工具:

  1. xpath生成
  2. xpath控件搜索确认
  3. 页面xpath自动一键抓取导出(单个控件或批量)
  4. 选择性抓取导出并自动生成java代码

使用方法

下载和启动

1.下载并安装安卓环境

为了使用uiautomatorviewer,首先需要下载并安装安卓环境(4.1+的SDK),方法大家可以自行百度。

2.替换jar包

将lazy-uiautomatorviewer 源码编译生成的jar包uiautomatorviewer.jar拷贝到安卓安装目录下的
\android-sdk\tools\lib 文件夹中替换掉原来的uiautomatorviewer.jar包。

jar包下载地址:

http://download.csdn.net/detail/kaka1121/9685936

lazy-uiautomatorviewer源码下载地址:

https://github.com/lazytestteam/lazyuiautomatorviewer;

3.启动lazy-uiautomatorviewer
      双击安卓安装目录下的 \android-sdk\tools\uiautomatorviewer.bat 文件,启动lazy-uiautomatorviewer。

这里写图片描述

演示

      这里以京东钱包apk某个发行版为例进行演示。手机打开app,连上电脑后,通过uiautomatorviewer.bat启动抓取工具,单击如图所示的按钮1,进行截屏,即可看到下图。

图一

图中的标记:

1是截屏,是uiautomaterviewer原生的功能,是所有后续功能的基础;
2是一键导出所有控件的xpth并生成java代码;
3是选择部分控件导出;
4是鼠标移动到控件上的示例;
5是控件xpath搜索,用于验证xpath能否唯一定位控件的;
6是鼠标悬停或单击控件后显示对应的xpath。

1.一键导出页面内所有控件xpath

单击上图所示的按钮2,会弹出文件保存的路径选择框。选择路径,输入文件名后,点击保存,会将当前页面的控件xpath及其变量定义全部导出到java文件中。

图二

      由于上图所示页面控件较多,导出的文件中变量较多,不便于展示代码。切换到京东钱包的登录页,一键导出的java文件是这样的:

package test.java.bean;
import lazy.android.annotations.*;
import lazy.android.bean.BaseBean;
import lazy.android.controls.*;
import io.appium.java_client.AppiumDriver;


/**
 * Gennerated by lazyUiautomaterViewer.
 */
public class LoginBean extends BaseBean{

    @Xpath(xpath={"//android.widget.TextView[@resource-id='com.wangyin.payment:id/txt_main_title']"})
    @Description(description="登录")
    public  PlainText  textView1;

    @Xpath(xpath={"//android.view.View[@resource-id='com.wangyin.payment:id/view_divider_line']"})
    @Description(description="")
    public  View  view1;

    @Xpath(xpath={"//android.widget.ScrollView[@resource-id='com.wangyin.payment:id/fragment_container']"})
    @Description(description="")
    public  View  scrollView2;

    @Xpath(xpath={"//android.widget.RadioGroup[@resource-id='com.wangyin.payment:id/main_footbar_menu']"})
    @Description(description="")
    public  View  radioGroup3;

    @Xpath(xpath={"//android.widget.RadioButton[@resource-id='com.wangyin.payment:id/login_tab_phone']"})
    @Description(description="钱包账户")
    public  Click  jdpayAccount;

    @Xpath(xpath={"//android.widget.RadioButton[@resource-id='com.wangyin.payment:id/login_tab_jd']"})
    @Description(description="京东账户")
    public  Click  jdAccount;

    @Xpath(xpath={"//android.widget.LinearLayout[@resource-id='com.wangyin.payment:id/layout_login_jd']/android.view.View[1]"})
    @Description(description="")
    public  View  view4;

    @Xpath(xpath={"//android.widget.EditText[@resource-id='com.wangyin.payment:id/cp_input_combox_jd']"})
    @Description(description="京东商城手机号/用户名/邮箱")
    public  Text  editTextUserName;

    @Xpath(xpath={"//android.widget.TextView[@text='账号']"})
    @Description(description="账号")
    public  PlainText  textView2;

    @Xpath(xpath={"//android.widget.ImageView"})
    @Description(description="")
    public  View  imageView5;

    @Xpath(xpath={"//android.widget.EditText[@resource-id='com.wangyin.payment:id/cp_input_pwd']"})
    @Description(description="")
    public  Text  editJDTextPwd;

    @Xpath(xpath={"//android.widget.TextView[@text='密码']"})
    @Description(description="密码")
    public  PlainText  textView3;

    @Xpath(xpath={"//android.widget.LinearLayout[@resource-id='com.wangyin.payment:id/layout_login_jd']/android.view.View[2]"})
    @Description(description="")
    public  View  view6;

    @Xpath(xpath={"//android.widget.Button[@resource-id='com.wangyin.payment:id/btn_login_jd']"})
    @Description(description="登 录")
    public  Click  buttonLogin;

    @Xpath(xpath={"//android.widget.TextView[@resource-id='com.wangyin.payment:id/txt_jd_register']"})
    @Description(description="注册京东账户")
    public  PlainText  textView4;

    @Xpath(xpath={"//android.widget.TextView[@resource-id='com.wangyin.payment:id/txt_forget_pwd']"})
    @Description(description="忘记密码?")
    public  PlainText  textView5;

    @Xpath(xpath={"//android.widget.EditText[@resource-id='com.wangyin.payment:id/cp_input_combox_wy']"})
    @Description(description="请填写手机号")
    public  Text  editTextPhone;

    @Xpath(xpath={"//android.widget.TextView[@text='手机号']"})
    @Description(description="手机号")
    public  PlainText  textViewPhone;  

    @Xpath(xpath={"//android.widget.Button[@resource-id='com.wangyin.payment:id/btn_login']"})
    @Description(description="下一步")
    public  Click  nextStep;

    @Xpath(xpath={"//android.widget.EditText[@resource-id='com.wangyin.payment:id/cp_input_pwd']"})
    @Description(description="")
    public  Text  editjdPayTextPwd;

    @Xpath(xpath={"//android.widget.TextView[@text='密码']"})
    @Description(description="密码")
    public  PlainText  textViewPwd;

    @Xpath(xpath={"//android.widget.Button[@resource-id='com.wangyin.payment:id/btn_login']"})
    @Description(description="登 录")
    public  Click  jdpayLogin;

    public LoginBean(AppiumDriver aDriver){super(aDriver);}

}

package名大家使用的时候需要修改成自己的,
import的jar包前3个是lazyAndroid的(下载地址:https://github.com/lazytestteam/LazyAndroid),第4个是AppiumDriver的(可以自行百度下载)。
文件末尾的 public LoginBean(AppiumDriver aDriver){super(aDriver);} 是自动生成的类的构造函数,用于实例化AppiumDriver。

2.导出部分控件xpath

这里写图片描述

单击图一所示的按钮3,会弹出如下图所示的控件选择窗口(控件-变量定义窗口);
鼠标选停到左边截图中的某个控件上时,控件选择窗口中的xpath和Description(如果没有的话,就不会显示)会跟随变化;
输入ControlName(控件的变量名字)后,点击“添加控件”按钮,即可加入到右边的已选控件栏;
在已选控件栏,单击已选中的某个控件,可以重新修改或删除;
控件选择完成后,点击“导出到文件”即可导出本页面已选中的控件的代码(基于xpath定义的变量;
导出的java文件和一键导出的文件类似,只是控件的数量精简一点了;

3.xpath搜索

做自动化时时常会遇到xpath无法定位到元素或者无法唯一定位一个元素的情况。使用本工具,可以方便快捷地验证xpath是否能唯一定位目标控件。

使用方法:打开app目标页面,截图,在如下所示输入框中输入xpath后,点击搜索按钮,该xpath对应的目标页面就会用红色的框框标注起来了。如果匹配到多个控件,就会在左边的页面中看到多个红色框框了

这里写图片描述

总结

      该工具能大大节省安卓UI自动化实施过程中需要针对每个控件需要单独抓取xpath的时间,使QA只需要专注于测试逻辑的设计,需要使用哪个页面元素和控件,只需要直接使用LazyUiAutomatorViewer自动生成的对应变量即可,真正地使用面向对象的思想进行测试编码,极大地提高了安卓UI自动化测试的编码效率。
      导出的java文件可以直接导入到基于LazyAndroid的测试工程中进行使用,例子可参考文章《APP自动化框架LazyAndroid使用手册(4)–模板工程详解》(下载地址http://blog.csdn.net/kaka1121/article/details/53325265)和模板工程http://download.csdn.net/detail/kaka1121/9685943,也可以根据需要,仅选用其中的部分xpath使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨不羁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值