黑马程序员网课学习(Appium框架)
adb 调试工具
一、adb构成和工作原理
1. adb构成
client端,在电脑上,负责发送adb命令
daemon守护进程,在手机上,负责接收和执行adb命令
server端,在电脑上,负责管理client和daemon之间的通信
2. adb工作原理
-
client端将命令发送给server端
-
server端会将命令发送给daemon端
-
daemon端进行执行
-
将执行结果,返回给server端
-
server端将结果再返回给client端
二、adb获取包名和界面名
1. 包名和界面名的概念
1)包名,对应着应用程序(不是应用的名字)
2)界面名,对应着应用程序的某个界面,也叫做启动名
2. 如何获取包名和界面名
mac:adb shell dumpsys window windows | grep mFocusedApp
windows:adb shell dumpsys window windows | findstr mFocusedApp
3. 应用场景
后期,我们在告诉计算机到底打开哪一个应用和哪一个界面,必须要使用的一个写代码的参数
三、adb文件传输
1. 从电脑发送文件到手机
如何使用:
adb push 电脑的文件路径 手机的文件夹的路径
2.从手机拉取文件到电脑
如何使用:
adb pull 手机的文件路径 电脑的文件夹的路径
3. 应用场景
如果希望将电脑上的某个文件,发送到手机,使用 adb push 的命令
如果希望将手机上的某个文件,发送到电脑,使用 adb pull 的命令
四、获取app启动时间
1. 如何获取app启动时间
adb shell am start -W 包名/界面名
单位:毫秒

2. 应用场景
1)当企业有需求的时候,使用这个adb命令进行测试
2)如果企业没有特定的时间规范,我们可以参考同类产品,不要超过一倍即可
五、获取手机日志
1. 如何获取手机的日志
adb logcat
2. 应用场景
当成发生崩溃的时候,可以将日志信息发送给开发人员,便于其快速的定位bug
关于崩溃的处理,需要找日志中的 "at" 前面,的第一个字符是 E 的就是错误信息
六、其他命令
1. 安装app到手机
adb install apk路径
2. 卸载手机上的app
adb uninstall 包名
3. 查看连接设备的数量及设备号
adb devices
4. 进入到android手机系统内部的命令行中
adb shell
5. 关闭adb服务
adb kill-server
6. 开启adb服务
adb start-server
7. 查看adb帮助
adb --help
Appium
一、如何使用appium打开任意一个应用程序
-
打开要测试的应用
-
使用 adb 命令获取包名和界面名
-
修改 desired_caps 字典中的 appPackage 和 appActivity 的参数
python
from appium import webdriver
import time
desired_caps = dict()
# 平台的名字,大小写无所谓,不能乱写
desired_caps['platformName'] = 'andRoId'
# 平台的版本,(5.4.3 可以写 5.4.3,5.4,5)
desired_caps['platformVersion'] = '5'
# 设备的名字,随便写,不能乱写
desired_caps['deviceName'] = '1'
# 要打开的应用程序
desired_caps['appPackage'] = 'com.cyanogenmod.filemanager'
# 要打开的界面
desired_caps['appActivity'] = '.activities.NavigationActivity'
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(5)
driver.quit()
- 如果测试的设备版本号发生变化?
修改 desired_caps 字典中的 platformVersion 的参数
- 如果测试的设备平台发生变化?
修改 desired_caps 字典中的 platformName 的参数
二、如何通过代码跳转其他的 app
通过driver对象调用 start_activity 的方法
start_activty("包名", "界面名")
python
# 启动短信应用程序
driver.start_activity("com.android.mms", ".ui.ConversationList")
三、如何通过代码获取 app 的包名和界面名
-
包名:通过driver对象调用 current_package 属性
-
界面名:通过driver对象调用 current_activity 属性
python
# 输出当前程序的包名
print(driver.current_package)
# 输出当前程序的界面名
print(driver.current_activity)
四、如何通过代码关闭 app 和 驱动对象
- 通过driver对象调用 close_app 方法
关闭当前应用程序,不会关闭驱动对象
- 通过driver对象调用 quit 方法
关闭驱动对象,同时关闭驱动对象所关联的app
python
driver.close_app()
driver.quit()
五、如何安装和卸载应用以及判断应用是否安装
1. 安装应用
install_app("apk路径")
2. 卸载应用
remove_app("包名")
3. 判断某个应用是否已经安装
is_app_installed("包名")
python
# 判断安智市场是否已经安装
if driver.is_app_installed("cn.goapk.market"):
# 如果安装,就要卸载
driver.remove_app("cn.goapk.market")
else:
# 如果没有安装,就要安装
driver.install_app("/Users/Yoson/Desktop/anzhishichang.apk")
六、如何模拟按home键,将应用放置到后台中
通过driver对象调用 background_app 方法
注意:这个方法会自动回到前台
driver.background_app("放置到后台的时间,秒")
python
# 进入后台5秒,再回到前台
driver.background_app(5)