分享

终于有大佬把uiautomator2自动化测试框架讲得如此透彻了!

 wenxuefeng360 2022-11-07 发布于四川

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')

微信搜一搜【程序员阿沐】关注这个文绉绉的程序员,这样的干货内容还有近百篇。关注后主页点击【领取资料】有我准备的一线大厂面试资料和简历模板,希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!

分享的内容如果对你有帮助记得点赞让更多的朋友看到!这个对我很重要!

软件测试视频学习教程

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多