Appium⾃动化测试1.Appium介绍
1,appium是开源的移动端⾃动化测试框架;
2,appium可以测试原⽣的、混合的、以及移动端的web项⽬;
3,appium可以测试ios,android应⽤(当然了,还有firefoxos);
4,appium是跨平台的,可以⽤在osx,windows以及linux桌⾯系统上;
2.Appium基本原理
在Android端,appium基于WebDriver协议,利⽤Bootstrap.jar,最后通过调⽤
⽤UiAutomator的命令,实现App的⾃动化测试。
UiAutomator测试框架是AndroidSDK⾃带的AppUI⾃动化测试Java库。
另外由于UiAutomator对H5的⽀持有限,appium引⼊了chromedriver以及
safaridriver等来实现基于H5的⾃动化。
2.1.appium在android端⼯作流
1.client端也就是我们testscript是我们的webdriver测试脚本。
2.中间是起的Appium的服务,Appium在服务端起了⼀个Server(4723端⼝),
跟seleniumWebdriver测试框架类似,Appium⽀持标准的WebDriver JSONWireProtocol。在这⾥提供它提供了⼀套REST的接⼝,AppiumServer接
收webdriverclient标准rest请求,解析请求内容,调⽤⽤对应的框架响应
操作。
3.appiumserver会把请求转发给中间件Bootstrap.jar,它是⽤java写的,安装
在⼿机上.Bootstrap监听4724端⼝并接收appium的命令,最终通过调⽤⽤UiAutomator的命令来实现。
4.最后Bootstrap将执⾏的结果返回给appiumserver。
5.appiumserver再将结果返回给appiumclient。
3.Appium安装配置
3.1.限制
如果你在windows上安装appium,你没法使⽤预编译专⽤于OSX的.app⽂件,
你也将不能测试IOSapps,因为appium依赖OSX专⽤的库来⽀持IOS测试。这
意味着你只能通过在mac上来运⾏IOS的app测试。这点限制挺⼤。
3.2.傻⽠式安装node.js
3.2.1.查看是否安装成功
nodejs安装完毕后,需要配置环境变量
在PATH中添加:D:\ProgramFiles\nodejs;
3.3.傻⽠式安装Appium
3.3.1.成功界⾯
3.4.配置appium环境变量
D:\Appium\node_modules\.bin
3.5.打开控制台,查看appium环境
3.5.1.appium-doctor
3.6.配置Android—环境变量
D:\androidSDK
3.7.Python中配置appium环境(联⽹)
进⼊:D:\python\Scripts
打开控制台:
pipinstallAppium-Python-client
3.8.总结:
1) androidsdk安装完毕后,需要配置环境变量
新建ANDROID_HOME
在PATH中添加:%ANDROID_HOME%:\.....
2) nodejs安装完毕后,需要配置环境变量
在PATH中添加:D:\ProgramFiles\nodejs;
3) appium安装完毕后,需要配置环境变量
D:\ProgramFiles(x86)\Appium\node_modules\.bin;
4) 配置好后,启动cmd,
输⼊node-v,查看node安装版本
输⼊appium-doctor检查appium的安装环境是否成功,
5) 安装Python,配置环境变量
4.第⼀个脚本⽰例
4.1.⾸先通过eclpse启动android模拟器
4.2.启动Appium
4.3.点击左上⾓有“机器⼈”的按钮:
选择你的android版本
4.4.点击右上⾓的“三⾓”按钮启动Appium。
4.5.通过Python编写⾃动化测试脚本。
desired_caps是⼀个字典,⽤于在appiumserver与⼿机端建⽴会话关系时,⼿机端需要告诉服务端设备相关的⼀些参数,根据这些参数服务端可以做出相应的处理。
4.6.画出来的这三个,是需要在脚本中正确填写的
4.7.执⾏效果
5.Appium界⾯内容解析
5.1.整体介绍
主页⾯顶部从左到右依次是:
1、AndroidSettings:android相关的设置
2、GeneralSettings:全局设置,设置appium相关的内容
3、DeveloperSettings:开发者设置,⼀般不⽤需要关⼼
4、About:appium相关信息,不需要关⼼
5、Inspector:查元素⽤的,windows⽆法使⽤,MAC可以使⽤,windows可
以不⽤关⼼。
6、LaunchAppium:启动appium按钮
7、右下⾓清除⽇志按钮。
5.2.AndroidSettings
此页⾯分为Application、La、、四部分,先看图
之后分析分别有什么作⽤
5.2.1.1、Application
本模块设置被测试app信息,如安装包路径、包名、activity等ApplicationPath:选择要测试的apk,选择他后与全局设置中的
Pre-LaunchApplication配合,启动appium时会先把apk安装到⼿机(或模拟器)再启动app。
Package:根据apk⽣成的app包名,之前提到过的,我们这个包的⾝份证,我
们需要通过这个去到包,不然我们安装后我们通过什么去辨别这些包呢?WaitforPackage:等待包名。
LaunchActivityactivityActivity
就是其中的⼀个个⽹页,我们启动app时需要去运⾏的activity,这⾥我们填写
⾸次启动页⾯的activity。我们选择第⼀启动的activity与aapt命令⽣成的launchable-activity:name⼀致
WaitforActivity:和上⾯的差不多,意思是等待某个Activity打开,⽤的时间不是
很多,做了解。
UseBrowser:测试浏览器选择这项,与前五项互逆。及选择了他前五个就不可以选择。
FullReset:将所有设置复位。即将⼿机(模拟器)恢复到启动到appium前的状
态
NoReset:不需要重置⼿机(模拟器)中的app
6.2.2.LaunchDevice
本模块是模拟器设置,针对的是SDK创建的模拟器,不是genymotion等其
他模拟器。
LaunchAVD:要启动的模拟器名称。
DeviceReadyTimeout:等待模拟器启动时间。
Arguments:启动模拟器时需要的参数。
6.2.3.Capabilities
运⾏测试的相关信息。
PlatformName:测试平台,可以选择Android、FireFoxOS、MAC版的还可以选择IOS。
PlatformVersion:被测试⼿机(模拟器)版本。
DeviceName:设备名称,⼿机连接电脑后打开cmd输⼊adbdevices可获取。Language:被测试⼿机(模拟器)使⽤语⾔。为什么使用bootstrap?
Locale:被测试⼿机(模拟器)所属区域。
5.4.元素侦测:
这个按钮的功能和firebug的定位⼯具功能类似,但是他还有⼀个功能,他会检
测你的各个系统配置是否正确,如果前⾯各项参数不正确时,使⽤该功能会报错。如果你不正常连接⼿机也不⾏。还是建议⽤sdk⼯具⾥⾯⾃带的uiautomatorviewer。
5.5.启动服务
所有参数配置好后你需要做的就是启动appium服务,只有启动之后你才能够做⾃动化。
5.6.清除⽇志(右下⾓):
在写脚本、调试过程中会产⽣很多的⽇志,但是你可能想看的只是中间某个时间段的,那么你在这个时候可以将页⾯的⽇志清除。
6.Appium查看界⾯元素的⼯具
6.1.通过androidsdk的uiautomaterviewer获取元
素内容
uiautomatorviewer.bat是⼀个⽤来来扫描和分析Android应⽤程序的UI组件的GUI⼯具。具体使⽤⽅法可参考。打开uiautomatorviewer以后,可以看到uiautomatorviewer已经将模拟器的图形展⽰在上⾯了。
6.2.右侧xml节点详解
7.获取appPackage和appActivity
appPackage和appActivity进⾏appium⾃动化测试⾮常重要的两个参数,
我们所测试的APP不同,这两个参数肯定也是不⼀样的。那如何快速的获取这APP的这两个参数呢
7.1.⽅法⼀:通过cmd指令来获取
1.adbshell
2.dumpsysactivity|grepmFocusedActivity
3、adbshelldumpsysactivityactivities
7.2.⽅法⼆:使⽤Appium来获取
进⼊设置页,选择APK路径,下⾯就会显⽰包名和Activity名称
8.Appium常⽤定位⽅法讲解
对象定位是⾃动化测试中很关键的⼀步,也可以说是最关键的⼀步,毕竟你对象都没定位那么你想操作也不⾏,下⾯我们来看我们常⽤的⼀些定位⽅式。
8.1.ID定位(取resource-id的值):
⽆论是在web⾃动化还是app⾃动化中id都是唯⼀的,可能有的⼩伙伴看
到这⾥会有疑问,因为有的资料说是通过name定位是唯⼀的,为什么你这⾥是id呢,其实这个在之前是不冲突的,但是如果你⽤的是appium较新版本是不⾏
的,在新版本中name定位被去掉了,所以在以后的定位中不会有name定位了,
通常情况下我们也更喜欢⽤id进⾏定位。这⾥可能刚学的⼩伙伴会有疑问,
有的时候你的应⽤为什么没有id,或者说在这个⼿机上有但是另外的⼿机上
没有。1、开发没有添加。2、android版本是4.4以下的。
如果我们需要对“7”这个数字进⾏点击操作,
driver.find_element_by_id("com.android.calculator2:id/digit7").click()
8.3.className定位(取class的内容)
在实际⼯作中className定位⽤得相对⽽⾔会⽐较少。当你经常去看class
时你会发现很多的className是⼀样的,你没有办法对其进⾏唯⼀定位,下⾯我
们看下⾯两张图⽚
driver.find_element_by_class_name("android.widget.EditText").send_keys("111111")这种⽅式去定位,你会发现你永远定位不了密码栏,这是为什么呢?因为在设计
的时候如果你查的元素在页⾯有多个,系统会⾃动给你选择第⼀个,所以你永
远操作不了后⾯的
定位(需要使⽤uiautomator的定位⽅式,
使⽤text的内容)
使⽤这⾥需要注意⼀下,如果通过text定位的结果是个list,不能直接click。所
以如果要点击需要取数组的值,⽐如下⾯是点击到的第⼀个元素
8.5.xpath定位
xpath定位在web⾃动化中是最常见的,⽽且也是最有效的,使⽤xpath定
位避免了不到元素导致报错的问题,但是在app中使⽤xpath定位是⼀件很low
的事情。只要遇见使⽤xpath定位元素他的反应就会⽐较慢,⾃动化的⽬的是为
了提⾼效率,但是使⽤xpath后会降低效率,所以这⾥说很low
driver.find_element_by_xpath("//android.widget.TextView[@text='JavaScript']").click()
在xpath⾥⾯我们的语法是这样“//android.widget.TextView[@text='JavaScript']”,
这个和我们之前web的xpath⼀样,意思是查所有节点中节点为
android.widget.TextView(这⾥使⽤的是className,也可以使⽤id,系统会依次
去)并且他的text属性值为JavaScript,这样是否更容易理解呢?下来多练习。
这样的定位⽅式不推荐,效率很慢。
8.6.css_selector定位(webview)--加载⽹页--css
只适⽤于webview的html页⾯,继承⾃webdriver,与pc版本的UI测试⼀致
driver.find_element_by_css_selector()
8.7.link_text定位(webview)
只适⽤于webview容器中的html页⾯,继承⾃webdriver,与pc版本的UI测试
⼀致
driver.find_element_by_link_text()
8.8.源代码
10.Appium操作界⾯之触摸操作(了解)
10.1.规范中的可⽤事件有:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论