楼主: AlexQin

[转载] appium简明教程

[复制链接]
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
11#
 楼主| 发表于 2017-4-25 10:10 | 只看该作者
appium简明教程(4)——appium client的安装
appium client是对webdriver原生api的一些扩展和封装。它可以帮助我们更容易的写出用例,写出更好懂的用例。
appium client是配合原生的webdriver来使用的,因此二者必须配合使用缺一不可。
从本节开始,教程的内容将涵盖3个语言,ruby/python/java。

使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
12#
 楼主| 发表于 2017-4-25 10:14 | 只看该作者
安装appium client
ruby篇(一定要在线安装)
ruby的appium client叫做appium lib,为什么是这样就不解释了,总之是历史原因。
首先update rubygem和bundler(说老实话,真的不需要,但官方文档上这么写)
  1. gem update --system ;\
  2. gem update bundler
复制代码

然后使用gem安装
  1. gem uninstall -aIx appium_lib ;\(这个也不是必须的)
  2. gem install --no-rdoc --no-ri appium_lib
复制代码


使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
13#
 楼主| 发表于 2017-4-25 10:15 | 只看该作者
python篇(尽量在线安装)
推荐使用pip安装
  1. pip install Appium-Python-Client
复制代码

当然了也可以在Pipy上下载源码安装
  1. tar -xvf Appium-Python-Client-X.X.tar.gz(windows上用7zip可以解压)
  2. cd Appium-Python-Client-X.X
  3. python setup.py install
复制代码

最后,也可以通过github安装(要git客户端)
  1. git clone git@github.com:appium/python-client.git
  2. cd python-client
  3. python setup.py install
复制代码

使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
14#
 楼主| 发表于 2017-4-25 10:16 | 只看该作者
java篇(在线安装)
java的话用maven安装就可以了
  1. <dependency>
  2.   <groupId>io.appium</groupId>
  3.   <artifactId>java-client</artifactId>
  4.   <version>1.3.0</version>
  5. </dependency>
复制代码

当然了,也可以自己下载jar包,请自行选择最新版本。

使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
15#
 楼主| 发表于 2017-4-26 14:07 | 只看该作者
appium简明教程(5)——appium client方法一览
appium client扩展了原生的webdriver client方法
下面以java代码为例,简单过一下appium client提供的适合移动端使用的新方法
  • resetApp()
  • getAppString()
  • sendKeyEvent()
  • currentActivity()
  • pullFile()
  • pushFile()
  • pullFolder()
  • hideKeyboard()
  • runAppInBackground()
  • performTouchAction()
  • performMultiTouchAction()
  • tap()
  • swipe()
  • pinch()
  • zoom()
  • getNamedTextField()
  • isAppInstalled()
  • installApp()
  • removeApp()
  • launchApp()
  • closeApp()
  • endTestCoverage()
  • lockScreen()
  • shake()
  • complexFind()
  • scrollTo()
  • scrollToExact()
  • openNotifications()
  • Context Switching: .context(), .getContextHandles(), getContext())


新增的locator
  • findElementByAccessibilityId()
  • findElementsByAccessibilityId()
  • findElementByIosUIAutomation()
  • findElementsByIosUIAutomation()
  • findElementByAndroidUIAutomator()
  • findElementsByAndroidUIAutomator()

这些方法主要覆盖了3大类:
  • driver扩展:比如增加了resetApp等操作app的方法
  • action扩展:增加一些移动端的特有的action(怎么描述呢,相当于是移动端 特有的操作),比如swipe,shake(嗯,有了这个方法就可以让代码帮你摇一摇了)等;
  • locator扩展:增加了一些移动端专属的定位策略

下一节我们开始介绍使用appium启动android模拟器

使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
16#
 楼主| 发表于 2017-4-26 14:10 | 只看该作者
appium简明教程(6)——启动appium及android模拟器
一般情况下,我们都从命令行启动appium。
windows下,dos命令窗口输入
  1. appium
复制代码

如果该命令报错,那么请重装appium
  1. npm install -g appium
复制代码

如果安装出错,请自行更换npm源。
  1. npm -g --registry http://registry.cnpmjs.org  install appium
复制代码

然后请打开android的模拟器,如果没有请新建一个虚拟设备。请自行解除设备锁定(手动把屏幕解锁了),以防万一。
下面的代码以启动android原生的计算器程序为例

使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
17#
 楼主| 发表于 2017-4-26 14:11 | 只看该作者
ruby篇
  1. require 'appium_lib'
  2. caps   = { caps:{ platformName: 'Android', appActivity: '.Calculator', appPackage: 'com.android.calculator2' },
  3.            appium_lib: { sauce_username: nil, sauce_access_key: nil } }
  4. driver = Appium::Driver.new(caps).start_driver
复制代码

讨论:可以看出ruby lib里面的Appium::Driver类实际上就是原生的webdriver类的子类,当然了,由于ruby语法灵活,也可以使用monkey patch来实现类似功能。


使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
18#
 楼主| 发表于 2017-4-26 14:13 | 只看该作者
python篇
  1. from appium import webdriver
  2. desired_caps = {}
  3. desired_caps['platformName'] = 'Android'
  4. desired_caps['platformVersion'] = '4.2'
  5. desired_caps['deviceName'] = 'Android Emulator'
  6. desired_caps['appPackage'] = 'com.android.calculator2'
  7. desired_caps['appActivity'] = '.Calculator'
  8. driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
复制代码

讨论:webdriver.Remote实际上就是原生webdriver的子类,另外Remote()构造函数的第一个参数中需要显示指定appium server监听的端口


使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
19#
 楼主| 发表于 2017-4-26 14:14 | 只看该作者
java篇
新建java项目时候,请注意将selenium-webdriver以及appium client的jar包导入
  1. import io.appium.java_client.AppiumDriver;
  2. import org.openqa.selenium.By;
  3. import org.openqa.selenium.WebElement;
  4. import org.openqa.selenium.remote.CapabilityType;
  5. import org.openqa.selenium.remote.DesiredCapabilities;
  6. DesiredCapabilities capabilities = new DesiredCapabilities();
  7. capabilities.setCapability(CapabilityType.BROWSER_NAME, "");//这句不是必须的
  8. capabilities.setCapability("deviceName","Android Emulator");
  9. capabilities.setCapability("platformVersion", "4.4");
  10. capabilities.setCapability("platformName","Android");
  11. capabilities.setCapability("appPackage", "com.android.calculator2");
  12. capabilities.setCapability("appActivity", ".Calculator");
  13. AppiumDriver driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
复制代码

讨论:AppiumDrvier是原生webdriver的子类。

在这里我们可以看到,新建driver的时候必须要指定一个DesiredCapabilities 对象,该对象究竟是何方神圣,我们下一节会仔细讲解。


使用道具 举报

回复
论坛徽章:
1056
紫蜘蛛
日期:2015-09-22 15:53:22紫蜘蛛
日期:2015-10-15 13:48:52紫蜘蛛
日期:2015-10-15 14:45:48紫蜘蛛
日期:2015-10-15 14:47:47紫蜘蛛
日期:2015-10-15 14:48:45九尾狐狸
日期:2015-09-22 15:53:22九尾狐狸
日期:2015-10-15 13:50:37九尾狐狸
日期:2015-10-15 14:45:48九尾狐狸
日期:2015-10-15 14:47:47九尾狐狸
日期:2015-10-15 14:48:45
20#
 楼主| 发表于 2017-4-27 09:05 | 只看该作者
appium简明教程(7)——Desired Capabilities详解
Desired Capabilities在启动session的时候是必须提供的。
Desired Capabilities本质上是key value的对象,它告诉appium server这样一些事情:
  • 本次测试是启动浏览器还是启动移动设备?
  • 是启动andorid还是启动ios?
  • 启动android时,app的package是什么?
  • 启动android时,app的activity是什么?
    本文版权归乙醇所有,欢迎转载,但请注明作者与出处,严禁用于任何商业用途

Appium的Desired Capabilities是扩展了webdriver的Desired Capabilities的,下面的一些通用配置是需要指定的:
  • automationName:使用哪种自动化引擎。appium(默认)还是Selendroid?
  • platformName:使用哪种移动平台。iOS, Android, orFirefoxOS?
  • deviceName:启动哪种设备,是真机还是模拟器?iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, etc…
  • app:应用的绝对路径,注意一定是绝对路径。如果指定了appPackage和appActivity的话,这个属性是可以不设置的。另外这个属性和browserName属性是冲突的。
  • browserName:移动浏览器的名称。比如Safari’ for iOS and ‘Chrome’, ‘Chromium’, or ‘Browser’ for Android;与app属性互斥。
  • udid:物理机的id。比如1ae203187fc012g。

下面这些属性是android平台特定的:
  • appActivity:待测试的app的Activity名字。比如MainActivity, .Settings。注意,原生app的话要在activity前加个”.”。
  • appPackage:待测试的app的java package。比如com.example.android.myApp, com.android.settings。
    本文主要讨论android平台的appium测试方法和技巧,因此在这里就不列出ios设备特定的属性了。

更多信息请参考官方文档
在这里我们发现,我们经常要获取app的package和activity名字,那么有什么工具可以让我们方便的获取到这些信息呢?下一节讲回答这个问题。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表