appium+python自动化测试文档
一.认识appium
1. 什么是appium
- appium是开源的移动端自动化测试框架;
- appium可以测试原生的、混合的、以及移动端的web项目;
- appium可以测试ios,android应用(当然了,还有firefox os);
- appium是跨平台的,可以用在osx,windows以及linux桌面系统上
2. appium的哲学
- 不需要为了自动化而且重新编译或修改测试app;
- 不应该让移动端自动化测试限定在某种语言和某个具体的框架;也就是说任何人都可以使用自己最熟悉最顺手的语言以及框架来做移动端自动化测试;
- 不要为了移动端的自动化测试而重新发明轮子,重新写一套惊天动地的api;也就是说webdriver协议里的api已经够好了,拿来改进一下就可以了;
- 移动端自动化测试应该是开源的;
二.初步认识appium工作过程
- appium有C/S模式
- appium是基于webdriver协议对移动设备自动化api扩展而成的,所有具有和webdriver一样的特性,比如多语言支持。
- webdriver是基于http协议的,第一连接会建立一个session会话,并通过post发送一个json告知服务端相关测试信息。
- 对于Android来说,4.2以后是基于UiAutomator框架实现查找注入事件的,4.2以前则是instrumentation框架的,并封装成一个叫Selendroid提供服务。
- 客户端只需要发送http请求实现通讯,意味着客户端就是多语言支持的。
- appium服务端是node.js写的,所以安装那个平台都是先安装node,然后npm install -g appium(需要FQ)。
三.环境搭建
需要安装的软件
- JDK:1.8.0_221 环境变量如上图
- Python:3.7.4 环境变量如上图,安装完成会自动完成。
Cmd运行 python
3.node.js:10.16.3
1.安装时会自动添加
2.安装完成后在安装路径下新建两个文件夹node_global、node_cache
3/CMD npm –v 有版本号显示
4.android-sdk 当前最新 最好用SDK Manager.exe下载
Android SDK Tools, Android SDK Platform-Tools,Android SDK Bulid-tools
三个需要文件夹配置Path环境辨率如上图
cmd 运行 adb version 会显示版本号
cmd 运行 android 会执行 Android SDK Manager
5.Appium:1.13.0
官网进行下载安装appium-installer.exe
6.Appium-docto
安装 npm install -g appium-doctor
node_modules\.bin添加到系统环境变量Path中
运行appium-doctor 出现如下图表示环境成功
7.Appium-Python-Client安装步骤
pip install Appium-Python-Client
8.连接手机设备
确定打开开发者模式USB调试
adb device –l 查看连接状态并且能够查看 device:xxx
四.简单使用Appium客户端
前期准备
"platformName": "Android", 测试安卓
"platformVersion": "7", 安卓版本
"deviceName": "leo", adb devices –l 可获取devices名称
aapt dump badging + xxx.apk 可以获取 appPackage,appActivity 2个数据
查看如下字样获取
package: name='cn.gloud.client.mobile'
launchable-activity: name='cn.gloud.client.mobile.init.InitActivity'
"appPackage": "cn.gloud.client.mobile",
"appActivity": "cn.gloud.client.mobile.init.InitActivity"
如下为启动格来云游戏实例:
1 from appium import webdriver 2 3 caps = {} 4 caps["platformName"] = "Android" 5 caps["platformVersion"] = "7" 6 caps["deviceName"] = "leo" 7 caps["appPackage"] = "cn.gloud.client.mobile" 8 caps["appActivity"] = "cn.gloud.client.mobile.init.InitActivity" 9 10 driver = webdriver.Remote("http://localhost:4723/wd/hub", caps) 11 12 el1 = driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.HorizontalScrollView/android.widget.FrameLayout/android.widget.LinearLayout[2]/android.view.View") 13 el1.click() 14 el2 = driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.support.v4.view.ViewPager/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.EditText") 15 el2.click() 16 el2.send_keys("账号") 17 el3 = driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.support.v4.view.ViewPager/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.RelativeLayout/android.widget.RelativeLayout[1]/android.widget.EditText") 18 el3.send_keys("密码") 19 el4 = driver.find_element_by_id("cn.gloud.client.mobile:id/login_btn") 20 el4.click() 21 el5 = driver.find_element_by_id("cn.gloud.client.mobile:id/ad_close_img") 22 el5.click() 23 el6 = driver.find_element_by_id("cn.gloud.client.mobile:id/ad_close_img") 24 el6.click() 25 26 driver.quit()