Android自动化-双击操作

来源:互联网 发布:武汉理工大学网络教学 编辑:程序博客网 时间:2024/06/05 15:56

在讲这个主题的之前,其实我想说的是在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= 1speed= 1.0start 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是最好的了。

0 0
原创粉丝点击