找回密码
 会员注册
查看: 28|回复: 0

Python控制安卓模拟器——uiautomator2模块

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
72033
发表于 2024-9-8 10:53:08 | 显示全部楼层 |阅读模式
Python控制安卓模拟器——uiautomator2模块目录Python控制安卓模拟器——uiautomator2模块介绍【1】安装python【2】安装adb1]下载[adb:[2]配置环境变量【3】安装uiautomator2【4】连接设备(安卓模拟器)【5】u2指令控制设备常用指令【6】安装weditor【7】元素操作元素属性控制元素【8】adb常用命令介绍uiautomator2是一个自动化测试开源工具,仅支持Android平台的原生应用测试。大致流程分为:Python端:运行脚本,向移动端发送HTTP请求移动端:安装atx-agent,然后atx-agent启动uiautomator2服务进行监听,并识别Python脚本,转换为uiaotomator2代码连接方式:移动设备需要通过WIFI(同一网段)或USB连接才能接收到PC端发来的请求准备工具:python,uiautomator2,adb,weditor【1】安装python安装python:【2】安装adb[1]下载adb:需要翻墙下载完成后直接解压安装包[2]配置环境变量1.打开电脑的设置,选择“高级系统设置”后,再点击“环境变量设置”2.选择系统变量中的“PATH”3.将解压后的adb文件地址,配置在环境变量中。(如果需要配置AndroidSDK中的ADB,那么地址就是“{AndroidSDK安装地址}/android_sdk/platform-tools/”)4.配置成功后保存,在命令行输入“adb”,输出结果如下,则代表adb已安装成功。【3】安装uiautomator2pip安装pipinstalluiautomator21【4】连接设备(安卓模拟器)首先需要将设备调成开发者模式本次案例使用的是逍遥模拟器然后Python终端为手机下载atx-agentpython-muiautomator2init#手机端安装ATX1这条信息表明此时已成功初始化了一个AdbDevice对象,序列号为127.0.0.1:21513接下来就可以通过使用AdbDrvice对象来对设备进行各种操作出现小黄车就代表所有的准备环节都已经成功【5】u2指令控制设备连接设备之后还有一步操作:安卓设备打开atx小黄车启动u2服务常用指令importuiautomator2asu2#连接设备device='127.0.0.1:21513'd1=u2.connect(device)#设备信息print(d1.info())#当前运行中的app示例:{'package':'com.yokaverse.zzxy','activity':'org.cocos2dx.lua.AppActivity'}print(d1.app_current())#所有运行中的app示例:['com.github.uiautomator','com.android.defcontainer']print(d1.app_list_running())#安装应用url='https://zzxyipa.sanguosha.com/app/ygame_1001501_1001501000001.apk'd1.app_install(url)#启动应用(传入包名)app_pack='com.yokaverse.zzxy'd1.app_start(app_pack)#启动应用(传入app名)app_name='微信'd1(text=app_name).click()#显示分辨率x,y=d1.window_size()[1],d1.window_size()[0]#单击d1.click(x,y)#双击d1.double_click(x,y)#拖拽(start_x/start_y:起始x坐标/起始y坐标)(end_x/end_y:终点x坐标/终点y坐标)#duration:滑动所需时间,默认0.5sd1.drag(start_x,start_y,end_x,end_y,duration=0.5)#截图#获取绝对路径的上级目录(当前文件夹)target_path=os.path.dirname(os.path.abspath(__file__))target_path=os.path.join(target_path,'屏幕截图')os.makedirs(target_path,exist_ok=True)d1.screenshot(f'{target_path}/img.png')123456789101112131415161718192021222324252627282930313233343536373839404142434445【6】安装weditor注:weditor一般配合其他测试框架使用,通常用于元素定位和生成代码吐槽一句,这个工具bug很多,如果测试环境需要定位的元素并不复杂那么不用也行,可以配合坐标定位和图像定位(OpenCV)使用#可能会安装失败pipinstall-ihttps://pypi.douban.com/simpleweditor#豆瓣安装pipinstall--pre-Uweditor#上面如果安装失败的话直接安装指定版本0.6.4/0.6.3pipinstall--upgradeweditor==0.6.4123456安装成功后直接在控制台输入:weditor1接着会自动打开浏览器如果设备为成功链接请先在终端输入adb指令查看设备是否连接adbdevicers1【7】元素操作元素属性凡是能被WEditor采集到的元素都能进行操作属性描述activity表示应用程序当前所处的活动(Activity),通常由包名和活动名组成,用于唯一标识应用程序中的不同页面或界面XPathLite指定该元素的XPathLite表达式,可用于定位元素坐标%px给出元素在屏幕上的相对坐标位置(百分比),用于指示元素的位置className表示元素的类名,即该元素所属的控件类别index表示元素在当前层级结构中的索引位置,用于区分具有相同属性的多个元素text表示元素的文本内容,即显示在元素上的文字信息package表示应用程序的包名,用于唯一标识应用程序description对元素的描述信息,可能包含更多关于元素的补充说明或属性信息checkable表示元素是否可被选中(例如复选框)clickable表示元素是否可被点击enabled表示元素是否处于启用状态focusable表示元素是否可获得焦点focused表示元素是否当前具有焦点scrollable表示元素是否可以滚动longClickable表示元素是否支持长按操作password表示元素是否是密码字段(例如输入密码时会显示为星号)selected表示元素是否被选中rect表示元素的坐标位置控制元素与刚刚的鼠标操作不同,我们还可以利用元素操作配合weditor进行定位和控制我们以逍遥市场为例importuiautomator2asu2#连接设备device='127.0.0.1:21513'd1=u2.connect(device)###获取当前界面的XML层次结构信息print(d1.dump_hierarchy())###根据text定位获取特定app的信息print(d1(text="逍遥市场").info)###根据index定位获取特定app的信息print(d1(index=4).info)#根据className获取元素信息print(d1(className='android.widget.TextView').info)#根据Xpath定位d1_xpath=d1.xpath('//*[@resource-id="com.android.chrome:id/search_box_text"]')#输入文本d1_xpath.set_text('Hello')12345678910111213141516171819202122【8】adb常用命令adbdevices#查看当前设备adbshellpmlistpackages#查看手机里面所有包名adbshellpmlistpackages-3#查看手机里面所有第三方包名adbshelldumpsysactivityactivities#该命令的功能是获取当前正在被操作的app的activity相关信息adbshellpmclearcom.ablesky.ui.activity#清除缓存数据#启动程序#格式:常规命令+包名/activity#注意:appActivity返回值本来是com.jingdong.app.mall/.main.MainActivity,需要去掉中间的反斜线!adbshellamstart-ncom.jingdong.app.mall/com.jingdong.app.mall.MainFrameActivityadbshellpmclearcom.jingdong.app.mall#关闭程序并且清除所有数据,相当于重新安装adbshellamforce-stopcom.jingdong.app.mall#停止运行程序adbshell"ps|grepcom.jingdong.app.mall"#查看程序进程,判断是否运行adbshell/system/bin/screencap-p/sdcard/xx.png#截频并保存文件在手机上为xx.Pngadbpull/sdcard/xx.pngD:/xx.png#将手机xx.png文件保存到D盘文件下adbpushD:/xx.text/adcard/xx.text#将电脑文件导入手机adbshellscreenrecord/sdcard/demo.mp4#录制视频adbshellinputtext123#输入内容adbshellinputkeyevent4#按键操作#4返回操作#1菜单#3主页#21光标左移#22光标右移#67删除#61tabadbshellinputtap282923#点击某个坐标adbshellinputswipe3001000300500#下滑500pxadbshellinputswipe2889292889291000#长按1000ms12345678910111213141516171819202122232425262728293031323334
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 23:04 , Processed in 0.430589 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表