AppUI 手机及元素操作
AI-摘要
Tianli GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
AppUI 手机及元素操作
PupperAppium 手机及元素操作
一、 按键模拟
返回桌面
1 | driver.keyevent(3) # 3 对应 home 键 |
调节音量
1 | driver.keyevent(24) |
长按 home 键
1 | driver.long_press_keycode(3) |
按键 | 说明 | 编号 |
---|---|---|
KEYCODE_CALL | 拨号键 | 5 |
KEYCODE_ENDCALL | 挂机键 | 6 |
KEYCODE_HOME | 按键 Home | 3 |
KEYCODE_MENU | 菜单键 | 82 |
KEYCODE_BACK | 返回键 | 4 |
KEYCODE_SEARCH | 搜索键 | 84 |
KEYCODE_CAMERA | 拍照键 | 27 |
KEYCODE_FOCUS | 拍照对焦键 | 80 |
KEYCODE_FOWER | 电源键 | 26 |
KEYCODE_NTIFICATION | 通知键 | 83 |
KEYCODE_MUTE | 话筒静音键 | 91 |
KEYCODE_VOLUME_MUTE | 扬声器静音键 | 164 |
KEYCODE_VOLUME_UP | 音量增加键 | 24 |
KEYCODE_VOLUME_DOWN | 音量减少键 | 25 |
二、 触摸操作
1. 根据坐标点击
driver.tap([坐标],持续点击时间)
: 除了定位到元素的点击外,也可以通过 tab 实现坐标的点击
1 | driver.tap([(216,1776)],2) |
主要用于处理 无法获取 到具体元素的模块, 如 弹窗广告
2. TouchAction(driver) —- 坐标点击
TouchAction 对象包含( tab)、 press(短按)、 move_to(滑动到某个坐标)等方法
坐标点击不会智能等待元素
使用 TouchAction
时,需要导入 :
1 | from appium import webdriver |
按坐标点击, 持续时长 可实现长按 或者 短按
1 | driver.tap([(135, 26)], 1) |
根据坐标点击,第二个参数是点击的持续时间
1 | driver.tap([(668, 117)], 1) |
短按一个元素或坐标点
1 | # TouchAction(driver).press(ele).release().perform() |
长按一个元素或坐标点 (持续时间单位是毫秒)
1 | # TouchAction(driver).long_press(ele, duration=500).release().perform() |
点击某个元素或坐标后,多次点击
1 | # TouchAction(driver).tap(ele, count=3).release().perform() |
模拟手指等待,比如按下等待五秒之后再抬起, 单位是毫秒
1 | TouchAction(driver).press(ele).wait(5000).release().perform() |
移动,多点移动划线
1 | TouchAction(driver).press(x=132, y=354).move_to(x=132, y=354).move_to(x=626,y=787).release().perform() |
3. MultiAction() —- 多点触控
通过
MultiAction().add()
添加多个TouchAction
操作,最后调用perform()
一起执行这些操作
- MultiAction 是针对多点触控操作的,是 TouchAction 的一个补充模块
- 多点触摸对象是触摸动作的集合。
- 多点触控手势只有两种方法,即 添加 和 执行。
- add 用于添加另一个触摸操作到多点触摸。
- 当 perform 执行被调用时,添加到多点触摸的所有触摸动作都被执行,就像它们同时发生一样。
- appium 首先执行所有触摸动作的第一个事件,然后执行第二个,等等。
1 | action0 = TouchAction(driver).press(x=132, y=354).move_to(x=132, y=354).move_to(x=226, y=787) |
三、 手机 api 操作
1. 手机信息获取
adb devices
多个设备,使用adb -s devicename
进行指定设备运行
1 | adb -s R58M86BEW0D shell getprop ro.build.version.release |
1. 获取系统版本:
1 | adb shell getprop ro.build.version.release |
2. 获取系统 api 版本:
1 | adb shell getprop ro.build.version.sdk |
3. 获取手机相关制造商信息:
1 | adb shell getprop | grep "model\|version.sdk\|manufacturer\|hardware\|platform\|revision\|serialno\|product.name\|brand" |
4. 获取当前运行的软件包名
1 | adb shell dumpsys window | findstr mCurrentFocus |
5. 获取手机系统信息( CPU,厂商名称等)
1 | adb shell "cat /system/build.prop | grep "product"" |
6. 获取手机设备型号
1 | adb -d shell getprop ro.product.model |
7. 获取手机厂商名称
1 | adb -d shell getprop ro.product.brand |
8. 获取手机的序列号
有两种方式
1 | adb get-serialno |
9. 获取手机的 IMEI
有三种方式,由于手机和系统的限制,不一定获取到
1 | adb shell dumpsys iphonesubinfo |
此种方式,需要自己处理获取的信息得到
10. 获取手机 mac 地址
1 | adb shell cat /sys/class/net/wlan0/address |
11. 获取手机内存信息
1 | adb shell cat /proc/meminfo |
12. 获取手机存储信息
1 | adb shell df |
获取手机内部存储信息:
- 魅族手机:
adb shell df /mnt/shell/emulated
- 其他:
adb shell df /data
- 获取 sdcard 存储信息:
adb shell df /storage/sdcard
13. 获取手机分辨率
1 | adb shell "dumpsys window | grep mUnrestrictedScreen" |
14. 获取手机物理密度
1 | adb shell wm density |
2. 手机操作
1. 获取手机分辨率
1 | print(driver.get_window_size()) |
2. 获取手机网络状态
返回数字 :
1:飞行模式
2:只开 wifi
4:只开流量
6:网络全开
1 | print(driver.network_connection) |
3. 获取手机当前时间
1 | print(driver.device_time) |
4. 打开通知栏
1 | driver.open_notifications() |
四、 Appium 应用场景
appium 可测试对象
- 原生:所有控件都是一种开发技术,
- 笔记 Android 都是 java 开发的,IOS 都是 object-c 开发的
- 大家手机上的计算器,就是原生的 APP
- 混合 APP:原生 app 无法满足内容快速变更的需求,所以需要结合能快速展现内容的 web 技术。
- 两种技术结合在了一起,所以称之为混合。比如淘宝、美团,展示商品的部分就是 web 页面。
这部分内容是包含在 webview 下面
web 应用:手机网页
1. 手机 web 页面 自动化
1. 通过 selenium 测试移动端 web 网页
- 需要添加配置项,让浏览器识别到我是通过移动端来访问的
- 其他方面跟 selenium 测试 PC 端浏览器网页没有区别
1 | from selenium import webdriver |
2. 通过 appium 测试移动端 web 网页
- 配置信息需要添加:
'browserName': 'Chrome'
"chromedriverExecutableDir":浏览器驱动路径
。
- 这个驱动装在电脑上,要求与手机浏览器版本一致
- 配置信息移除 app 相关信息
1 | from appium import webdriver |
2. 混合 APP 自动化
1 | from appium import webdriver |
五、 appium 报错
1. 由于目标计算机积极拒绝,无法连接
原因:appium 服务未启动
解决:启动 appium 服务后,等待【welcome to appium xxx】提示语出现
2. 会话冲突:failed to start an appium session requested a new session but one was in progress
原因:之前的会话没关闭
解决:重启 appium 服务,或重启手机
3. 未安装 java 环境
安装 jdk,如果已安装,检查环境变量
4. adb 检测不到设备
- 电脑是否安装手机驱动(win10 不需要),电脑下载手机助手,等手机助手装好驱动,卸载掉手机助手
- 打开手机设置,进入开发者选项,打开 usb 调试功能
- 重新拔插数据线,若手机提示仅充电,选传文件,若提示是否允许这台设备调试,选择永远允许
- 换数据线,淘宝充电线,可能无法使用,尽量用原装数据线
5. 程序无法自动打开 appium settings
自己手动打开 appiumsettings
6. java.long Permission denial:writing to settings
小米:开启 USB 调试(安全设置) 插入 SIM 卡
OPPO:开发者选项 禁止权限监控—开启状态
7. appium could not sign with default certificate
右键 appium 图标以管理员方式运行
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果