Android自动化-双击操作

原创 2016年01月05日 23:25:07

在讲这个主题的之前,其实我想说的是在android设备里面进行双击的操作实际上是一个很奇怪的情况,目前大部分的软件基本也不会出现有说某个按钮需要通过双击来进行操作的。不过既然遇到了,就得想想怎么解决这个操作吧。

问题

主要还是使用的是appium。使用的过程中发现,实际上 appium并没有提供双击的接口给到我们,其实这个并不能说是appium未封装该方法,而是实际上我们看android 按钮也只是提供了setOnClickListener,而并没有setOnDoubleClick方法。这也是前面说到双击操作基本不用到的原因。

解决方法

抛开系统的问题 我们来看看目前都有什么方法可以支持双击的操作。

  • Android-Uiautomator:[1]如何实现双击效果 如果只是UiAutomator的话,可以通过配置Configurator 的操作延时来进行,不过我记得Configurator也是要在后面的版本(4.3)才能够支持的。
  • appium 由于click方法中间默认存在有间隔时间,所以可以采用tap(轻触)。
  • 通过monkey来解决的。

UiAutomator双击操作

//设置点击操作的间隔
Configurator.getInstance().setActionAcknowledgmentTimeout(0);
UiObject sendButton = new UiObject(new UiSelector().resourceId("com.cvte.popupwindowdemo:id/button1"));
sendButton.click();
sendButton.click();

这种方法经验证确实可行。不过建议设置完间隔时间以后,还是将默认的间隔时间设置回去。

long timeout =Configurator.getInstance().getActionAcknowledgmentTimeout();

可通过以上方法在设置0之前先将默认的时间获取到。

Appium的 tap api 。

这种方法就不说了,API 如下:

public void tap(int fingers, WebElement element, int duration)

问题在与在手机上验证确实能够实现双击的效果,但是源于该API要求为18以上即Android 4.3以上才行。

monkey 双击

下来我们重点来说下如何通过monkey来实现双击的操作。

实际上我们大多数人认为monkey主要的功能是进行稳定性的测试,实际上并不了解它可以用来写脚本的。

MonkeySourceScript

我们看这个就能够知道了。monkey的脚本就是通过它来进行解析的,并且它也提供了运行的demo了。所以我们很清楚的知道点击操作的代码可以写成

DispatchPointer(5109520,5109520,0,498,585,0,0,0,0,0,0,0)
DispatchPointer(5109520,5109520,1,498,585,0,0,0,0,0,0,0)

第3、4、5分别代表了touchdown以及touchup 以及坐标值,其他具体每个参数的作用我就不讲解了。具体可以google就行。

所以我们就可以依葫芦画瓢

count= 1
speed= 1.0
start data >>
DispatchPointer(5109520,5109520,0,498,585,0,0,0,0,0,0,0)
DispatchPointer(5109520,5109520,1,498,585,0,0,0,0,0,0,0)
UserWait(200)
DispatchPointer(5109520,5109520,0,498,585,0,0,0,0,0,0,0)
DispatchPointer(5109520,5109520,1,498,585,0,0,0,0,0,0,0)

因为monkey的操作基本是没有延迟的,所以我们需要自己手动的给它加上一个延迟。另外以上只是一个例子,在实际操作中我们首先需要通过获取到我们想要点击的元素的坐标,再写入实际的坐标值。

我们将代码写入 monkey.txt中将其推到手机 /data/local/tmp 目录下,其实其他路径也是可以的。
通过adb 运行 monkey -f monkey.txt 1 即可 。

总结

以上的方法。如果考虑兼容性的问题,确实是monkey的点击是不二的选择。但是如果说在系统有条件的情况下。当然还是使用appium原生的api是最好的了。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq744746842/article/details/50466035

Android-Uiautomator:如何实现双击效果

uiautomator框架测试中,未提供双击API,那如何实现双击的效果呢? 默认每个动作具有默认延时,将默认延时去除,或者缩短即可实现 publicvoidclick...
  • kts107
  • kts107
  • 2015-11-05 20:54:22
  • 406

UiAutomator——点击难以识别的控件技巧

有时候我们使用UiAutomator在查找元素的时候,发现明明元素在UiAutomator view工具中能够识别出,但是使用代码去识别的时候,却发现该元素 UiObjectNotFoundExcep...
  • LangSand
  • LangSand
  • 2016-05-18 15:25:21
  • 5554

Appium基础篇15-模拟手指点击tap方法

本篇来学习下,appium中模拟手指点击方法,叫tap,有两个参数,元素位置和点击持续时间。一般语法是这样的tap((x1,y1),(x2,y2)],100), 我们通过手机百度中,利用tap方法来点...
  • u011541946
  • u011541946
  • 2017-09-14 22:26:57
  • 2512

Appium中部分api的使用方法

使用的语言是java,appium的版本是1.3.4,java-client的版本是java-client-2.1.0,建议多参考java-client-2.1.0-javadoc。 1.使用Andr...
  • gb112211
  • gb112211
  • 2015-01-08 18:29:36
  • 6050

Android通过代码模拟物理、屏幕点击事件

本文讲的是通过使用代码,可以控制手机的
  • mad1989
  • mad1989
  • 2014-07-25 11:57:18
  • 104101

UiAutomator2.0

1.     概述 UI测试(功能测试、黑盒测试)不需要测试者了解应用程序的内部实现细节,只需要知道当执行了某些特定的动作后是否会得到其预期的输出。这种测试方法,在团队合作中可以更好地分离的开发和测试...
  • Java18
  • Java18
  • 2016-12-09 10:51:36
  • 10264

UiObject2介绍

基础动作模拟API 返回 API 说明 void clear() 清除编辑框中的内容 void click() 点击一个对象 R clickAndWait(...
  • mqqzt
  • mqqzt
  • 2015-11-22 20:42:55
  • 3661

Appium在指定控件上滑动或者点击

今天遇到一个问题,想要点击某个控件的某个位置(左上,左下,右上,右下,中间),稍微做了封装,具体代码如下,有不妥欢迎指出:点击: /** * 单个手指,点击屏幕某个控件位置(左上,左...
  • hsj880921
  • hsj880921
  • 2015-03-25 10:30:46
  • 5838

Android关于界面一定时间无操作自动跳转到指定界面的实现

最近在做一个售货机的项目,当界面停留一定时间无操作需要自动跳转到主页播放宣传广告。下面把我实现的方式贴出来,经测试完美地实现所需功能。 主要用到的功能,自定义一个定时器CountTimer继承Coun...
  • qw286502698
  • qw286502698
  • 2017-06-06 16:31:29
  • 1986

android中如何实现进入一个界面不做任何动作过10秒钟自动跳转到其他activity?

Timer的用法, 在onCreate里设置个Timer,然后建立Intent指向你要调用Activity。 设置Timer 10妙后执行startActivity就行了。 示例代码:...
  • liu13722785488
  • liu13722785488
  • 2014-09-28 17:06:52
  • 2350
收藏助手
不良信息举报
您举报文章:Android自动化-双击操作
举报原因:
原因补充:

(最多只允许输入30个字)