安装Appium Python Client 包
根据原理图, 我们知道测试程序需要调用客户端的库Appium Python Client包来和 Appium Server 进行通信。
所以先安装Appium Python Client包。
https://github.com/appium/python-client
pip install Appium-Python-Client
从安装的信息可以发现,Appium Client 底层是依赖 Selenium的,它需要Selenium库的代码才能实现和 Appium Server进行通信
Appium Server
更省事的方法是下载安装Appium Desktop的安装包,
这个里面包含了Node.js和AppiumServer 的代码
下载地址 https://github.com/appium/appium-desktop/releases/latest
它是个windows的安装程序,只需要下载,安装就可以了,没有什么难度。
安装 Android sdk
对于安卓app的自动化,Appium Server 依赖 Android SDK。
因为要用到里面的一些工具,
典型的,最常用的,比如adb,要执行命令设置手机,传送文件,安装应用。
我们怎么安装Android sdk包?
谷歌是提供了方法: 不去安装 android studio ,就只安装 sdk包的
打开 https://developer.android.google.cn/studio/
最下面有个
建议先创建一个类似这样的目录
d:\android\sdk
下载后,选择解压到当前目录
会生成一个 tools 目录
然后
sdkmanager "platform-tools" "platforms;android-28" "build-tools;28.0.3"
设置 sdk 相关环境变量
配置一下 ANDROID_HOME 环境变量的值为 d:\tools\Android\sdk
将adb所在路径设置到 path环境变量中
Android\sdk\platform-tools\
安装JDK
有些 安卓sdk 中的工具(比如查看安卓app界面元素的uiautomatorviewer)需要有JDK才能运行。
比较简单,
但是大家要注意的是,一定要安装jdk 8.x的版本,
1.7 ,1.6 1.9等版本都碰到过这样那样的问题。
jdk 是oracle的,到官网下载
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载安装就可以
有时还需要环境变量中设置一下(有人的环境上需要,建议大家都添加一下)
JAVA_HOME d:\tools\java\jdk1.8.0_121
连接真实设备(15 min)
- 用usb线(有的淘宝线只能充电)连接到电脑,一头连手机,一头连电脑
- 进入手机设置,关于手机(),不断点击版本号(7次以上),
注意一定是版本号,不是其他号。
- 退出到上级菜单,在开发者模式中,启动usb调试 ,这样appium才能驱动手机
- 在电脑上 执行adb命令(这个adb在sdk\platform-tools\ 请大家设置路径在path环境变量中)
adb devices -l
List of devices attached
4d0035dc767a50bb device product:t03gxx model:GT_N7100 device:t03g
现在有的电脑安装了win10的,有的手机能够自动被系统识别,就会显示上面的信息,
有的电脑系统,比如win7 , 手机不能自动识别,因为还没有安装手机的usb驱动,需要我们去安装。
到哪里下载驱动呢? 可以通过 官方windows手机管理软件, 比如华为手机(安装华为手机助手)
快速开始
我们以一个开发者头条的app,为例,演示一下自动化的过程
准备一些事情
即使安装好上述软件后。要自动化,还要准备一些事情。
首先当然需要有被测试的app应用了。
这里我用的app是从应用市场上下载下来。
在虚拟手机上没有应用市场,可以直接到官网下载app
当然实际项目中app 是有开发团队发布给我们测试用的。
放在一个合适的目录中,这里我放在 d:\apk\
usb线连接手机
进入头条apk所在目录,
执行命令安装一下
d:\apk> adb install -r toutiao.apk
toutiao.apk: 1 file pushed. 4.5 MB/s (15351740 bytes in 3.268s)
pkg: /data/local/tmp/toutiao.apk
Success
范例代码
from appium import webdriver
import time,traceback
# 这里定义的 desired_capabilities,作为下面 webdriver.Remote
# 初始化一个webdriver的参数。
# 这些键值对告诉appium server 测试程序希望进行的是什么什么样的测试
# 比如下面 platformName 和 platformVersion 两个配置项
desired_caps = {}
desired_caps['platformName'] = 'Android' #测试平台,不能写错
desired_caps['platformVersion'] = '6.0' #平台版本,不能写错
#设备名称,其实没有太大的用处,只是给测试程序使用的,苹果手机一定要有
desired_caps['deviceName'] = 'test'
#apk 文件路径名,如果设备还没有此应用,则会安装。 什么是apk文件?
# android application package 安卓移动App安装包
desired_caps['app'] = r'd:\apk\toutiao.apk'
#app package名,一定要有,是开发者给app取的名字,可以唯一标识这个app # 安卓上运行某个app,不是根据它的路径而是appid ,也就是这package name
# 怎么获取?后面会讲
desired_caps['appPackage'] = 'io.manong.developerdaily'
# app默认Activity,也是必须的参数。Activity 的概念后面会讲述,
# 目前我们就理解为一个用户操作界面就可以了
# 怎么获取?后面会讲
desired_caps['appActivity'] = 'io.toutiao.android.ui.activity.LaunchActivity'
# 一定要有该参数,否则测试过程中无法输入中文
#加上这个参数会新加一种unicode输入法
desired_caps['unicodeKeyboard'] = True
# 保证了app 测试前不会清除应用数据,缺省是会清除数据的,
desired_caps['noReset'] = True
# appium server 认为 和客户端之间 无响应最大时间,超过这个时间就会停止服务
desired_caps['newCommandTimeout'] = 6000
# appium server 在这个URI上接收 客户端发送的rest API请求
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 下面的操作是自动化一个用户登录的过程,大家课后自己尝试的时候,需要先注册用户
# 怎么注册演示给大家看看, 怎么登录也演示给大家看看,
# 最后别忘了要退出登录,一遍自动化可以执行
try:
# 和Selenium含义一样,问问大家还记得吗?
driver.implicitly_wait(10)
# 根据id找到元素,并点击,id和 html 元素的id不同,
# 和appiumserver、设备之间的消息流程类似于 selenium,和
driver.find_element_by_id("io.manong.developerdaily:id/tab_bar_plus").click()
time.sleep(1)
driver.find_element_by_id("io.manong.developerdaily:id/btn_email").click()
time.sleep(1)
# 输入用户名、密码
ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_email")
ele.send_keys('jcyrss@163.com')
ele = driver.find_element_by_id("io.manong.developerdaily:id/edt_password")
ele.send_keys('sdfsdf')
time.sleep(2)
# 点击登录
driver.find_element_by_id('io.manong.developerdaily:id/btn_login').click()
pass
except:
print (traceback.format_exc())
input('**** Press to quit..')
driver.quit()