(我使用的是真机测试,使用模拟器还没有研究过)

一、关于Appium

  • 1,appium是开源的移动端自动化测试框架;
  • 2,appium可以测试原生的、混合的、以及移动端的web项目;
  • 3,appium可以测试ios,android应用(当然了,还有firefox os);
  • 4,appium是跨平台的,可以用在osx,windows以及linux桌面系统上;

具体用什么语言开发,看公司的业务和要求了,我选择的是java语言,主要是考虑自己对java语言比较熟悉。。。当然java语言有一个缺点就是速度不快,运行一个用例半天没结束实在是等得人着急。官方给的语言很多这些都是。

二、基本原理

Appium的官方网站http://appium.io/index.html?lang=zh

具体Appium的一些信息还是需要到官方网站去了解,我这里只是简单的Appium做一个介绍,当然,大部分还是参考了官方上的和别人的一些东西。

Appium可以驱动多种原生自动化框架,同时也提供基于SeleniumWebDriver JSONwire protocolapi。基于Dan Cuellar'siOS自动化上的成果,Appium通过驱动 AppleUIAutomation库来提供 iOS支持。而在新版本的Android上,我们使用 Uiautomator框架,老版本的Android,则使用了SelendroidFirefoxOS的支持依赖一个基于Gecko平台并且兼容 WebDriver的自动化驱动Marionette

具体工作模式如下

appium ios封装了apple的 Instruments框架,主要用了Instrument里的UIAutomation(Apple

的⾃自动化测试框架),然后在设备中注⼊入bootstrap.js进⾏行监听。

1.左边的WebDriver script是selenium测试脚本

2.中间是起的Appium的服务,Appium在这边起了⼀一个Server(4723端口),跟seleniumWebdriver测试框架类似,Appium⽀支持标准的WebDriverJSONWireProtocol 。在这里提供了一套web服务,Appium Server接收web driver标准请求,解析请求内容,调⽤用对应的框架响应操作。

如:脚本发送一个点击按钮的请求给appiumserver,

3.appium server调用instruments.js 启动⼀一个socket server,同时分出⼀一个⼦子进程运⾏行

instruments.app,将bootstrap.js(一个UIAutomation脚本)注⼊入到device⽤用于和外界进⾏行交

互。

、Appium的下载和安装

下载的地方很多,官方下载http://appium.io首页进去就有下载的链接。

另外这个网站不知道是怎么回事,提供了Appium下载的链接和一些资料,网站地址如下

https://bitbucket.org/appium/appium.app/downloads/

下载完dmg文件后怎么安装大家都知道了,图标如下

对于一般的测试,基本也就是用下面这几个功能了。

当然这只是安装完Appium这个软件。

接这点击苹果图标

真机测试的话,只需要填好这几个,第一个bundleId是应用程序的BundleId,选一下你的设备还有系统平台,最后是设备的UDID。设备的UDID的话会打开Xcode可以查看

配置好之后,点击launch,等一会

从上面一个界面变到下一个界面

点击左上角的放大镜

正常情况下是打不开inspector的。而且可以看到出现错误

error: Failed tostart an Appium session, err was: Error: Could not initialize ideviceinstaller;make sure it is installed and works on your system

提示我们没有安装ideviceinstaller

安装这个并不难我们只要使用如下的命令就可以

brew install   ideviceinstaller

如果没有安装brew是会报错的。

熟悉brew的人可能有很多,如果不熟悉的话建议看一下brew一些教程,这是一个很方便的工具可以安装应用等等各种。当然,我电脑里面并没有安装,所以我得安装一下brew。

安装brew很简单,一个命令

curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --strip1

不过我安装的时候报这个问题了,一看就知道怎么解决了,打开Xcode,然后再运行一次命令,OK。

这样就安装好了。

然后重新执行一下命令

brew install  ideviceinstaller

当然,这样就差不多了,不过,最后还有一个步骤,就是修改ios.js文件。

文件目录如下

/Applications/Appium.app/Contents/Resources/node_modules/appium/lib/doctor

进去后可以看到一个ios.js文件

打开文件,并修改原来的代码如下。注意不要改错。

修改完成后,环境基本就已经配置好了。

下面就是具体的自动化测试了

四 、基本的使用

点击Lanch等出现如下的log后,点击放大镜图标打开inspector

然后我们就可以看到里面的控件树了。看这个的目的是为了知道里面的结构便于我们写测试用例。

使用Record按钮可以对我们的动画进行录制,使用Refresh可以对界面进行刷新,在研究控件树的时候我手动跟新界面然后可以使用这个进行刷新。

record方法的主要作用就是可以对自己动画进行录制。然后生成相应的代码,比如我在控件树里面选择某个按钮后,点击下面的tap,swip,snake之类的,就可以看到下面生成的代码。这些代码显得太过简单了,这只是一个简单的示例真正的测试要比这个复杂很多了。

上面生成的java代码其实就是一个代码的模型。

好了下面打开Eclipse新建一个工程

建一个FirstTest类,导入具体的包后。包的下载地址:Appium java jar 包下载

publicclassFirstTest{
@SuppressWarnings("unused")
public IOSDriverdriver;
publicFirstTest()throws Exception{
}@Beforepublic voidsetup() throws Exception { DesiredCapabilities capabilities =new DesiredCapabilities();
capabilities.setCapability("appium-version","1.0");
capabilities.setCapability("platformName","iOS");capabilities.setCapability("platformVersion","8.1.2");capabilities.setCapability("deviceName","iPhone 5s");capabilities.setCapability("app","com.sina.weibo"); driver =new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"),                capabilities);   }@Afterpublic voidtearDown() throws Exception {driver.quit();}//应用打开10秒后锁屏@Testpublic voidfirstTest(){driver.lockScreen(10);}
}

如果你没写过测试用例,建议先学习一下,实在不行的话知道怎么运行就可以了,@After@Before是用例执行后,和执行前的准备,运行用例的话,右键某一条用例RunAs-JunitTest就可以

这样就可以了,用例就OK了。如果你写了很多用例,要都测试一遍的话,直接类目右键,RunAs-JunitTest就可以

driver是测试最基础最主要的类,可以看到我们在setup方法里面对driver进行了实例化,也可以直接在构造方法里面进行实例化。记得不要写漏了tearDown方法,如果缺少这个方法的话在很多用例一起测试的时候是不行的,只有使用这个才能完全的退出应用程序。

另外需要注意一点的是在使用的时候记得手机的锁屏时间调为永不锁屏,否则在多个用例一起执行的时候肯定是会出问题的。一些其他可能遇到其他的问题我的博客里面有

Appium一些错误总结

五,远程测试

开发当然我们也可以使用远程控制,远程控制只需要注意以下两点,首先是Appium里面的server记得是这样。

其次是在driver初始化的时候。只需要使用修改一下ip地址就好。127.0.0.1是本地的地址,修改为对应的服务机地址就好

开发的时候对方法多做一些封装,直接的使用API会对代码的复用会比较差。

下面是附上Appium的API

六、Appium 之 java API

AppiumDriver

getAppStrings()      默认系统语言对应的Strings.xml文件内的数据。

driver.getAppStrings(Stringlanguage)      查找某一个语言环境对应的字符串文件Strings.xml内数据

sendKeyEvent(intkey)       按下某个键,具体哪个键由key值决定,key值定义在AndroidKeyCode类中

sendKeyEvent(intkey, Integer metastate)  按下某个键的同时按下附加键(Ctrl/Alt/Shift等),具体是哪些键,由key值(AndroidKeyCode类中定义)和metastateAndroidKeyMetastate类中定义)决定。

currentActivity()        获取当前activity,比如(.ApiDemos

isAppInstalled(StringbundleId)   根据bundleId来判断该应用是否已经安装

installApp(StringappPath)    安装appappPath为应用的本地路径

removeApp(StringbundleId)   卸载app.bundleIdandroid中代表的是报名,而在ios中有专门的bundleId号。

closeApp() 关闭应用,其实就是按home键把应用置于后台

launchApp()  启动应用

resetApp()   closeApp然后在launchAPP

 pushFile(StringremotePath, byte[] base64Data)   将字符数组用64位格式写到远程目录的某个文件中。也可以理解为把本地文件push到设备上。

pullFile(StringremotePath)     将设备上的文件pull到本地硬盘上

pullFolder(StringremotePath)    将设备上的文件夹pull到本地硬盘上,一般远程文件为/data/local/tmp下的文件。

setNetworkConnection(NetworkConnectionSettingconnection)   设置手机的网络连接状态,可以开关蓝牙、wifi、数据流量。通过NetworkConnectionSetting中的属性来设置各个网络连接的状态。

getNetworkConnection()   得到当前网络的状态

openNotifications()   打开通知栏

runAppInBackground(intseconds)    resetApp类似,区别是resetApp关闭后立即启动,而这个方法是关闭后等待seconds秒后再启动。

hideKeyboard()   ios隐藏键盘

hideKeyboard(Stringstrategy, String keyName)   隐藏键盘,只能用于ios上。

performTouchAction(TouchActiontouchAction)   执行一个touch动作,该touch动作是由TouchAction封装的。

performMultiTouchAction(MultiTouchActionmultiAction)  执行多步touch动作,由MultiTouchAction封装的多步操作。

tap(intfingers, WebElement element, int duration)    点击element控件中心点按下,duration*5毫秒秒后松开,如此重复fingers次。

tap(intfingers, int x, int y, int duration)   点击(x,y)点按下,duration*5毫秒后松开,如此重复fingers次。

 swipe(intstartx, int starty, int endx, int endy, int duration)   (startx,starty)滑到(endx,endy),分duration步滑,每一步用时是5毫秒。

 pinch(WebElementel)    2个手指操作控件,从对角线向中心点滑动。

pinch(intx, int y)   以(x,y)为基准,计算得出(x,y-100,(x,y+100)两个点,然后2个手指按住这两个点同时滑到(x,y

zoom(WebElementel) pinch(el)的动作刚好相反。两个手指由控件的中心点慢慢向控件的左顶点后右底点滑动。

zoom(intx, int y) pinch(x,y)相反。两个手指从(x,y)点开始向(x,y-100)和(x,y+100)滑动。

getNamedTextField(Stringname) 一般用在ios中。根据accessibility id获得控件对象。

endTestCoverage(Stringintent, String path) 结束测试覆盖率的检测。(没用过,不太了解)path.ec文件的路径。

lockScreen(intseconds)   锁屏多少秒后解锁

shake() 模拟摇晃手机(目前还没实现)

scrollTo(Stringtext) 滚动到某个text属性为指定的字符串的控件

scrollToExact(Stringtext)  滚动到某个text属性包含传入的字符串的控件

context(String name设置上下文

getContextHandles()  可用上下文

getContext()  当前上下文

 rotate(ScreenOrientationorientation)  设置屏幕横屏或者竖屏

getOrientation() 获取当前屏幕的方向

findElementByIosUIAutomation(Stringusing)    利用ios中的uiautomation中的属性来获取控件

findElementsByIosUIAutomation(Stringusing) 和上面一样,不过获得的是多个控件

findElementByAndroidUIAutomator(Stringusing) 利用androiduiautoamtor中的属性来获取单个控件。

findElementsByAndroidUIAutomator(Stringusing) 和上面一样,但是该方法获得是多个控件

findElementByAccessibilityId(Stringusing) 利用accessibility id来获取单个控件

findElementsByAccessibilityId(Stringusing)利用accessibility id来获得多个控件

TouchAction    AppiumDriver的辅助类,主要针对手势操作,比如滑动、长按、拖动等。TouchAction的原理是讲一系列的动作放在一个链条中,然后将该链条传递给服务器。服务器接受到该链条后,解析各个动作,逐个执行。

press(WebElementel)  在控件上执行press操作。

press(intx, int y) 在坐标为(x,y)的点执行press操作

press(WebElementel, int x, int y) 在控件el的左上角的x坐标偏移x单位,y左边偏移y单位的坐标上执行press操作。

release() 释放操作,代表该系列动作的一个结束标志。

moveTo(WebElementel) el为目标,从另一个点移动到该目标上

 moveTo(intx, int y)以(x,y)点为目标,从另一个点移动到该目标上

moveTo(WebElementel, int x, int y)以控件el的左上角为基准,x轴向右移动x单位,y轴向下移动y单位。以该点为目标,从另一个点移动到该点上。

tap(WebElementel) 在控件的中心点上敲击一下

tap(intx, int y)在(x,y)点轻击一下

tap(WebElementel, int x, int y) 以控件el的左上角为基准,x轴向右移动x单位,y轴向下移动y单位。在该点上轻击。

waitAction() 代表一个空操作,等待一段时间

waitAction(int ms) 等待ms

longPress(WebElementel) 控件长按

longPress(intx, int y)  点长按

longPress(WebElementel, int x, int y)  偏移点长按

cancel() 取消执行该动作

perform()  执行该动作

Appium1.4 的简介、安装及其使用真机测试(iOS版)相关推荐

  1. iphone固件升级到3.1.3 ,HelloWorld成功安装到iPhone真机测试

    2010-07-04 iphone固件升级到3.1.3 , XCode iPhone SDK 3.1.3 HelloWorld成功安装到iPhone真机测试

  2. vs2013update4 vs-mda-remote cordova真机测试ios

    1.升级vs2013到update4 2.下载安装vs_langpack-enu英语语言包 3.下载安装vs2013mda目前版本0.3.1 如果开发andorid,需要android sdk,ant ...

  3. flash发布ipa安装到ios8真机测试

    花了很多时间才完成这个操作,现在把实现步骤记录一下. 苹果方面: 第一,你的有一个苹果开发者账号,登录macos的钥匙串程序,从颁发机构获取一个certificate证书.这一需要在macos上面操作 ...

  4. WebDriverAgent安装到iphone真机

    一.背景 Appium ios平台自动化测试需要将WebDriverAgent安装到真机上,通过它驱动手机进行自动化测试,但实际往真机安装过程中会遇到各种各样的问题,特此记录一下. 二.问题汇总: 1 ...

  5. 【Android】Android Studio下安装部署虚拟真机

    关于 Android Studio 下如何部署虚拟真机 首先点击 Android Studio 顶部工具(Tools) 点击 Device Manager 打开真机页面 选择 Virtual 下的 C ...

  6. mac M1 安装AndroidStudio打开真机调试

    我的安装全记录,有坑踩了已记录,不一定完全适用,可以看看. 文章目录 前言 一.安装Java环境 1.查看java环境 2.安装jdk 二.安装AndroidStudio 三.运行第一个HelloWo ...

  7. 2021-9-10 Unity Remote5, 发布到Android手机平台上的unity测试必备使用教程(亲身示范,真机测试)

    Unity Remote5, 发布到手机平台上的unity测试必备使用教程(亲身示范,真机测试) Unity Remote5 简介 Unity Remote5 安装 电脑上要做的工作 安装Androi ...

  8. Xamarin Android真机测试报错

    Xamarin Android真机测试报错 Xamarin Android真机测试报错,错误信息为INSTALL_CANCELLED_BY_USER.出现这个错误,通常都是真机上开发者选项设置错误.由 ...

  9. Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解

    Sonic 开源移动端云真机测试平台 - Agent端服务部署与安卓设备接入演示 一加8手机连接效果图展示 第一章:环境准备 ① agent-sources 资源包下载 ② Android SDK安装 ...

最新文章

  1. ​GEB:焦硕等发表生态位的系统发育保守性决定土壤古菌地理格局
  2. 病毒木马防御与分析实战
  3. [转贴]漫谈计算机图书翻译的四种境界
  4. [mybatis]映射文件_select_返回集合(List,Map)
  5. 新浪微博开发-添加子视图控制器设置颜色
  6. 四、spring boot 1.5.4 日志管理
  7. 大熊猫学生网页设计模板 静态HTML动物保护学生网页作业成品 DIV CSS大熊猫野生动物主题静态网页
  8. 【请收藏】自动化构建部署之Circle CI使用(GitHub/CircleCI/Vue)
  9. 数据结构期末复习之平衡二叉树
  10. Windows 7中打开IIS的远程访问
  11. 设计模式学习笔记七:常用设计模式原则总结
  12. pycharm——常用快捷键操作
  13. 无法导入某些项目,因为它们已经存在于Eclipse中的工作区错误中
  14. 简单修复360安全检测提示的发现robots文件漏洞
  15. 利用Windows内置工具测试硬盘速度
  16. 自学Java笔记2 2021-3-28更
  17. 回顾过去,展望未来——2014年终总结
  18. Oracle报错1031,dataguard 归档日志报1031错误的一次处理
  19. mysql替换成对括号
  20. Java和C语言谁能更胜一筹?

热门文章

  1. Flutter中Padding、Row 、Column 、Expanded 组件详解
  2. T-SQL 存储过程
  3. vue3-seamless-scroll无缝滚动组件
  4. github与码云的界面英文介绍
  5. (六)音视频 MediaCodec使用遇到的问题
  6. Java web 服务器连接MySQL数据库代码
  7. 关于Rxjava的Disposable
  8. 渗透工具之Ettercap
  9. 【学习笔记】SSM整合篇
  10. Facebook推出防止网络欺凌的“检举”功能