uiautomator2原理 原理: 1. PC上的 python 端:运行脚本,并向系统设备发送 http 请求 2. 移动设备:移动设备上运行了封装了uiautomator2 的 HTTP 服务,解析收到的请求,并转化成 uiautomator2 的代码。 ![]() 02.uiautomator2环境部署 uiautomator2初始化 1. 安装ADB ,确保 ADB 环境 OK 2. 安装uiautomator2 方式一:打开 cmd ,输入 pip install --pre uiautomator2 方式二: git clone https://github.com/openatx/uiautomator2 pip install -e uiautomator2 pip install pillow 方式三: 离线安装,将 python 安装目录 -Lib-site-packages 目录打包 方式二安装步骤 ![]() ![]() uiautomator2初始化 前提:设备与电脑已经建立链接,可以通过 adb devices 查看 打开 cmd ,输入 python -m uiautomator2 init ![]() uiautomator2获取包名 用 uiautomator2 查看打开 apk 的包名和界面名 打开 cmd ,输入 python -m uiautomator2 current ![]() 定位元素 1. 安装可视化UI查看器 打开 cmd ,输入 pip install --pre -U weditor 或者 pip install --pre --upgrade weditor ![]() 定位元素 2. 使用weditor进行元素定位 打开 cmd ,输入 python -m weditor ,会自动打开浏览器,并获取当前 apk 界面的元素信息 如果不能成功打开,解决如下: 打开 cmd ,输入 python -m uiautomator2 init 然后在 cmd 中输入 python -m weditor ![]() 元素信息 在浏览器中查看对应元素的属性信息 ![]() 03.uiautomator2连接设备 uiautomator2连接设备 第一步:导包 :import uiautomator2 as u2 第二步:连接 :d = u2.connect(" 序列号 ") 只有一个设备时,可以省略序列号,如 d=u2.connect() ![]() 第三步:启动app : driver.app_start( 包名 , 界面名 ) 第四步: app 操作 定位元素 元素操作 app操作 启动应用: driver.app_start("com.example.hello_world", ".MainActivity") 停止应用: driver.app_stop("com.example.hello_world") 停止所有应用: driver.app_stop_all() 清除应用数据: driver.app_clear('com.example.hello_world') 查看所有正在运行的 app : driver.app_list_running() 确定 APP 是否启动: driver.app_wait("com.example.android") # 等待应用运行 , return pid(int) 查看 app 信息: driver.app_info("com.examples.demo") 获取前台应用 packageName, activity : driver.app_current() 获取窗口大小: driver.window_size() app操作-code ![]() 04.uiautomator2实现自动化操作 1-元素定位与操作 元素与元素组定位 1. ResourceId定位: driver(resourceId="com.meizu.mzbbs:id/tp").click() 2. Text定位: driver(text=" 精选 ").click() 3. Description定位: driver(description="..").click() 4. ClassName定位: driver(className="android.widget.TextView").click() 5. xpath定位: driver.xpath('xpath 路径 ').click() 6. 元素组定位: driver(className="android.widget.TextView")[ 索引值 ].click() # 从 0 开始 元素操作 点击元素: ele.click() 发送文本: ele.send_keys( 文本内容 ) 或者 ele.set_text('13211110000') 清空内容: ele.clear_text() 获取文本: ele.get_text() 截图: driver.screenshot('login.png') 元素定位与操作-code ![]() 2-手势常见操作 用于模拟用户对手机的点击操作 根据坐标操作: 1. 点击坐标:driver.click(10, 20) 2. 双击坐标:driver.double_click(x, y, 0.1) 3. 长按某个坐标:driver.long_click(x, y, 0.5) 根据定位元素操作: 1. 点击元素:d(text="Settings").click() 2. 双击元素:d(Text="Settings").double_click() 3. 长按元素:d(Text="Settings").long_click() 2-手势常见操作 用于模拟用户对手机滑动、拖动操作 1. 滑动操作:driver.swipe(sx, sy, ex, ey, 0.5) 2. 从A 坐标拖拽到 B 坐标: driver.drag(sx, sy, ex, ey, 0.5) 3. 整个屏幕右滑动:driver.swipe_ext("right") #left :左滑, right :右滑 手势操作-code ![]() 3-手势连续性操作 模拟按下后的连续操作,如滑动解锁,九宫格解锁等操作 1. 连续性操作,如滑动解锁,图案解锁 · driver.swipe_points([(x1,y1),(x2,y2),(x3,y3),(x4,y4)],time) · 如:driver.swipe_points([(0.235, 0.456), (0.503, 0.449), (0.509, 0.601), (0.777, 0.603), (0.771, 0.763), (0.222, 0.75)], 0.2) 其中 (0.235, 0.456) 代表 X(23.5%) Y(45.6%) ,也可以用绝对坐标也可以。 最后 的0.2 代表每一次滑动的时间。 手势连续性操作code ![]() 4-硬按键操作 用于模拟用户对手机硬按键或系统按键的操作,模拟按 Home 或 Back 键,目前支持以下关键字,但并 非所有设备都支持: 常见按键及关键字 HOME 键: home 返回键: back 菜单键: menu 音量加: volume_up 音量减: volume_down 锁屏键 power 模拟按键发送 driver.press("back") driver.press('power') 屏幕操作: 打开屏幕: d.screen_on() 关闭屏幕: d.screen_off() 硬按键操作-code ![]() 5-执行ADB操作 driver.adb_shell('shell 命令 ’) 直接传入 shell 命令即可,如: driver.adb_shell('ls') 文件上传 driver.push(' 本地文件 ',' 远程路径 ') 如: driver.push('login.png','/sdcard/login.png') 文件下载 driver.pull(' 远程文件 ',' 本地路径 ') 如: driver.pull('/sdcard/wu.log','E:\APK\wu.log') ![]() 微信搜一搜【程序员阿沐】关注这个文绉绉的程序员,这样的干货内容还有近百篇。关注后主页点击【领取资料】有我准备的一线大厂面试资料和简历模板,希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见! 分享的内容如果对你有帮助记得点赞让更多的朋友看到!这个对我很重要! 软件测试视频学习教程 ![]() ![]() |
|
来自: wenxuefeng360 > 《待分类1》