概述这篇文章主要介绍了python UIAutomator2使用超详细教程,本文给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值需要的朋友可以参考下目录一、环境要求二、介绍三、库地址四、安装五、应用及操作一、环境要求python 3.6android 4.4二、介绍uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库。其底层基于Google uiautomatorGoogle提供的uiautomator库可以获取屏幕上任意一个APP的任意一个控件属性并对其进行任意操作。三、库地址GitHub地址https://github.com/openatx/uiautomator2https://github.com/openatx/uiautomator2/blob/master/README.md四、安装1、安装uiautomator2pip install --pre uiautomator2 pip install pillow 如果需要截图可安装这个库2、设备安装atx-agent首先设备连接到PC并能够adb devices发现该设备。执行下面的命令会自动安装本库所需要的设备端程序uiautomator-serveratx-agentopenstf / minicapopenstf / minitouch12345678# init就是所有USB连接电脑的手机上都安装uiautomator2python-m uiautomator2 init# 指定手机安装uiautomator2 用 --mirrorpython-m uiautomator2 init--mirror--serial $SERIAL# 嫌弃慢的话可以用国内的镜像python-m uiautomator2 init--mirror最后提示success代表atx-agent初始化成功。3、安装weditor有了这个方便我们快速的识别手机上的元素方便写代码1pip install-U weditor安装好之后就可以在命令行运行weditor --help确认是否安装成功了。Windows系统可以使用命令在桌面创建一个快捷方式:1weditor--shortcut在windows cmd中执行上述命令后会在桌面上创建一个快捷方式如下图启动方法方法1.命令行直接输入weditor会自动打开浏览器输入设备的ip或者序列号点击Connect即可;方法2.桌面上双击WEditor快捷方式即可;方法3.命令行中执行python -m weditor启动后如下图五、应用及操作调用uiautomator2的过程配置手机设备参数设置具体操作的是哪一台手机抓取手机上应用的控件制定对应的控件来进行操作对抓取到的控件进行操作比如点击、填写参数等。设备连接方法有两种python-uiautomator2连接手机的方式有两种一种是通过WIFI另外一种是通过USB。两种方法各有优缺点。WIFI最便利的地方要数可以不用连接数据线USB则可以用在PC和手机网络不在一个网段用不了的情况。1通过WiFi假设设备IP 192.168.0.107和您的PC在同一网络中12importuiautomator2 as u2du2.connect(192.168.0.107)2通过USB 假设设备序列是123456789F123importuiautomator2 as u2du2.connect(123456789F)# USB链接设备。或者u2.connect_usb(123456f)#d u2.connect_usb() 或者 d u2.connect() 当前只有一个设备时可以用这个在没有参数的情况下调用u2.connect() uiautomator2将从环境变量ANDROID_DEVICE_IP获取设备IP。如果这个环境变量是空的uiautomator将返回connect_usb您需要确保只有一个设备连接到计算机。检查并维持设备端守护进程处于运行状态1d.healthcheck()打开调试开关12d.debugTrued.info安装应用只能从URL安装1d.app_install(http://some-domain.com/some.apk)#引号内为下载apk地址启动应用1d.app_start(com.eg.android.AlipayGphone)#引号内为包名称这里为支付宝停止应用12345#相当于am force-stop强制停止应用d.app_stop(com.eg.android.AlipayGphone)#相当于pm clear 清空App数据d.app_clear(com.eg.android.AlipayGphone)停止所有正在运行的应用程序12345# 停止所有d.app_stop_all()# 停止所有应用程序除了com.examples.demod.app_stop_all(excludes[com.examples.demo])跳过弹窗禁止弹窗12d.disable_popups()# 自动跳过弹出窗口d.disable_popups(False)# 禁用自动跳过弹出窗获取设备信息12345678910111213141516171819# 获取基本信息d.info# 获取窗口大小print(d.window_size())# 设备垂直输出示例: (1080, 1920)# 设备水平输出示例: (1920, 1080)# 获取当前应用程序信息。对于某些android设备输出可以为空print(d.current_app())#获取设备序列号print(d.serial)#获取WIFI IPprint(d.wlan_ip)#获取详细的设备信息print(d.device_info)获取应用信息123456789101112131415d.app_info(com.eg.android.AlipayGphone)# 会输出{packageName: com.eg.android.AlipayGphone,mainActivity: com.eg.android.AlipayGphone.AlipayLogin,label: 支付寶,versionName: 10.2.13.9020,versionCode: 360,size: 108306104}# 保存应用程序图标imgd.app_icon(com.eg.android.AlipayGphone)img.save(icon.png)推拉文件1将文件推送到设备123456789# push文件夹d.push(foo.txt,/sdcard/)# push和重命名d.push(foo.txt,/sdcard/bar.txt)# push fileobjwithopen(foo.txt,rb) as f:d.push(f,/sdcard/)# 推动和更改文件访问模式d.push(foo.sh,/data/local/tmp/, mode0o755)2从设备中拉出一个文件1234d.pull(/sdcard/tmp.txt,tmp.txt)# 如果在设备上找不到文件FileNotFoundError将引发d.pull(/sdcard/some-file-not-exists.txt,tmp.txt)关键事件1打开/关闭屏幕12d.screen_on()打开屏幕d.screen_off() 关闭屏幕2获取当前屏幕状态1d.info.get(screenOn)# 需要 Android 4.43硬键盘和软键盘操作1234567891011121314151617d.press(home)# 点击home键d.press(back)# 点击back键d.press(left)# 点击左键d.press(right)# 点击右键d.press(up)# 点击上键d.press(down)# 点击下键d.press(center)# 点击选中d.press(menu)# 点击menu按键d.press(search)# 点击搜索按键d.press(enter)# 点击enter键d.press(delete)# 点击删除按键d.press(recent)# 点击近期活动按键d.press(volume_up)# 音量d.press(volume_down)# 音量-d.press(volume_mute)# 静音d.press(camera)# 相机d.press(power)#电源键4解锁屏幕1234d.unlock()# 相当于# 1. 发射活动:com.github.uiautomator.ACTION_IDENTIFY# 2. 按home键手势与设备的交互12345678910111213141516171819202122232425# 单击屏幕d.click(x,y)# x,y为点击坐标# 双击屏幕d.double_click(x,y)d.double_click(x,y,0.1)# 默认两个单击之间间隔时间为0.1秒# 长按d.long_click(x,y)d.long_click(x,y,0.5)# 长按0.5秒默认# 滑动d.swipe(sx, sy, ex, ey)d.swipe(sx, sy, ex, ey,0.5)#滑动0.5s(default)#拖动d.drag(sx, sy, ex, ey)d.drag(sx, sy, ex, ey,0.5)#拖动0.5s(default)# 滑动点 多用于九宫格解锁提前获取到每个点的相对坐标这里支持百分比# 从点(x0, y0)滑到点(x1, y1)再滑到点(x2, y2)# 两点之间的滑动速度是0.2秒d.swipe((x0, y0), (x1, y1), (x2, y2),0.2)# 注意单击滑动拖动操作支持百分比位置值。例d.long_click(0.5,0.5) 表示长按屏幕中心XPath12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758# 检索方向d.orientation# 检索方向。输出可以是 natural or left or right or upsidedown# 设置方向d.set_orientation(l)# or leftd.set_orientation(r)# or rightd.set_orientation(n)# or natural#冻结/ 开启旋转d.freeze_rotation()# 冻结旋转d.freeze_rotation(False)# 开启旋转########## 截图 ############# 截图并保存到电脑上的一个文件中需要Android4.2。d.screenshot(home.jpg)# 得到PIL.Image格式的图像. 但你必须先安装pillowimaged.screenshot()# default formatpillowimage.save(home.jpg)# 或home.png目前只支持png 和 jpg格式的图像# 得到OpenCV的格式图像。当然你需要numpy和cv2安装第一个importcv2imaged.screenshot(formatopencv)cv2.imwrite(home.jpg, image)# 获取原始JPEG数据imagebind.screenshot(formatraw)open(some.jpg,wb).write(imagebin)############################## 转储UI层次结构# get the UI hierarchy dump content (unicoded).获取UI层次结构转储内容d.dump_hierarchy()# 打开通知或快速设置d.open_notification()#下拉打开通知栏d.open_quick_settings()#下拉打开快速设置栏# 检查特定的UI对象是否存在d(textSettings).exists# 返回布尔值如果存在则为True否则为Falsed.exists(textSettings)# 另一种写法# 高级用法d(textSettings).exists(timeout3)# 等待Settings在3秒钟出现# 获取特定UI对象的信息d(textSettings).info# 获取/设置/清除可编辑字段的文本(例如EditText小部件)d(textSettings).get_text()#得到文本小部件d(textSettings).set_text(My text...)#设置文本d(textSettings).clear_text()#清除文本# 获取Widget中心点d(textSettings).center()#d(textSettings).center(offset(0, 0)) # 基准位置左前UI对象有五种定位方式1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950# text、resourceId、description、className、xpath、坐标# 执行单击UI对象#text定位单击d(textSettings).click()d(textSettings, classNameandroid.widget.TextView).click()#resourceId定位单击d(resourceIdcom.ruguoapp.jike:id/tv_title, classNameandroid.widget.TextView).click()#description定位单击d(description设置).click()d(description设置, classNameandroid.widget.TextView).click()#className定位单击d(classNameandroid.widget.TextView).click()#xpath定位单击d.xpath(//android.widget.FrameLayout[index0]/android.widget.LinearLayout[index0]).click()#坐标单击d.click(182,1264)# 等待元素出现(最多10秒出现后单击d(textSettings).click(timeout10)# 在10秒时点击默认的超时0d(textSkip).click_exists(timeout10.0)# 单击直到元素消失返回布尔d(textSkip).click_gone(maxretry10, interval1.0)# maxretry默认值10,interval默认值1.0# 点击基准位置偏移d(textSettings).click(offset(0.5,0.5))# 点击中心位置同d(textSettings).click()d(textSettings).click(offset(0,0))# 点击左前位置d(textSettings).click(offset(1,1))# 点击右下# 执行双击UI对象d(text设置).double_click()# 双击特定ui对象的中心d.double_click(x, y,0.1)# 两次单击之间的默认持续时间为0.1秒#执行长按UI对象# 长按特定UI对象的中心d(textSettings).long_click()d.long_click(x, y,0.5)# 长按坐标位置0.5s默认# 将UI对象拖向另一个点或另一个UI对象# Android4.3不能使用drag.# 在0.5秒内将UI对象拖到屏幕点(x, y)d(textSettings).drag_to(x, y, duration0.5)# 将UI对象拖到另一个UI对象的中心位置时间为0.25秒d(textSettings).drag_to(textClock, duration0.25)常见用法1234567891011121314151617181920212223242526272829303132333435363738394041# 等待10sd.xpath(//android.widget.TextView).wait(10.0)# 找到并单击d.xpath(//*[content-desc分享]).click()# 检查是否存在ifd.xpath(//android.widget.TextView[contains(text, Se)]).exists:print(exists)# 获取所有文本视图文本、属性和中心点forelemind.xpath(//android.widget.TextView).all():print(Text:, elem.text)#获取视图文本forelemind.xpath(//android.widget.TextView).all():print(Attrib:, elem.attrib)#获取属性和中心点#返回: (100, 200)forelemind.xpath(//android.widget.TextView).all():print(Position:, elem.center())# xpath常见用法# 所有元素//*# resource-id包含login字符//*[contains(resource-id,login)]# 按钮包含账号或帐号//android.widget.Button[contains(text,账号)orcontains(text,帐号)]# 所有ImageView中的第二个(//android.widget.ImageView)[2]# 所有ImageView中的最后一个(//android.widget.ImageView)[last()]# className包含ImageView//*[contains(name(),ImageView)]文章参考UIAutomator2的使用 | Vicの博客到此这篇关于python UIAutomator2使用超详细教程的文章就介绍到这了,更多相关python UIAutomator2使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家您可能感兴趣的文章:python 使用uiautomator2连接手机设备的实现Pythonuiautomator2实现自动刷抖音视频功能详解python uiautomator2 watcher的使用方法利用Python批量提取Win10锁屏壁纸实战教程Python中Selenium模拟JQuery滑动解锁实例Pythonuiautomator2实现手机锁屏解锁功能