1、Appium简介
Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。
它使用WebDriver协议驱动IOS,Android和Windows应用程序。
2、Appium优势
可以跨平台同时支持android、ios
支持多种语言,java、python、php、Ruby等等
不用为复杂的环境发愁
如果你有selenium经验,直接上手。
3、Appium架构原理
运行原理
我们的电脑(client)上运行自动化测试脚本,调用的是webdriver的接口,appium server接收到我们client上发送过来的命令后他会将这些命令转换为UIautomator认识的命令,然后由UIautomator来在设备上执行自动化。
Appium的架构原理如图所示,由客户端(Appium Client)和服务器(Appium Server)两部分组成,客户端与服务器端通过JSON Wire Protocol进行通信。
Appium
Appium服务器是Appium框架的核心。它是一个基于Node.js实现的HTTP服务器。Appium服务器的主要功能是接受从Appium客户端发起的连接,监听从客户端发送来的命令,将命令发送给bootstrap.jar(iOS手机为bootstrap.js)执行,并将命令的执行结果通过HTTP应答反馈给Appium客户端。
Bootstrap.jar
Bootstrap.jar是在Android手机上运行的一个应用程序,它在手机上扮演TCP服务器的角色。当Appium服务器需要运行命令时,Appium服务器会与Bootstrap.jar建立TCP通信,并把命令发送给Bootstrap.jar;Bootstrap.jar负责运行测试命令。
Appium客户端
它主要是指实现了Appium功能的WebDriver协议的客户端Library,它负责与Appium服务器建立连接,并将测试脚本的指令发送到Appium服务器。现有的客户端Library有多种语言的实现,包括Ruby、Python、Java、JavaScript(Node.js)、Object C、PHP和C#。Appium的测试是在这些Library的基础上进行开发的。
4、Appium组件
Appium Server
Appium Server就是Appium的服务端——一个web接口服务,使用Node.js实现。
安装完nodejs后执行$ npm install -g appium既可以安装appium-server
Appium Desktop
Appium Desktop是一款适用于Mac,Windows和Linux的开源应用程序,它以美观而灵活的用户界面为您提供Appium自动化服务器的强大功能。 它是几个Appium相关工具的组合:
1.Appium Server的图形界面。 您可以设置选项,启动/停止服务器,查看日志等不需要使用Node 的NPM来安装Appium,因为Node运行时与Appium Desktop捆绑在一起。
2.可以使用Inspector查看应用程序的元素,获取有关它们的基本信息,并与它们进行基本的交互。
Appium Desktop与Appium不同。 Appium Desktop是Appium的图形前端,带有其他工具。 Appium Desktop以其自己的节奏发布,并拥有自己的版本控制系统。 就像国内很多定制的Android系统有自己版本号,但是都是基于一个Android系统版本封装的。版本号不一定与Andriod原生系统版本号一致。如:魅族的flyme6.0系统的内核是Android 5.1
另外一个重要原因Appium的搭建环境较为复杂所以才有了appium-desktop,只需要傻瓜式安装,Appium-desktop集成了nodejs,appium-server,解决了nodejs与appium-server的版本兼容问题
Appium GUI
Appium GUI是Appium desktop的前身。
这个也是把Appium server封装成了一个图形界面,降低使用门槛,如同最初的操作系统Dos都是敲命令,后面都是图形界面操作系统,如Windows系统。很多初学者对下面这个界面应该不陌生吧,这个就是Windows版本的Appium GUI界面。测试人员可以手动启动,配置相关server 服务,如果不用这个启动的话,需要命令启动服务。因为大部分教程都是基于这个GUI来讲解的,所以很多人一说Appium就认为是这个。
该产品的Windows版本在2015年的AppiumForWindows_1_4_16_1.zip之后就停止更新了。目前版本可以使用,但是封装的不是最新的Appium版本,而是1.4.16版本。如果要使用最新的桌面版需要使用Appium Desktop。
Appium Clients
因为Appium是一个C/S结构,有了服务端的肯定还有客户端,Appium
Clients就是客户端,它会给服务端Appium Server发送请求会话来执行自动化任务。就像我们浏览器访问网页,浏览器是客户端,通过操作发送请求服务器来获取数据。我们可以使用不同的客户端浏览器(IE,Firefox,Chrome)访问一个网站。 Appium客户端可以使用不同的语言来实现,如Python,java等。具体详见下表:
说白了就是和selenium一样有一个Appium的库,通过Appiim方法编写自动化测试用例
5、环境搭建
Node.js
Nodejs下载地址http://nodejs.cn/
Appium
Appium-doctor
Appium-desktop
Appium-Python-Client(Rotbotframework自带,无需安装)
Python
JDK
Andriod SDK
安装Appium-desktop则不需要安装nodejs和appium,且appium-desktop不需要配置环境变量
5.1.1Appium 安装
Appium Server其实可以通过命令 npm install -g appium来安装。不过由于众所周知的网络原因,直接使用这样安装会非常非常慢,甚至会安装失败,所以我们可以使用国内镜像来安装。
选用的镜像是 淘宝NPM镜像
在安装之前需要先安装下cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
再使用如下命令安装最新版
cnpm install -g appium
或者使用指定安装版本
cnpm install appium@1.15.1 -g
5.1.2Appium 配置
安装完成之后可以使用如下命令查看appium的安装路径
使用where appium
命令 appium即可启动appium服务,appium -v查看版本
注意:如果装了Appium-desktop不要配置Appium-desktop的环境变量,否则运行appium命令时会弹出Appium-desktop的界面
5.1.3Appium退出
按键Ctrl+c 选择y 即可退出
5.2.1安装Appium-desktop
下载地址:https://github.com/appium/appium-desktop/releases
Appium-desktop工具已封装了Appium server和Node.js依赖环境。appium-desktop是我们初学者最容易上手的工具。唯一的缺陷不能通过命令行启动服务,所以安装了Appium-sever,可以通过CMD来启动appium服务,多用于同时使用多台设备进行兼容性测试时需要启动多个服务
5.2.2使用Appium-desktop
5.2.2.1启动服务
Host输入127.0.0.1,port输入4723点击Start Sever
注意:一定要以管理员身份启动Appium-desktop
5.2.2.2.使用“高级选项”启动服务器(Advance),一般不需要改动
注意:如果在启动app或者服务器时提示找不到Android-Home,点击Edit Configurations,查看Android-HOME是否正确,修改正确之后点击保存
5.2.2.3.服务器预设(Presets)
使用高级服务器选项,就可以保存配置以备以后使用。只需将preset保存在“Advanced”选项卡上,就能够在“preset”选项卡中回忆并启动服务器。
5.2.2.4.链接APP进行元素定位调试
注意:链接的是App,进行纯H5测试请使用Web页面直接定位元素,只有进行原生元素定位才需要使用
Step1:点击右上角放大镜
Step2:点击,填写Capability的JSON
{
"platformName": "Android",
"deviceName": "10.101.54.105",
"platformVersion": "8.0",
"appPackage": "com.xxxx.android",
"appActivity": ".LoadingActivity"
}
点击Save As…,下次直接可以在Saved
Capability Set2中找到方便使用
Step 3 点击Start Session即可打开同程旅游
左边是应用程序的屏幕截图,可以在应用程序中使用鼠标来模拟操作。
中间是应用程序的层次结构,表示为XML。您可以通过单击它,或者通过点击屏幕快照视图中的元素来导航这棵树,会被强调。
右侧是细节视图,当一个元素被突出显示时,它的信息会出现在检查器右侧的细节视图中。这个细节视图包括对元素的潜在操作,以及元素属性的表。这些属性在决定如何使用特定的Appium定位策略访问元素时是有价值的。选择一个元素,还可以“Tap”元素,或者“发送键”到元素(如果它是一个文本字段)。
如果手机上所处页面和快照不一致时,刷新截图快照
输入定位语法调试,确认定位正确
录制脚本,注意一定要用红框里面的Tap、send可以去操作元素,直接手机上操作元素是没什么用的,一般不会使用该功能
6.H5自动化测试
6.1纯H5启动Chrome常见问题
1)Appium安装失败,打开运行USB安装,关掉手机自动锁屏
Starting test: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试
2019102618:49:50.377 : FAIL : No application isopen
2019102618:49:50.379 : WARN : Keyword 'CapturePage Screenshot' could not be run on failure: No application is open
2019102618:49:50.382 : FAIL :
WebDriverException: Message: An unknown server-side error occurred while processing the
command. Original error:
Error
executing adbExec.
Original error: 'Command ''C:\\Program Files
(x86)\\Android\\platform-tools\\adb.exe' -P 5037 -s
33f6c01a0704
shell pm install -g /data/local/tmp/appium_cache/3d97225b036c28750562ef8962defee6b1af19a4.apk'
exited
with code 1'; Stderr: 'Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]'; Code: '1'
2)无法连接默认证书,以管理员身份运行该Appium可解决
Starting test: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试
2019102618:53:14.880 : FAIL : No application isopen
2019102618:53:14.881 : WARN : Keyword 'CapturePage Screenshot' could not be run on failure: No application is open
2019102618:53:14.883 : FAIL :
WebDriverException: Message: An unknown server-side error occurred while processing the
command. Original error: Could not
sign with default certificate. Original error Command ''C:\\Program
Files\\Java\\jdk-13.0.1\\bin\\java.exe' -jar 'C:\\Program Files\\Ap
pium\\resources\\app\\node_modules\\appium\\node_modules\\appium-adb\\jars\\sign.jar' C:\\Users\\lenovo\\AppData\\Local\\T
emp\\2019926-14192-1e1rvyx.e7xbi\\appium-uiautomator2-server-debug-androidTest.apk
--override' exited with code 1
Endingtest: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试
3)手机自带浏览器不是chrome,安装Chrome浏览器,不能直接用自带浏览器,自带浏览器没有对外开放Web调试
Starting test: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试
2019102618:57:56.765 : FAIL : No application isopen
2019102618:57:56.767 : WARN : Keyword 'CapturePage Screenshot' could not be run on failure: No application is open
2019102618:57:56.769 : FAIL :
WebDriverException: Message: An unknown server-side error occurred while processing the
command. Original error: 'app' option is required for reinstall
Endingtest: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试
4)Chrome版本与driver不对应,替换Appium里面的driver
Starting
test: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试
2019102620:05:11.368 : FAIL : No application isopen
2019102620:05:11.369 : WARN : Keyword 'CapturePage Screenshot' could not be run on failure: No application is open
2019102620:05:11.372 : FAIL :
WebDriverException: Message: An unknown server-side error occurred while processing the
command. Original error: No Chromedriver found
that can automate Chrome '78.0.3904'. See
https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md
for more details. You could also try to enable automated chromedrivers
download server feature
Endingtest: WanleAutoTestForweixin.WanleAutoTestForweixin.Weixn自动化.H5页面测试
1.appium服务chromedriver驱动文件的位置:appium服务程序的根目录下 .\resources\app\node_modules\appium\node_modules\appium-chromedriver\chromedriver\win
2.也可以通过webdriver.Remote第二参数中的,修改属性‘chromedriverExecutableDir’指定使用chromedriver驱动位置(desired_caps[‘chromedriverExecutableDir’]=‘D:/WanleAutoTestForH5/ChromeDrivers/78.0.3904.70’,注意是目录,不需要写到chromedriver.exe)
6.2 H5自动化测试
Step1:连接手机
Step2:在手机上按照Chrome浏览并且下载相应版本driver
Step3:连接手机上的Chrome
Open Application关键字本质上只有两个参数,remote_url为Appium服务、desired_caps是一个可变关键字参数,所以我们使用关键字时才可以输入很多key-value格式的参数
关于desired_caps
desired_caps要求一个Capability的设置
那么,什么是Capability
desired capability的功能是配置Appium会话。他们告诉Appium服务器想要自动化的平台和应用程序。
Desired Capabilities是一组设置的键值对的集合,其中键对应设置的名称,而值对应设置的值。(如:"platformName": "Android")Desired Capabilities主要用于通知Appium服务器建立需要的Session。
公用Capability
其他:
中文输入
Open Application传入unicodeKeyboard=true resetKeyboard=true
允许创建ChromeDriverSessions,用于原生嵌入H5时,切入H5页面进行H5自动化
recreateChromeDriverSessions=true
1)H5元素定位
和Web自动化一样直接在WebChrome中打开进行定位,但是亲测只支持css与xpath定位,其他不可用
2)元素操作
与Selenium基本一样input text click element等
3)手机常用特有关键字
Tap(x,y):按照坐标点击
Swipe(x1,y1,x2,y2):滑动
Press Keycode(keycode)模拟键盘输入,比如搜索框输入完成之后需回车才能进入下一步
Android Keycode参照下列资料,IOS不支持使用Keycode模拟键盘输入:
dhttps://www.cnblogs.com/yc-c/p/9014771.html
其他关键字