自动化测试实战教程(基于Python语言)(微课版)课件 第11章 认识移动app自动化测试工具-UI Automator2_第1页
自动化测试实战教程(基于Python语言)(微课版)课件 第11章 认识移动app自动化测试工具-UI Automator2_第2页
自动化测试实战教程(基于Python语言)(微课版)课件 第11章 认识移动app自动化测试工具-UI Automator2_第3页
自动化测试实战教程(基于Python语言)(微课版)课件 第11章 认识移动app自动化测试工具-UI Automator2_第4页
自动化测试实战教程(基于Python语言)(微课版)课件 第11章 认识移动app自动化测试工具-UI Automator2_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章

认识移动app自动化测试工具-UIAutomator2CATALOGUE目录11.1UIAutomator2环境搭建11.2

常见定位方式11.3常见API的使用方法11.4编译运行方式11.1

UIAutomator2环境搭建11.1.1什么是UIAutomator2工作原理:UIAutomator2的核心工作原理基于AndroidUI框架的访问和操作。它利用设备上的UI控件和属性来定位和识别屏幕上的元素。开发者可以编写测试脚本,使用UIAutomator2提供的API来模拟用户操作,如点击按钮、输入文本、滑动列表等。这些操作会被执行,并且测试框架会捕获应用的反馈,比如UI的变化、事件的触发、数据的加载等,以验证应用的行为是否符合预定的测试用例。11.1.1什么是UIAutomator2工作原理:UIAutomator2的核心工作原理基于AndroidUI框架的访问和操作。它利用设备上的UI控件和属性来定位和识别屏幕上的元素。开发者可以编写测试脚本,使用UIAutomator2提供的API来模拟用户操作,如点击按钮、输入文本、滑动列表等。这些操作会被执行,并且测试框架会捕获应用的反馈,比如UI的变化、事件的触发、数据的加载等,以验证应用的行为是否符合预定的测试用例。11.1.1什么是UIAutomator2特点:跨版本兼容性:UIAutomator2支持多个版本的Android系统,使得在不同版本的设备上进行测试成为可能。强大的UI元素定位:它提供了多种方法来查找和定位UI元素,包括ID、文本、属性等,确保了测试脚本的精确性。灵活的脚本编写:支持使用多种编程语言编写测试脚本,如Java、Kotlin等,使得测试脚本的编写更加灵活和高效。并发执行能力:UIAutomator2能够同时在多个设备上执行测试脚本,大大提高了测试的效率。集成其他测试工具:它可以与其他测试框架和工具集成,如Espresso、Appium等,以实现更复杂的测试需求。丰富的API和工具:UIAutomator2提供了丰富的API和工具,帮助开发者进行更深层次的UI测试,包括对通知、权限、多窗口模式等的支持。可视化测试:通过UIAutomator2的可视化工具,开发者可以直观地查看和分析UI布局,有助于更好地理解应用的UI结构和编写测试脚本。11.1.2UIAutomator2的环境搭建搭建Android环境参考第10章Appium环境搭建中Android环境搭建过程安装Android模拟器安装UIAutomator2参考第10章Appium环境搭建中介绍的雷电模拟器绿色版通过pip命令或IDE完成UIAutomator2和weditor的安装12311.1.2UIAutomator2的环境搭建>>安装UIAutomator21.

先通过pip命令完成UIAutomator2的安装,注意这里指定了版本,命令如下:

pipinstalluiautomator2==2.16.26

如果需要指定国内镜像才能完成uiautomator2下载安装,可以参考下面清华镜像的命令形式:pipinstalluiautomator2==2.16.26-ihttps://pypi.tuna.tsingh**./simple安装完后可以通过pipshowuiautomator2查看是否安装成功,如下所示即为成功:图11-1

uiautomator2安装成功的画面11.1.2UIAutomator2的环境搭建>>安装UIAutomator22.打开Android模拟器(雷电模拟器绿色版),运行CMD命令,在命令行窗口输入:python-muiautomator2init当运行结束时,雷电模拟器的桌面会生成一个ATX的小黄车图标,如下图所示:图11-1

在雷电模拟器安装ATX11.1.2UIAutomator2的环境搭建>>安装UIAutomator2点开后界面如右侧所示,在使用时一般不需要再修改配置图11-2ATX的设置界面11.1.2UIAutomator2的环境搭建>>安装UIAutomator23.开始安装WEditor。ATXWEditor是一个提供浏览器界面操作,用于移动应用自动化测试的辅助工具,特别针对Android平台。其主要功能如下:

元素定位与分析

脚本编写辅助

远程设备操作

调试代码

界面化操作由于安装0.6.5或以上版本的weditor可能会遇到下面编码错误:UnicodeDecodeError:‘gbk’codeccan’tdecodebyte0xadinposition825:illegalmultibytesequence为避免上面错误,这里直接安装0.6.4版本的WEditor,同时为了快速下载,使用了国内镜清华像源。pipinstallweditor==0.6.4-ihttps://pypi.tuna.tsingh**./simple11.1.2UIAutomator2的环境搭建>>安装UIAutomator24.启动Weditor,运行CMD在命令行输入下面命令内容:python-mweditor下面是打开的Weditor浏览器界面:图11-3

浏览器中打开的ATXWeditor界面11.1.2UIAutomator2的环境搭建>>安装UIAutomator25.在顶部设备输入框输入“emulator-5554”,点击Connect按钮,当连接成功后,点击按钮“DumpHierarchy”同步模拟器画面,显示画面如下:图11-4连接成功的ATXWeditor界面11.2

常见定位方式11.2常见定位方式1.ResourceID定位ResourceID

是Android开发过程中赋予每个UI组件的唯一标识符,通常在XML布局文件中定义。通过ResourceID定位元素是最直接且稳定的定位方式。示例如下:importuiautomator2asu2d=u2.connect(device_name)button=d(resourceId="com.example.app:id/login_button")button.click()在此例中,resourceId参数接收形如package_name:id/element_id的字符串,其中package_name是应用的包名,element_id是在XML布局文件中定义的该按钮的ID。Device()对象通过resourceId找到指定的按钮并执行点击操作。11.2常见定位方式2.Text内容定位

对于显示特定文本的UI元素,如按钮、文本视图等,可以直接根据其显示的文字内容进行定位。示例如下:importuiautomator2asu2d=u2.connect(device_name)agree_text=d(text="我同意隐私政策")agree_text.click()上述代码中,text参数用于匹配屏幕上所有包含“我同意隐私政策”文本的元素,选择第一个匹配项并触发点击事件。11.2常见定位方式3.Class属性定位

根据UI元素的类名(即控件类型)进行定位,适用于需要定位某一类特定控件的情况,如所有的EditText或Button。示例如下:importuiautomator2asu2d=u2.connect(device_name)all_edittexts=d(className="android.widget.EditText")first_edittext=all_edittexts[0]first_edittext.set_text("输入的内容")这段代码查找设备上所有类名为android.widget.EditText的元素(即文本输入框),选取第一个并设置其文本内容为“输入的内容”。11.2常见定位方式4.ContentDescription定位ContentDescription

是为无障碍功能(如TalkBack)设置的描述性文字,有时也用于自动化测试中的元素定位。示例如下:importuiautomator2asu2d=u2.connect(device_name)settings_icon=d(description="设置")settings_icon.click()

此例中,description参数用于匹配具有指定内容描述的元素,如一个带有“设置”描述的图标,然后对该图标进行点击。11.2常见定位方式5.Index索引定位

当同一类型的多个元素难以通过其他属性区分时,可以使用索引来定位它们在同级元素列表中的位置。importuiautomator2asu2d=u2.connect(device_name)list_items=d(className="android.widget.TextView",index=2)list_items.click()这里,index参数指定了在所有类名为android.widget.TextView的元素中选择第3个(索引从0开始)进行点击。11.2常见定位方式6.XPath定位XPath是一种在XML文档中定位节点的语言,uiautomator2支持通过编写XPath表达式来精确地定位UI元素。示例如下:importuiautomator2asu2d=u2.connect(device_name)complex_element=d.xpath('//android.widget.FrameLayout/android.widget.LinearLayout[2]/android.widget.Button')complex_element.click()上述代码使用XPath表达式定位嵌套结构中的特定按钮:从根节点开始,找到第一个FrameLayout,在其子元素中找到第二个LinearLayout,再在该LinearLayout的子元素中定位到所需的Button,最后执行点击操作。11.2常见定位方式7.组合属性定位

在实际应用中,单一属性可能不足以唯一确定一个元素,此时可以结合多个属性进行定位。示例如下:importuiautomator2asu2d=u2.connect(device_name)specific_button=d(className="android.widget.Button",resourceId="com.example.app:id/unique_button",text="确认")specific_button.click()这段代码同时使用className、resourceId和text三个属性来精确定位一个按钮,确保即使在复杂界面中也能准确找到并点击该按钮。11.2常见定位方式8.父元素与子元素关系定位

利用元素之间的父子关系进行定位,特别是在元素本身属性不唯一但其在某个独特上下文中的情况下。示例如下:importuiautomator2asu2d=u2.connect(device_name)parent_layout=d(className="android.widget.RelativeLayout",resourceId="com.example.app:id/container")child_button=parent_layout.child(className="android.widget.Button",text="提交")child_button.click()这里先通过resourceId和className定位到一个特定的RelativeLayout容器,然后在其子元素中查找具有指定text属性的Button按钮并点击。11.2常见定位方式9.SwipeSelector与RecyclerView定位

对于特殊控件如SwipeSelector和RecyclerView等滚动列表,uiautomator2提供了专用方法进行定位。这里以RecyclerView为例:importuiautomator2asu2d=u2.connect(device_name)recycler_view=d(className="androidx.recyclerview.widget.RecyclerView")target_item=recycler_view.child(index=5,className="android.widget.TextView",text="目标项")target_item.click()首先定位到RecyclerView,然后通过索引、类名和文本内容在其中定位到特定条目,并对其执行点击操作。11.3

常见API的使用方法11.2常见定位方式1.元素交互操作点击(click):点击指定元素。importuiautomator2asu2d=u2.connect(device_name)login_button=d(resourceId="com.example.app:id/login_button")login_button.click()长按(long_click):长按指定元素一定时间。login_button.long_click(duration=2000)#长按2秒输入文本(set_text):向文本输入框或可编辑区域设置文本。username_field=d(resourceId="com.example.app:id/username_edittext")username_field.set_text("test_user")11.2常见定位方式1.元素交互操作滑动(swipe):在屏幕或元素上执行滑动手势。#屏幕水平滑动d.swipe(start_x,start_y,end_x,end_y)#元素内部垂直滑动scrollable_view=d(resourceId="com.example.app:id/scroll_view")scrollable_view.swipe("up",steps=5)#向上滑动5步拖拽(drag):从一个点拖拽元素到另一个点。source_view=d(resourceId="com.example.app:id/source_view")target_view=d(resourceId="com.example.app:id/target_view")source_view.drag(target_['bounds']['centerX'],target_['bounds']['centerY'])11.2常见定位方式2.元素状态查询获取属性值(get_attribute):获取元素的特定属性值,如文本、可见性等。title_text=d(resourceId="com.example.app:id/title").get_attribute('text')d(resourceId="com.example.app:id/settings_button").get_attribute('visible')检查元素是否存在(exists):判断元素是否存在于当前视图中。ifd(resourceId="com.example.app:id/success_message").exists:print("Successmessageisdisplayed.")else:print("Successmessagenotfound.")等待元素出现(wait_exists):阻塞直到指定元素出现在屏幕上,或超时返回。d(resourceId="com.example.app:id/loading_indicator").wait_exists(timeout=10000)11.2常见定位方式3.其他实用API截图(screenshot):保存当前屏幕快照到指定路径。d.screenshot("/path/to/save/screenshot.png")设备信息与操作:(1)设备旋转(rotate):改变设备方向。d.rotate(orientation='landscape')#改为横向(2)获取设备信息(info):获取设备的详细信息,如屏幕尺寸、当前应用包名等。device_info=print(device_info['displayWidth'],device_info['displayHeight'])(3)清除应用数据(clear_app_data):清理指定应用的数据。d.clear_app_data("com.example.app")11.4

编译运行方式11.4编译运行方式一个计算器计算的实例device_name='emulator-5554'app_package="com.youba.calculate"d=u2.connect(device_name)#连接

安卓设备

用adbdevices查看pid=d.app_wait(app_package)#等待应用运行,returnpid(int)apk_path=os.path.abspath(os.path.join(os.path.dirname(__file__),".."))#获取当前项目的根路径apk_file="\\u2_demo\\com.youba.calculate10.apk"#获取待测apk文件路径#判断apk是否已安装ifnotd(packageName=app_package).exists:#安装apkd.app_install(apk_path+apk_file)ifpid:#如果app应用进程存在,先停止该appprint(app_package,"pidis%d"%pid)d.app_stop(app_package)11.4编译运行方式一个计算器计算的实例device_name='emulator-5554'app_package="com.youba.calculate"d=u2.connect(device_name)#连接

安卓设备

用adbdevices查看pid=d.app_wait(app_package)#等待应用运行,returnpid(int)apk_path=os.path.abspath(os.path.join(os.path.dirname(__file__),".."))#获取当前项目的根路径apk_file="\\u2_demo\\com.youba.calculate10.apk"#获取待测apk文件路径#判断apk是否已安装ifnotd(packageName=app_package).exists:#安装apkd.app_install(apk_path+apk_file)ifpid:#如果app应用进程存在,先停止该appprint(app_package,"pidis%d"%pid)d.app_stop(app_package)11.4编译运行方式一个计算器计算的实例#获取屏幕宽度和高度width,height=d.window_size()[0],d.window_size()[1]print('屏幕的宽和高:',width,height)d.implicitly_wait(10.0)#启动APP,stop=True表示启用应用前停止应用,获取包名:adbshelldumpsyswindow|findstrmCurrentFocus获取{.../...}斜杠/前面的包名d.app_start(app_package,stop=True)#获取1d(resourceId="com.youba.calculate:id/btn_one").click();sleep(1)#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论