移动手势的自动化

## 移动手势的自动化

虽然Selenium WebDriver的规范支持数种手机交互的方式,但它的参数并不能简单地映射到底层设备使用的自动化函数 (像在iOS上的UIAutomation) 。为此,Appium在规范的最新版本中定义了新的触摸操作/多点触控 API
([https://dvcs.w3.org/hg/webdriver/raw-file/tip/webdriver-spec.html#multiactions-1](https://dvcs.w3.org/hg/webdriver/raw-file/tip/webdriver-spec.html#multiactions-1))。
注意,这跟在早期版本中使用原始JSON Wire Protocol 的触摸操作 API不同。

这些API可以让你使用多个驱动来建立任意手势。请参阅对应语言的Appium客户端文档,就可以找到使用这些API的例子。

### 触摸操作/多点触控 API的概述

### 触摸操作 (TouchAction)

*TouchAction* 对象包含一连串的事件。

在所有的appium客户端库中,触摸对象创建并给出一连串的事件。

规范中的可用事件有:
* 短按 (press)
* 释放 (release)
* 移动到 (moveTo)
* 点击 (tap)
* 等待 (wait)
* 长按 (longPress)
* 取消 (cancel)
* 执行 (perform)

这里有一个通过伪代码创建动作的例子:

```center
TouchAction().press(el0).moveTo(el1).release()
```

上述模拟用户按下一个元素,滑动他的手指到另一个位置,然后从屏幕上释放其手指。

Appium按顺序执行这些事件。你可以添加一个 `wait` 事件来控制相应手势的时间。

appium客户端库有不同的方式来实现上述例子,比如:你可以传递一个坐标值或一个元素给 `moveTo` 事件。同时传递坐标和元素,会将坐标和元素对应起来,但这不是绝对的。

调用 `perform` 事件发送整个事件序列给appium,从而使触摸手势在设备上运行。

Appium客户端还允许人们直接通过驱动程序对象执行触摸操作, 而不是调用触摸操作对象的`perform`事件。

在伪代码中,以下两个是等价的:

```center
TouchAction().tap(el).perform()

driver.perform(TouchAction().tap(el))
```

### 多点触控 (MultiTouch)

*MultiTouch* 对象是触摸操作的集合。

多点触控手势只有两个方法,添加 (`add`) 和执行 (`perform`) 。

`add` 用于将不同的触摸操作添加到一个多点触控中。

当 `perform` 被调用的时候,所有被添加到多点触摸中的触摸事件会被发送到appium并且被执行,就像它们同时发生一样。Appium会执行“触摸事件”中的第一个事件,然后第二个,以此类推。

用两只手指点击的代码示例:

```center
action0 = TouchAction().tap(el)
action1 = TouchAction().tap(el)
MultiAction().add(action0).add(action1).perform()
```

### 缺陷和解决方法

不幸的是有一个缺陷存在于iOS的7.x的模拟器上,ScrollViews无法识别由UIAutomation创建的手势 (在iOS上Appium使用的是UIAutomation) 。 为了实现此功能,我们已经提供了新的函数, `scroll`, 在大部分情况下可以让你实现跟ScrollView一样的功能!

**滚动**

要使用这特殊的功能,我们重写了driver中的 `execute` 和
`executeScript` 方法。 可以通过在命令前加 `mobile: ` 的前缀来使用滚动。
请参见下面的例子:

* **WD.js:**

```javascript
// javascript
// 把视图往下滑动
driver.execute("mobile: scroll", [{direction: ‘down‘}])
// 继续测试
```

* **Java:**

```java
// java
JavascriptExecutor js = (JavascriptExecutor) driver;
HashMap<String, String> scrollObject = new HashMap<String, String>();
scrollObject.put("direction", "down");
scrollObject.put("element", ((RemoteWebElement) element).getId());
js.executeScript("mobile: scroll", scrollObject);
```

**滑块的自动化**

**iOS**

* **Java**

```java
// java
// 滑动值使用0到1之间的数字以字符串的形式表示
// 例如,“0.1”代表10%,“1.0”代表100%
WebElement slider = driver.findElement(By.xpath("//window[1]/slider[1]"));
slider.sendKeys("0.1");
```

**Android**

与Android上的滑块进行交互的最佳方式是用触摸操作 (TouchActions) 。

时间: 2024-11-04 16:27:04

移动手势的自动化的相关文章

中文Appium API 文档

该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/slate/cn/master/?ruby#about-appium 中文Appium API 文档 第一章:关于appium1.1 appium客户端客户端类库列表及Appium服务端支持 这些类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON 格式selenium命令以及额外的

appium+python自动化26-模拟手势点击坐标(tap)【转载】

?# 前言:有时候定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?(面试经常会问)那就拿出绝招:点元素所在位置的坐标 tap用法 1.tap是模拟手指点击,一般页面上元素的语法有两个参数,第一个是positions,是list类型最多五个点,duration是持续时间,单位毫秒 tap(self, positions, duration=None): Taps on an particular place with up to five fingers, holding for a c

Android自动化之uiautomator(一)

一.uiautomator简介 Android SDK提供下述工具来支持自动化的功能界面测试: 1.uiautomatorviewer:扫描.分析待测应用的UI组件的图像工具. 2.uiautomator:包含创建定制功能界面测试API和自动化运行测试用例的引擎的JAVA类库. 优点:可以对所有操作进行自动化,操作简单: 缺点:Android版本需要高于4.0. 二.Uiautomator常用API了解 以下是uiautomator最基本最常用到的三个类,这里只是简单地介绍这三个类的作用,后续本

Android自动化之AccessibilityService

简介demo示例说明Manifest声明AccessibilityService的XML配置文件创建继承自AccessibilityService的服务类MainActivity检测服务是否开启UiAutomatorViewer参考 简介 由于许多Android用户由于某些原因(视力,身体,年龄)要求他们以不同的方式与手机设备交互. 安卓提供了辅助功能特性和服务来帮助这些用户更容易的操作他们的设备,包括文字转语音(原生不支持中文,国内ROM可能会有,我的测试OPPO自带中文哟!),触觉反馈,手势

Android自动化压力测试图解教程——Monkey工具

转自:http://blog.csdn.net/lfyx1357/article/details/7418133 有时候我们需要对一个软件进行压力测试,检查该软件的性能.如果是人工进行测试的话,效率会低很多,而且会比较枯燥.这时,Android中的一个命令行工具Monkey就可以为我们减轻很多重复而又繁琐的工作. 一.Monkey简介 至于Monkey的名字是有何而来的呢?这个没有去怎么考究,Monkey这个工具就是一个调皮的猴子,在App中乱按.乱摸.乱滚.乱跳.Monkey测试是Androi

使用MonkeyTest对Android客户端进行压力测试 自动化代码

1.monkey命令简介 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试. 先来看一条monkey命令 adb shell monkey -p ctrip.android.view --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-n

APP自动化框架LazyAndroid使用手册(1)--框架简介

作者:cryanimal  QQ:164166060 APP自动化简介 APP自动化,即通过自动化的方式,对APP施行一系列的仿按键输入.触摸屏输入.手势输入等操作,以达到对APP的功能进行自动化测试的目的. 其一般过程如下图所示: APP自动化常用工具简介 Monkey Monkey 是Android SDK 自带的自动化测试工具,可以运行在模拟器里或实际设备中,它向系统发送随机的用户事件流,如按键输入.触摸屏输入.手势输入.Sensor 事件等, 实现对正在开发的应用程序进行表现或者压力测试

手把手教你_android自动化实践方案选型

接到一个android自动化的任务,看了看手中的家伙:ranorex,appium,uiautomator 当然先捡商用的试试,简单呀,可以录制回放,不过不是抱特别大的期望,这个爷比较娇气,要是android工程中有第三方库可能就会instrument失败.这次运气不错,instrument成功了,录制了一下常用的操作,一切OK.想想还要准备一些啥: 先说手势:搜搜帮助: public void Swipe( Location startLocation, GestureDirection di

ios 性能优化之自动化UI测试

自动化UI测试 来源:http://www.cnblogs.com/chensheng12330/p/3947588.html 使用自动化工具来自动化用户界面测试你的iOS应用程序通过测试脚本编写. 这些脚本模拟用户操作通过调用UI自动化.一个JavaScript编程接口,指定要执行的动作在你的应用程序运行. 在测试过程中,系统日志信息返回给你. UI交互的自动化测试时,您免费其他工作的关键人员和资源. 这样你最小化程序错误,缩短开发产品更新所需的时间. 本章描述了如何使用仪器的自动化模板执行脚