Appium App自动化入门与实践
致读者
整理文档不易,未经授权,禁止转载.
本章内容纯入门,深入学习请拜读 官方 Appium Api
Appium(GitHub)是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试 – 百度百科
画了一个简单的UML,个人理解,仅限参考,非官方
理解工具
正确的选择工具可以让我们学习更有效率
网上的流程图我就不粘贴了,还是文字描述可能会简单一点,至少我这么觉得.
- PyCharm Python 语言开发工具,我尝试过
IDEA
,Android Studio
开发工具,但这个工具在网上我能找到很多Appium相关的问题解决. - JDK Android SDK , Appium都依赖JDK环境
- Python 我也尝试过用Java,因为这是我工作用的语言,但是我还是Python,它可以更快入门,我们可以省去很多依赖包,编译,打包的过程
- Appium Desktop : 这是我们要学习的主要工具,我简单的理解为提供多种语言的Api,我观察日志发现它只是一个将Api的请求转化为
Android adb
命令的形式去操作(Andriod:手机/虚拟机), 注意还有个Appium命令版的,通过Node.JS(Npm)
安装的,出现(A session is either terminated or not started
)问题找了许久都没相关解决,安装桌面版的一切正常 - Android SDK: 安卓SDK , 内置多种工具,多种版本虚拟机安装工具等,我知道Appium需要用到它的环境变量(ANDROID_HOME),以及Adb工具.
- Adb 我觉得有必要一提这个东西, Android
调试桥 (adb)
是一种功能多样的命令行工具,可让您与设备进行通信。adb 命令便于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令)的访问权限, 在Android SDK 平台工具软件包中,在*/android_sdk/platform-tools/adb.exe
工具下载
Appium入门工具包集合(百度云)下载,全都在里面了
提取码:5m5y
特别准备的新系统
保证环境干净
1 JAVA JDK
1.1 安装
1.2 环境变量
1.3 验证
2 Android SDK
2.1 安装
2.2 环境变量
2.3 验证
3 Genymotion
安卓模拟器:市面很多虚拟机工具都可以,不一定用sdk中的安装,比如国产雷电,逍遥,夜神,比较推荐Genymotion(个人版免费)
安卓真机:Usb连接笔记本,启动开发者模式
- 设置Usb调试
- 设置Usb配置 RNDIS(Usb以太网)
ps:其他手机不知道有没有,三星s8+是要选择这个
- 通过adb devices 就能看到设备了
下面讲安卓模拟器安装的方式
3.1 查看设备
请牢记这个很常用的命令
#启动adb服务
adb start-server
#查看设备(当前无设备)
adb devices
3.2 安装
这里我们安装了一个 Android8.1 64位 x86架构 的手机镜像,文件有点大,建议只选装一个版本
3.3 启动
此处需要注册一个个人账号,比较麻烦,但是这个模拟器用法比sdk安装简单很多
3.4 选择设备
3.5 安装配置设备
下载安装中
3.6 安装设备
3.7 查看设备编号
4 Appium-Desktop
4.1 安装
4.2 检查配置
4.3 启动
4.4 验证
4.5 创建新会话
上图中的配置,可直接粘贴进替换右边的JSON
{
"platformName": "Android",
"platformVersion": "8.0.0",
"deviceName": "192.168.12.101:5555",
"appPackage": "com.android.calculator2",
"appActivity": ".Calculator",
"noReset": true,
"newCommandTimeout": "9000"
}
4.6 从设备中提取关键参数
参数 :appPackage appActivity
adb shell
logcat | grep ActivityManage
4.7 启动会话
4.8 如何使用录制功能
接下来我们可以安装Python,搭建环境运行这个代码
4.9 如何提取元素
面的一个练习中会用到这里的元素提取
5 Python
5.1 安装
5.2 环境变量
5.3 验证
6 PyCharm
6.1 安装
6.2 启动
6.3 创建新工程
6.4 选择项目类型
6.5 新增Appium-Python-Client模块
6.6 运行录制的代码
6.7 效果图
8 场景 : 自动登录
8.1 提取关键参数
参数 :appPackage appActivity
adb shell
logcat | grep ActivityManage
打开App工程日志,这里提取的值,用于程序中的appPackage和appActivity
查看我的按钮xPath元素位置,复制出来,代码中的xpath,id取值类似,不一一列举
我们又点击了我的按钮,得到了一个新的Activity , 说明不同的页面可能有不同的Activity,我们可以用他在程序中做一个控制,比如等待这个Activity加载出来我们再执行下一个动作
8.2 模拟登陆效果
输入的假是假账号,登陆失败是当然的
这是一段不健全的代码,可能某个页面延迟了也许就出现了异常.
from time import sleep
from appium import webdriver
caps = {}
caps["platformName"] = "Android"
caps["platformVersion"] = "8.0.0"
caps["deviceName"] = "192.168.12.101:5555"
caps["appPackage"] = "com.jifen.qukan"
caps["appActivity"] = "com.jifen.qkbase.main.MainActivity"
caps["noReset"] = True
caps["newCommandTimeout"] = "9000"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
## 显示等待5秒
sleep(5)
## 我的按钮xPath
myButonXpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout/android.widget.FrameLayout[5]/android.widget.LinearLayout/android.widget.TextView'
## 点击我的按钮
driver.find_element_by_xpath(myButonXpath).click()
# 这里写入点击我的后登陆页的Activity最大等待10秒
loginActivity = '.login.V2MainLoginActivity'
## 有这个Activity,那么开始进入登陆操作
if driver.wait_activity(loginActivity, 10) :
nameInputId='com.jifen.qukan:id/bo6' ## ID方式获取用户名框
passwordInputId='com.jifen.qukan:id/bo7' ## ID方式获取密码
loginButonId='com.jifen.qukan:id/i1' ## ID方式获取登陆按钮
driver.find_element_by_id('com.jifen.qukan:id/br1').click() ## ID方式获取密码类型登陆
sleep(2) ## 点击密码类型登陆,等待用户密码框加载,显示等待2秒
driver.find_element_by_id(nameInputId).send_keys('18888888888') ## 键入用户名
driver.find_element_by_id(passwordInputId).send_keys('88888888') ## 键入密码
driver.find_element_by_id(loginButonId).click() ## 触发登陆点击
sleep(2) ## 点击登陆后,显示等待2秒
driver.quit()
9 学习资料
10 过程中可能的问题
异常:
Could not find 'adb.exe' in PATH. Please set the ANDROID_HOME or ANDROID_SDK_ROOT environment variables to the corect Android SDK root directory path.
解决: 未配置/错误配置 ANDROID_HOME ,配置 ANDROID_HOME 即可
异常
An unknown server-side error occurred while processing the command. Original error: Could not find a connected Android device.
解决: 未找到虚拟机或者是真机
1 . 请检查USB线
2. adb kill-server 再 adb start-server 重启adb服务(前提是配置了adb.exe(环境变量))
异常
An element could not be located on the page using the given search parameters
解决:try + except 做异常处理,或设置合理的延迟
1 . 元素因为网络或是反应慢,没有加载出来,设置合理的延迟或者控制
2. 在滑动页面时,页面出现了一半,另一半没有加载出来,获取失败.
异常
电脑下载的apk安装包,通过adb install **.apk 安装后,软件无法联网,可以通过应用市场来安装工具