中文 Appium API 文档

该文档是Testerhome官方翻译的

源地址:https://github.com/appium/appium/tree/master/docs/cn

官方网站上的:http://appium.io/slate/cn/master/?ruby#about-appium

 

中文Appium API 文档

 

第一章:关于appium

1.1 appium客户端

客户端类库列表及Appium服务端支持

 

这些类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON 格式selenium命令以及额外的移动设备控制相关的命令,如多点触控手势和屏幕朝向。

 

Appium客户端类库实现了Mobile JSON Wire Protocol(一个标准协议的官方扩展草稿)和W3C Webdriver spec(一个传输不可预知的自动化协议,该协议定义了MultiAction 接口)的元素。

 

Appium 服务端定义了官方协议的扩展,为Appium 用户提供了方便的接口来执行各种设备动作,例如在测试过程中安装/卸载app。这就是为什么我们需要Appium 特定的客户端,而不是通用的Selenium 客户端。当然,Appium 客户端类库只是增加了一些功能,而实际上这些功能就是简单的扩展了Selenium 客户端,所以他们仍然可以用来运行通用的selenium会话。

语言/框架 Github版本库以及安装指南

Ruby https://github.com/appium/ruby_lib

Python https://github.com/appium/python-client

Java https://github.com/appium/java-client

JavaScript (Node.js) https://github.com/admc/wd

Objective C https://github.com/appium/selenium-objective-c

PHP https://github.com/appium/php-client

C# (.NET) https://github.com/appium/appium-dotnet-driver

RobotFramework https://github.com/jollychang/robotframework-appiumlibrary

 

1.2 appium介绍

Appium 介绍

 

Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用。

 

所谓的“移动原生应用”是指那些用 iOS 或者 Android SDK 写的应用。所谓的“移动 web 应用”是指使用移动浏览器访问的应用(Appium 支持 iOS 上的 Safari 和 Android 上的 Chrome)。所谓的“混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。比如,像 Phonegap,可以帮助开发者使用网页技术开发应用,然后用原生代码封装,这些就是混合应用。

 

重要的是,Appium 是一个跨平台的工具:它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,这样大大增加了 iOS 和 Android 测试套件间代码的复用性。

 

想知道 Appium 如何支持平台,版本和自动化形态的详细信息,请参见platform support doc。

Appium 的理念

 

为了满足移动自动化需求,Appium 遵循着一种哲学,重点体现于以下4个需求:

 

你无需为了自动化,而重新编译或者修改你的应用。

你不必局限于某种语言或者框架来写和运行测试脚本。

一个移动自动化的框架不应该在接口上重复造轮子。(移动自动化的接口应该统一)

无论是精神上,还是名义上,都必须开源。

 

Appium 设计

 

那么 Appium 架构是如何实现这个哲学呢?为了满足第一条,Appium 真正的工作引擎其实是第三方自动化框架。这样,我们就不需在你的应用里植入 Appium 相关或者第三方的代码。这意味着你测试使用的应用与最终发布的应用并无二致。我们使用以下的第三方框架:

 

iOS: 苹果的 UIAutomation

Android 4.2+: Google's UiAutomator

Android 2.3+: Google's Instrumentation. (Instrumentation由单独的项目Selendroid提供支持 )

 

为了满足第二点,我们把这些第三方框架封装成一套 API,WebDriver API.WebDriver(也就是 "Selenium WebDriver") 指定了客户端到服务端的协议。

(参见 JSON Wire Protocol)。使用这种客户端-服务端的架构,我们可以使用任何语言来编写客户端,向服务端发送恰当的 HTTP 请求。

目前已经实现了大多数流行语言版本的客户端,这意味着你可以使用任何测试套件或者测试框架。客户端库就是简单的HTTP 客户,可以以任何你喜欢的方式潜入你的代码。换句话说,Appium 和 WebDriver 客户端不是技术意义上的“测试框架”,而是“自动化库”。你可以在你的测试环境中随意使用这些自动化库!

 

事实上 WebDriver 已经成为 web 浏览器自动化的标准,也成了 W3C 的标准 —— W3C Working Draft。我们又何必为移动做一个完全不同的呢?所以我们扩充了WebDriver 的协议,在原有的基础上添加移动自动化相关的 API 方法,这也满足了第三条理念。

 

第四条就不用说了,Appium 是开源的。

Appium 概念

 

C/S 架构<br/>

Appium 的核心是一个 web 服务器,它提供了一套 REST 的接口。它收到客户端的连接,监听到命令,接着在移动设备上执行这些命令,然后将执行结果放在 HTTP响应中返还给客户端。事实上,这种客户端/服务端的架构给予了许多的可能性:比如我们可以使用任何实现了该客户端的语言来写我们的测试代码。比如我们可以把服务端放在不同

的机器上。比如我们可以只写测试代码,然后使用像 Sauce Labs 这样的云服务来解释命令。

 

Session<br/>

自动化始终围绕一个session进行,客户端初始化一个seesion(会话)来与服务端交互,不同的语言有不同的实现方式,但是他们最终都是发送为一个POST请求给服务端,请求中包含一个JSON对象,被称作“desired capabilities”。此时,服务端就会开启一个自动化的 session,然后返回一个 session ID,session ID将会被用户发送后续的命令。

 

Desired Capabilities<br/>

Desired capabilities 是一些键值对的集合 (比如,一个 map 或者 hash),客户端将这些键值对发给服务端,告诉服务端我们想要怎么测试。比如,我们可以把platformName capability 设置为 iOS,告诉 Appium 服务端,我们想要一个iOS 的 session,而不是一个 Android 的。我们也可以设置 safariAllowPopups capability 为 true,确保在 Safari 自动化 session 中,我们可以使用 javascript 来打开新窗口。参见 capabilities 文档,查看完整的 capabilities 列表。

 

Appium Server<br/>

Appium server 是用 Node.js 写的。我们可以用源码编译或者从 NPM 直接安装。

 

Appium 服务端<br/>

 

Appium 服务端有很多语言库 Java, Ruby, Python, PHP, JavaScript 和 C#,这些库都实现了

Appium 对 WebDriver 协议的扩展。当使用 Appium 的时候,你只需使用这些库代替常规的 WebDriver 库就可以了。

你可以从这里看到所有的库的列表。

 

Appium.app, Appium.exe<br/>

 

我们提供了 GUI 封装的 Appium 服务端下载,它封装了运行 Appium服务端的所有依赖,而不需要担心怎样安装Node.js。其中还包括一个Inspector工具,可以帮助你检查应用的界面层级,这样写测试用例时更方便。

Getting Started

 

恭喜!你现在有足够的知识来使用 Appium 了。 来我们回到 getting started doc 继续了解更加

细节的需求和指南。

 

第二章:进阶指南

2.1 selenium配置

Selenium Grid

 

使用 <b>"--nodeconfig"</b> 服务器参数,你可以在本地 selenium grid 里注册你的 appium 服务器。

 

> node . -V --nodeconfig /path/to/nodeconfig.json

 

在 node 的配置文件里,你需要定义 <b>"browserName"</b>,<b>"version"</b> 和 <b>"platform"</b>。

基于这些参数,selenium grid 会将你的测试定向到正确的设备上去。你还需要配置你的 <b>host</b> 详细信息和

<b>selenium grid</b> 的详细信息。你可以在 <a href="http://code.google.com/p/selenium/source/browse/java/server/src/org/openqa/grid/common/defaults/GridParameters.properties">这里</a> 找到详细的参数列表和描述信息。

 

一旦你启动了 appium 服务器并且在 grid 里注册了信息,你会在 grid 控制台发现你的设备:

 

"http://<b><grid-ip-adress></b>:<b><grid-port></b>/grid/console"

Grid 配置文件例子

 

{

"capabilities":

[

{

"browserName": "<e.g._iPhone5_or_iPad4>",

"version":"<version_of_iOS_e.g._6.1>",

"maxInstances": 1,

"platform":"<platform_e.g._MAC_or_ANDROID>"

}

],

"configuration":

{

"cleanUpCycle":2000,

"timeout":30000,

"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",

"url":"http://<host_name_appium_server_or_ip-address_appium_server>:<appium_port>/wd/hub",

"maxSession": 1,

"register": true,

"registerCycle": 5000,

"hubPort": <grid_port>,

"hubHost": "<Grid_host_name_or_grid_ip-address>"

}

}

 

可以在 <a href="http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/Platform.html">这里</a>查看有效的 platform 参数。

如果没有给出url、host和 port,配置会自动指向本地:whatever-port-Appium-started-on。

如果你的Appium服务和Selenium Grid服务没有运行在同一台机器上,为确保Selenium Grid连接正常,请在你的host & url docs上使用外部其它名称或IP地址,而非localhost 和 127.0.0.1

 

2.2 自动化混合应用

自动化混合应用

 

Appium 其中一个理念就是你不能为了测试应用而修改应用。为了符合这个方法学,我们可以使用 Selenium 测试传统 web 应用的方法来测试混合 web 应用 (比如,iOS 应用里的元素 "UIWebView" ),这是有可能的。这里会有一些技术性的复杂,Appium 需要知道你是想测试原生部分呢还是web部分。幸运的是,我们还能遵守 WebDriver 的协议。

 

混合 iOS 应用

混合 Android 应用

 

自动化混合 iOS 应用

 

在你的 Appium 测试里,你需要以下几步来和 web 页面交涉:

 

前往到应用里 web 视图激活的部分。

调用 GET session/:sessionId/window_handles

这会返回一个我们能访问的 web 视图的 id 的列表。

使用你想访问的这个 web 视图的 id 作为参数,调用 POST session/:sessionId/window

(这会将你的 Appium session 放入一个模式, 在这个模式下,所有的命令都会被解释成自动化web视图而不是原生的部分。比如,当你运行 getElementByTagName,它会在 web 视图的 DOM 上操作,而不是返回 UIAElements。当然,一个 Webdriver 的方法只能在一个上下文中有意义,所以如果在错误的上下文,你会收到错误信息。)

如果你想停止 web 视图的自动化,回到原生部分,你可以简单地使用 execute_script 调用 "mobile: leaveWebView" 方法来离开 web 层。

 

在 iOS 真机上运行

 

appium 使用一个远程调试器建立连接来实现和 web 视图的交互。当在模拟器上执行下面例子的时候,我们可以直接建立连接,因为模拟器和 appium 服务器在同一台机器上。

 

当在真机上运行用例时,appium 无法直接访问 web 视图,所以我们需要通过 USB 线缆来建立连接。我们使用 ios-webkit-debugger-proxy建立连接。

 

使用 brew 安装最新的 ios-webkit-debug-proxy。在终端运行一下命令:

 

# 如果你没有安装 brew 的话,先安装 brew。

> ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"

> brew update

> brew install ios-webkit-debug-proxy

 

你也可以通过 git 克隆项目来自己安装最新版本:

 

# Please be aware that this will install the proxy with the latest code (and not a tagged version).

> git clone https://github.com/google/ios-webkit-debug-proxy.git

> cd ios-webkit-debug-proxy

> ./autogen.sh

> ./configure

> make

> sudo make install

 

一旦安装好了, 你就可以启动代理:

 

# 将udid替换成你的设备的udid。确保端口 27753 没有被占用

# remote-debugger 将会使用这个端口。

> ios_webkit_debug_proxy -c 0e4b2f612b65e98c1d07d22ee08678130d345429:27753 -d

 

<b>注意:</b> 这个 ios-webkit-debug-proxy 需要 <b>"web inspector"</b> 打开着以便建立连接。在 <b> settings > safari > advanced </b> 里打开它。请注意 web inspector <b>在 iOS6 时候加入的</b> 以前的版本没有。

Wd.js Code example

 

// 假设我们已经有一个初始化好了的 `driver` 对象。

driver.elementByName('Web, Use of UIWebView', function(err, el) { // 找到按钮,打开 web 视图

el.click(function(err) { // 引导到 UIWebView

driver.windowHandles(function(err, handles) { // 得到能访问的视图列表。

driver.window(handles[0], function(err) { // 因为只有一个,所以选择第一个。

driver.elementsByCss('.some-class', function(err, els) { // 通过 css 拿到元素。

els.length.should.be.above(0); // 肯定有元素。

els[0].text(function(elText) { // 得到第一个元素的文本。

elText.should.eql("My very own text"); // 比较匹配文本。

driver.execute("mobile: leaveWebView", function(err) { // 离开web视图上下文。

// 如果你想的话,做一些原生应用的操作。

driver.quit(); // 退出。

});

});

});

});

});

});

});

 

想看到具体的上下文,请看该node 的例子

*我们正在完善 web 视图下面的方法。加入我们!

 

Wd.java 代码例子

 

//配置 webdriver 并启动 webview 应用。

DesiredCapabilities desiredCapabilities = new DesiredCapabilities();

desiredCapabilities.setCapability("device", "iPhone Simulator");

desiredCapabilities.setCapability("app", "http://appium.s3.amazonaws.com/WebViewApp6.0.app.zip");

URL url = new URL("http://127.0.0.1:4723/wd/hub");

RemoteWebDriver remoteWebDriver = new RemoteWebDriver(url, desiredCapabilities);

 

// 切换到最新的web视图

for(String winHandle : remoteWebDriver.getWindowHandles()){

remoteWebDriver.switchTo().window(winHandle);

}

 

//在 guinea-pig 页面用 id 和 元素交互。

WebElement div = remoteWebDriver.findElement(By.id("i_am_an_id"));

Assert.assertEquals("I am a div", div.getText()); //验证得到的文本是否正确。

remoteWebDriver.findElement(By.id("comments")).sendKeys("My comment"); //填写评论。

 

//离开 webview,回到原生应用。

remoteWebDriver.executeScript("mobile: leaveWebView");

 

//关闭应用。

remoteWebDriver.quit();

 

Wd.rb cucumber 的例子

 

TEST_NAME = "Example Ruby Test"

SERVER_URL = "http://127.0.0.1:4723/wd/hub"

APP_PATH = "https://dl.dropboxusercontent.com/s/123456789101112/ts_ios.zip"

capabilities =

{

'browserName' => 'iOS 6.0',

'platform' => 'Mac 10.8',

'device' => 'iPhone Simulator',

'app' => APP_PATH,

'name' => TEST_NAME

}

@driver = Selenium::WebDriver.for(:remote, :desired_capabilities => capabilities, :url => SERVER_URL)

 

## 这里切换到最近一个窗口是因为在我们的例子里这个窗口一直是 webview。其他的用例里,你需要自己指定。

## 运行 @driver.window_handles,查看 appium 的日志,找出到底哪个窗口是你要的,然后找出相关的数字。

## 然后用 @driver.switch_to_window(number),切换过去。

 

Given(/^I switch to webview$/) do

webview = @driver.window_handles.last

@driver.switch_to.window(webview)

end

 

Given(/^I switch out of webview$/) do

@driver.execute_script("mobile: leaveWebView")

end

 

# 你可以使用 CSS 选择器在你的 webview 里来选择元素

 

And(/^I click a webview button $/) do

@driver.find_element(:css, ".green_button").click

end

 

用 ruby 调试 web 视图:

 

我在我的帮助类里创建了一个快速方法来定位web元素,无论它在哪一个窗口视图。

(这非常有帮助,特别是你的 webview 的 id 变化或者你用同一份代码来测试 Android 和 iOS。)

https://gist.github.com/feelobot/7309729

自动化混合 Android 应用

 

Appium 通过 Chromedriver 内建混合应用支持。Appium 也可以使用 Selendroid 做为 4.4 之前的设备对 webview 支持的背部引擎。(你需要在 desired capability 里指定 "device": "selendroid")。然后:

 

前往你应用里 web 视图激活的部分。

用 "WEBVIEW" 做窗口句柄调用 POST session/:sessionId/window , 比如 driver.window("WEBVIEW")。

(这会将你的 Appium session 放入一个模式, 在这个模式下,所有的命令都会被解释成自动化web视图而不是原生的部分。比如,当你运行 getElementByTagName,它会在 web 视图的 DOM 上操作,而不是返回 UIAElements。当然,一个 Webdriver 的方法只能在一个上下文中有意义,所以如果在错误的上下文,你会收到错误信息。)

如果要停止web上下文里的自动化,回到原生部分的自动化,简单地使用 "NATIVE_APP" 调用 window 方法。比如 driver.window("NATIVE_APP")。

 

注意:我们可以像上面说的,使用同样的策略。然而,Selendroid 使用 WEBVIEW/NATIVE_APP 窗口设置策略。 Appium 常规的混合支持也使用这种策略。

Wd.js 代码例子

 

// 假设我们已经初始化了一个 `driver` 实例。

driver.window("WEBVIEW", function(err) { // 选择唯一的 WebView

driver.elementsByCss('.some-class', function(err, els) { // 通过 CSS 取得元素

els.length.should.be.above(0); // 验证元素存在

els[0].text(function(elText) { // 得到第一个元素的文本

elText.should.eql("My very own text"); // 验证文本内容

driver.window("NATIVE_APP", function(err) { // 离开 webview 上下文

// 可以做些原生应用的测试

driver.quit(); // 关闭 webdriver

});

});

});

});

 

Wd.java 代码例子

 

//配置 webdriver 并启动 webview 应用。

DesiredCapabilities desiredCapabilities = new DesiredCapabilities();

desiredCapabilities.setCapability("device", "Selendroid");

desiredCapabilities.setCapability("app", "/path/to/some.apk"); 

URL url = new URL("http://127.0.0.1:4723/wd/hub");

RemoteWebDriver remoteWebDriver = new RemoteWebDriver(url, desiredCapabilities);

 

// 切换到最新的web视图

remoteWebDriver.switchTo().window("WEBVIEW");

 

//在 guinea-pig 页面用 id 和 元素交互。

WebElement div = remoteWebDriver.findElement(By.id("i_am_an_id"));

Assert.assertEquals("I am a div", div.getText()); //验证得到的文本是否正确。

remoteWebDriver.findElement(By.id("comments")).sendKeys("My comment"); //填写评论。

 

//离开 webview,回到原生应用。

remoteWebDriver.switchTo().window("NATIVE_APP");

 

//关闭应用。

remoteWebDriver.quit();

 

2.3 用例迁移

把appium 0.18.x上的测试用例集迁移到appium1.x上

 

Appium 1.0 已经从先前的版本中移除了一部分过时的特性, 这个指导文档会帮助你了解使用Appium 1.0需要做的具体改变.

新的客户端库

 

你需要关注的最大的改变是利用新的appium的client libraries来替换原生的WebDriver ciients. 访问Appium client list 去寻找符合你自己编程语言的客户端库吧. 在每个客户端的网站上都可以找到用于集成到你代码中的依赖库相关介绍和下载

 

基本上, 你需要做如下的改变(以Python作为例子)

 

 

from appium import webdriver

 

替换原来的:

 

from selenium import webdriver

 

新的适配参数

 

下面的适配参数将不再使用

* device

* version

 

取而代之的是利用下面的配置参数

 

platformName ("iOS" 或者 "Android")

platformVersion (你希望测试的os版本)

deviceName (你想用的设备, 比如 "iPhone Simulator")

automationName ("Selendroid" 如果你想使用Selendroid的话, 否则可以省略)

 

app 配置参数保持不变, 但是特指非浏览器的app, 如果你想使用类似Safari或者Chrome这样的浏览器, 你需要设置browserName. 这代表app和browserName是互斥的.

 

我们把appium的配置参数都规范为驼峰拼写法(camelCase), 这代表着原来的app-package或者app-wait-activity现在会变成appPackage和appWaitActivity. 当然目前android的app package和activity都已经是自动探测了, 大部分情况下你可以省略这两个配置项.

新的定位方式

 

我们已经移除了下面的定位方式

 

name

tag name

 

我们增加了accessibility_id定位方法去做过去name做的事情. 具体的细节还得跟你使用的Appium客户端库有关.

 

tag name已经被替换为class name. 所以想通过UI的类型来定位某个元素, 你需要使用class name定位方式

 

关于class name和xpath的定位方式: 现在需要使用完整的全类名, 这意味着如果你有一个如下的定位用的xpath

 

//table/cell/button

 

现在需要改成

 

//UIATableView/UIATableCell/UIAButton

 

如果是android的话, button需要改变成android.widget.Button

 

我们也增加了如下的定位方式

 

-ios uiautomation

-android uiautomator

 

根据你使用的客户端去相应的使用新的定位方式

使用xml, 不再是json了

 

App source方法先前返回JSON, 现在修改成返回XML. 所以如果你有代码是依赖解析app source的, 那么就需要更新

通过context支持混合应用, 不再是window了

 

以前混合app的切换支持是通过"windows"

 

window_handles

window

switch_to.window

 

现在Appium支持"context" 概念了, 要获得当前环境下所有的上下文(contexts), 或者特定的context, 你可以用

 

driver.contexts

current = driver.context

 

在这些context之间切换, 可以使用

 

driver.switch_to.context("WEBVIEW")

 

没有了execute_script("mobile: xxx")

 

所有的mobile:方法都已经被移除, 并且被替换为appium client libraries的原生方法. 这意味着如果一个方法调用原来的方式是

driver.execute("mobile: lock", [5])

现在需要更新为

driver.lock(5)

在这个地方lock已经变成了原生的客户端方法. 当然具体的调用细节在不同的客户端库中的实现可能会有所差别.

 

特别需要注意的是, 手势(gesture)方法已经被替换为TouchAction / MultiAction API, 它允许更强大通用的组合手势的自动化. 可以参考你的客户端库的具体用法.

 

这就是全部啦, 祝迁移愉快

 

(文档由testerhome.com翻译, 欢迎更多热爱技术的同学加入到翻译中来, We Love Appium)

 

2.4 appium设置

Settings

 

Settings 是 Appium 引入的一个新的概念。 它目前还没有被纳入 Mobile JSON Wire Protocol 及 Webdriver 标准之中。

 

Settings 是一种用来配置 Appium 服务器的方式。

 

Settings 有以下特点:

- 可变的,它在同一会话中是可以被修改的。

- 唯一的,它在被测应用会话中是唯一的。 它在每创建一个新会话时会被重置。

- 可控的,它在自动化测试过程中控制着 Appium 服务器的运行。 它们不会被用来控制被测应用或被测终端。

 

在 Android 环境中 以 ignoreUnimportantViews 设置举例,该参数在 Android 环境中可以被设置成忽略所有与当前视图无关的元素,它将使测试过程更加有效率。 然而当我们希望能够访问被忽略的元素时,我们必须在将 ignoreUnimportantViews 设置成 true 后,重新修改成 false 。

 

另外也可以通过 Settings 配置让 Appium 忽略所有当前不可见的元素。

 

Settings 可以通过以下 API 方法进行配置:

 

POST /session/:sessionId/appium/settings

 

以 JSON 格式提交 key:value 键值对形式的Settings配置。 

 

{

settings: {

ignoreUnimportantViews : true 

}

 

GET /session/:sessionId/appium/settings

 

以 JSON 格式返回当前所有 Settings 配置。 

 

{

ignoreUnimportantViews : true 

}

 

其它 Settings 配置参考

 

"ignoreUnimportantViews" -该参数值为 true 或 false。 如果你希望能够尽量减少测试过程的交互确认过程,或希望测试脚本能更快的执行,可以在 Android 终端环境下使用 setCompressedLayoutHeirarchy() 参数。它将忽略所有被标记为 IMPORTANT_FOR_ACCESSIBILITY_NO 或 IMPORTANT_FOR_ACCESSIBILITY_AUTO(以及那些被认为不是很重要的系统元素)的元素。

 

第三章:appium 设置

3.1 加速器管理

Intel® 硬件加速器管理

 

如果你发现android模拟器太慢, 并且你的系统运行在Intel® 的cpu上. 那么你可以尝试下HAXM, HAXM能够让你充分利用硬件虚拟化技术来加速android模拟器。

 

要安装HAXM, 你可以打开Android SDK Manager, 你可以在Extras中发现这个安装选项;

你可以在Intel官方网站找到所有相关的文档;

这将需要x86的模拟镜像;

利用Intel的包来安装HAXM; Android SDK Manager有时候会安装不成功,这主要取决于你安装的版本是否兼容。

 

3.2 android 设置

Android Setup

 

使用前,你需要安装node.js(版本大于等于0.10)。 请参照 instructions for your flavor of linux。

 

当node.js安装成功后,请安装 Android SDK。

运行'android' tool(位于SDK,tool文件目录下)。

 

运行'android' tool 来安装大于等于Level 17的API。

 

(如果你想从Appium的源码来运行,可在真机或者模拟器上用 Apache Ant 来编译bootstrap jar包)。

 

最后,将环境变量$ANDROID_HOME设置为 Android SDK 的路径。例如,如果你将Android SDK 解压到 /usr/local/adt/,你需要把这个路径加到你的shell环境变量中去:

 

export ANDROID_HOME="/usr/local/adt/sdk"

 

现在就可以启动Appium了!如果你在源码中运行Appium请运行

./reset.sh --android 版本从Appium checkout会安装所有的依赖。

老版本的额外安装

 

当android的版本是2.3到4.1的时候,appium用的是selendroid。 当它检测到时低版本时,它会自动应用Selendroid。但是需要配置一些额外的设置如果从source运行。

 

已经安装 Maven 3.1.1 或更新 (mvn)

运行 ./reset.sh --selendroid 从checkout的Appium源码

 

(运行Appium Android 测试)

 

在Linux上运行,启动一个API大于等于level17的AVD。 在源文件目录下运行 (appium) 在安装好 NPM, 或者 node。如果你选择的是从源代码方式运行。

参照 server documentation 来了解所有命令和参数。

注意

 

Android 加速模拟器需要存在,它有自己的局限性,如果想了解更多,请看这里 page。

如果你想运行任何Appium的测试,或者任何强大的命令,确保你的 hw.battery=yes 在 AVD's config.ini文件中。

Selendroid 需要你APP中的如下权限: <uses-permission android:name="android.**permission.INTERNET"/>, 如果你在使用selendroid或者低版本的android(如版本2.3到4.1),请确保你的App已设置internet权限。

 

3.3 部署iOS app 到手机上

部署iOS app 到手机上

 

准备在真机上执行appium测试, 需要如下准备:

 

用特殊的设备参数来构建app

使用 fruitstrap, 这是一个第三方程序,可以用来部署你构建的app到手机上

 

Xcodebuild 命令的参数:

 

新的参数运行指定设置. 参考 developer.apple.com:

 

xcodebuild [-project projectname] [-target targetname ...]

[-configuration configurationname] [-sdk [sdkfullpath | sdkname]]

[buildaction ...] [setting=value ...] [-userdefault=value ...]

 

这有一个资料来参考可用的设置

 

CODE_SIGN_IDENTITY (Code Signing Identity)

介绍: 标识符,指定一个签名。

例如: iPhone Developer

 

PROVISIONING_PROFILE 已经从可用的的命令中消失了,但还是有必要设置的。

 

在xcodebuild命令中设置 "CODE_SIGN_IDENTITY" & "PROVISIONING_PROFILE":

 

xcodebuild -sdk <iphoneos> -target <target_name> -configuration <Debug> CODE_SIGN_IDENTITY="iPhone Developer: Mister Smith" PROVISIONING_PROFILE="XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX"

 

成功的话, app会构建到如下目录 <app_dir>/build/<configuration>-iphoneos/<app_name>.app

用Fruitstrap进行部署

 

clone一个fruitstrap的fork版本在ghughes version ,这个已经不再维护. 已确认该fork可用unprompted fork, 但是其它的据说也可用。

 

clone成功的话, 执行 make fruitstrap

然后, 然后复制生成的 fruitstrap到app的所在的目录或上级目录下。

 

运行fruitstrap 通过输入以下命令 (命令是否可用依赖于你fork的 fruitstrap):

 

./fruitstrap -d -b <PATH_TO_APP> -i <Device_UDID>

 

如果是为了持续集成,你可以发现很有用的方法来记录fruitstrap命令行和日志文件中的记录, 像这样:

 

./fruitstrap -d -b <PATH_TO_APP> -i <Device_UDID> 2>&1 | tee fruit.out

 

在node服务启动前fruitstrap进行需要被结束, 一个方法是扫描fruitstrap的输出来得知app完成启动。 有一个有效的方法是通过一个Rakefile 和一个 go_device.sh 脚本:

 

bundle exec rake ci:fruit_deploy_app | while read line ; do 

echo "$line" | grep "text to identify successful launch" 

if [ $? = 0 ] 

then 

# Actions 

echo "App finished launching: $line" 

sleep 5 

kill -9 `ps -aef | grep fruitstrap | grep -v grep | awk '{print $2}'` 

fi

done

 

一旦fruitstrap的进程被结束, node 服务就可以启动并且appium测试可以被执行!

 

下一步:

在真机上运行appium

 

3.4 Android并发测试

Android并发测试

 

Appium提供了在一台设备上启动多个Android会话的方案,而这个方案需要你输入不同的指令来启动多个Appium服务来实现。

 

启动多个Android会话的重要指令包括:

 

-p Appium的主要端口

-U 设备id

-bp Appium bootstrap端口

--chromedriver-port chromedriver端口(当使用了webviews或者chrome)

--selendroid-port selendroid端口(当使用了selendroid)

 

更多参数的解释详见 here。

 

如果我们有两台设备,设备ID分别为43364和32456,我们应该用下面的命令启动来两个不同的Appium服务:

 

node . -p 4492 -bp 2251 -U 32456

 

node . -p 4491 -bp 2252 -U 43364

 

只要你的Appium和Appium bootstrap端口介于0和65536即可,并且保证是两个不同的端口以便两个Appium服务不会监听相同的端口。确认你的-u参数绑定正确的设备ID。这可以让Appium知道连接哪台设备,所以参数一定要准确。

 

如果你用了chromedriver或selendroid,不同的服务要设置不同的端口。

iOS并发测试

 

不幸的是,IOS不能进行本地并发测试。跟Android不一样,IOS在同一时间只能启动一个版本的模拟器来运行多个测试。

如果你想在IOS上进行并发测试,你需要用到Sauce。只需上传你的Appium测试脚本到Sauce,它就可以按照你的设置执行多个IOS或Android的并发测试。在Sauce上执行测试的更多信息,详见here。

 

3.5 Appium支持的平台

Appium支持的平台

 

Appium支持很多的运行平台和测试方式(包括原生、混合应用、内嵌浏览器、真机、模拟器等)。这篇文档主要用来让大家明确在使用

Appimu的时候支持的平台版本和上述测试方式的必备条件。

iOS平台支持

 

请移步到Running on OS X: iOS 。这里介绍了在iOS系统下使用Appium的必备条件和安装说明。

 

版本号:6.1,7.0,以及7.1。

支持设备:iPhone模拟器,iPad模拟器以及iPhones和iPads真机。

是否支持原生应用:支持。同时支持模拟器中调试应用版本和正确签名的真机ipa。其他相关支持由苹果的UIAutomation框架提供。

是否支持内置移动浏览器:支持。Safari浏览器已经通过测试。对于真机,则需要安装调试工具ios-webkit-remote-debugger。很遗憾,对于Safari的原生界面的自动化是不支持的。更多信息请移步至mobile web doc 。

是否支持混合应用:支持。同样对于真机需要安装调试工具ios-webkit-remote-debugger,更多详情请移步至hybrid doc 查看详情。

是否支持在同一个session中执行多个应用的自动化:不支持。

是否支持同时再多个设备上执行自动化:不支持。

是否支持第三方提供应用:只支持在模拟器上有限的第三方应用(例如:喜好设置、地图等)。

是否支持自定义的、非标准UI控件的自动化:仅支持很少一部分。最好对控件添加可识别信息,以方便对元素进行一些基础的自动化操作。

 

Android平台支持

 

请移步至 Running on OS X: Android,Running on Windows,或者Running on Linux 获得在不同操作系统下android平台对appium的支持和安装配置文档。

 

支持版本:android 2.3平台及以上。

android 4.2平台及以上通过Appium自有的UiAutomator类库支持。默认在自动化后台。

从android 2.3到4.3平台,Appium是通过绑定Selendroid,实现自动化测试的,你可以到android开发社区的Instrumentation。(仪表盘)中查看相关介绍。Selendroid拥有一套不同的命令行和不同的profile文件(这部分差距正在逐步缩小)。要获得在后台运行自动化的权限,需要配置automationName 组件的值为 Se

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Appium官方文档是使用Appium进行移动应用自动化测试的开发人员的重要资源。它提供了开发环境的设置指南、框架概述、API参考和示例代码等内容。 在Appium官方文档中,你可以找到以下主要内容: 1. 安装指南:包括操作系统的要求、Appium安装方法和依赖项的安装。 2. 快速入门:提供了一个简单的示例,帮助你快速了解如何使用Appium进行基本的测试。 3. 设定测试环境:这部分包含了针对各种移动平台(如Android和iOS)的配置指南,以及如何设置模拟器和真机测试环境。 4. 使用WebDriver协议:这里介绍了如何使用WebDriver协议来控制移动应用程序,包括启动应用、查找元素和执行操作等。 5. 手势操作和触摸事件:这一部分详细介绍了如何模拟手势操作和触摸事件,如滑动、缩放和长按等。 6. 定位元素:这里介绍了不同类型的元素定位方法,如ID、XPath、类名等,以及如何处理WebView中的元素。 7. 测试案例管理:这部分讲解了如何组织和管理测试案例,包括测试套件、测试用例和断言等。 8. 并行测试和分布式测试:这一章节介绍了如何同时运行多个测试脚本以及如何在多台设备上分布式执行测试。 9. Appium服务器配置:这里包含了Appium服务器的详细配置选项,包括日志配置、代理设置和自定义事件等。 10. 扩展和插件:这一部分讲解了如何扩展Appium,以满足特定的测试需求,并介绍了一些常用的插件。 这只是Appium官方文档中的一小部分内容。你可以访问Appium官方网站(https://appium.io/documentation/)以获取完整的文档指南和更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值