提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
Appium简介及adb常用命令
一、Appium简介
1.appium的组成
- 自动化脚本即client端(通过Java编写的代码,也可以通过其他语言编写)
- Appium指令服务器
- sdk通信环境(Android模拟器)或移动端设备
2.appium工作原理
- Client端发送自动化指令给Appium server,Appium Server接收到client发送的指令后,转换为移动端能够识别的指令,然后发送给移动端设备,并对移动端设备进行操作。
- 具体原理可查看下面两位大佬的帖子,原理描述的非常详细:
1.Appium工作原理
2.Appium工作原理
二、adb常用命令
- 设备选择:
adb -d 指定唯一真机
adb -e 指定唯一模拟器
adb -s 指定相应serialNumber号的设备
- 查询设备:
adb devices
- 打开谷歌模拟器,连接模拟器:
emulator @avd_name
adb connect deviceName
- 安装卸载应用:
adb install path
adb uninstall appPackage
- 设备与电脑互传文件,截图,录屏:
adb push 电脑路径 设备路径
adb pull 设备路径 电脑路径
截图: adb shell screencap 设备路径
录屏: adb shell screenrecord 设备路径
- 调用Activity管理器 am:
启动应用: adb shell am start -n 包名/Activity名
强制停止应用: adb shell am force-stop 包名
- 调用软件包管理器 pm:
显示所有应用: adb shell pm list packages
只显示系统应用: adb shell pm list packages -s
只显示第三方应用: adb shell pm list packages -3
列出所用测试软件包:adb shell pm list instrumentation
删除与软件包关联的所有数据: adb shell pm clear 包名
- 调用dumpsys,获取连接设备上的所有系统服务的诊断输出:
获取前台包名: adb shell dumpsys activity | findstr mFocusedActivity
检查输入诊断: adb shell dumpsys input
测试界面性能: adb shell dumpsys gfxinfo 包名
检查电池诊断: adb shell dumpsys batterystats-charged 包名
查看CPU信息: adb shell dumpsys cpuinfo
查看内存信息: adb shell dumpsys meminfo
获取内存占用情况统计信息: adb shell dumpsys procstats --hours 3
- 日志信息:
屏幕输出日志: adb logcat
通过标签过滤: adb logcat -s 标签
显示时间: adb logcat -v time adb shell dumpsys acticity top
输出所有信息: adb logcat -v long
输出日志到文件: adb logcat -v time >log.txt
清除旧日志信息: adb logcat -c
- Monkey基本用法:
adb monkey 参数 随机发送事件
参数:
-v: 指定反馈信息级别,总过分3个级别
-s: 指定伪随机数生成器的seed值
-p: 用于约束限制,用此参数指定一个或者多个包
--throttle: 每个事件结束后的间隔时间
--ignore-crashes: 忽略崩溃
--ignore-timeouts: 忽略超时
--ignore-security-exceptions: 忽略安全异常
--ignore-native-crashes: 忽略本地代码导致的崩溃异常
--monitor-native-crashes: 跟踪本地方法的崩溃问题
事件:
--pct-touch: 触摸事件
--pct-motion: 滑动事件
--pct-appswitch: activity之间的切换
--pct-pinchzoom: 缩放事件
--pct-rotation: 屏幕旋转事件
--pct-flip: 键盘事件
--pct-anyevent: 任意事件
adb shell monkey -p appPackage -v -v -v --pct-touch 30 --pct-motion 30 --pct-appswitch 20 --pct-flip 10 --pct-anyevent 10 -s 12345 --throttle 300 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes 100 >monkey_log.txt
日志处理:
程序无响应:ANR
崩溃问题: CRASH
其他问题:Exception
- 获取Android手机的屏幕上的空间列表:
adb shell "uiautomator dump && cat /sdcard/window_dump.xml"
三、appium交互
1.Capability 设置
caps = {
}
# 系统名称
caps['platformName'] = 'Android'
# 系统版本
caps['platformVersion'] = '6.0'
# 设备名称
caps['deviceName'] = 'deviceName'
# 设备包名
caps['appPackage'] = 'appPackage'
# 设备窗口页面
caps['appActivity'] = 'appActivity'
# 是否重置测试的环境
caps['noReset'] = 'true'
# 首次启动的时候,不停止 app
# caps['dontStopAppOnReset'] = 'true'
# 跳过设备初始化,
caps['skipDeviceInitialization'] = 'true'
# 启用 Unicode 输入
caps['unicodeKeyBoard'] = 'true'
# 在运行 Unicode 测试后,将键盘重置为其原始状态
caps['resetKeyBoard'] = 'true'
# 通过页面检测来增强其 webview 检测
# caps['ensureWebviewsHavePages'] = 'true'
# 加载动态页面时间设置为0s
# caps['settings[waitForIdleTimeout]'] = 0
# 指定对应版本的webdriver的路径
# skipDeviceInitialization:true, false 跳过安装,权限设置等操作
caps['chromedriverExecutable'] = 'chromedriver-path'
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', caps)
- 详细参数可查看appium官网:
Desired Capabilities - 元素定位:
手机界面定位方式与web界面定位方式类似(不能使用css selector方式定位),根据id或者相对路径定位;
cmd中输入命令uiautomatorviewer
打开该工具定位(无法验证定位方式);
使用appium-desktop的inspector定位(可验证定位方式);
webview中的元素需要pc端访问:chrome://inspect/#devices
,点击Webview里的inspect,即可弹出当前webview的HTML视图 - 控件交互:
- 点击方法:
element.click()
- 输入操作:
element.send_keys(“”)
- 设置元素的值:
element.set_value(“”)
- 清除操作:
element.clear()
- 是否可见:
element.is_displayed 返回 true or false
- 是否可用:
element.enabled() 返回 true or false
- 是否被选中:
element.is_selected() 返回 true or false
- 获取属性值:
element.get_attribute(name)
- 获取元素文本:
element.text
- 获取元素坐标:
element.location
结果:{‘y’:19,‘x’:498}
- 获取元素尺寸(高和宽):
element.size
结果:{‘width’:500,‘height’:22}
- 查看上下文:
driver.contexts
- 切换上下文:
switch_to.context()
- 查看窗口句柄:
driver.window_handles
- 切换窗口句柄:
driver.switch_to.window()
- 获取toast属性:
toast = driver.find_element(By.XPATH, '//*[@class="toast"]').text
- 滚动查找:
driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiScrollable(new UiSelector().'
'scrollable(true).instance(0)).'
'scrollIntoView(new UiSelector().text("带查找文本").'
'instance(0));').click()
总结
appium的基本使用与adb命令的基本使用