MonkeyRunner的长按操作实现

前两天组内一同事让我帮忙写个自动化脚本,操作很简单,就是打开测试页面中的各个链接,但有个特殊需求,就是点击链接过程中按下去之后要有一个60~100ms的延迟,之后才离开焦点。

  思考了一圈可用的开源工具后,感觉只有monkeyrunner最方便,因为已经有现成的方法(device.touch)和参数(DOWN_AND_UP)可用,但实际操作过程中发现,device.touch(100,100,'DOWN')并不是预期的一直按下状态。查看了monkeyrunner的源码后,看到DOWN,UP和DOWN_AND_UP都是MonkeyDevice下的方法,于是使用了这样的形式使用:device(100,100,MonkeyDevice.DOWN),测试成功。

  总结,MonkeyRunner的长按方式:

  device(100,100,MonkeyDevice.DOWN)

  MonkeyRunner.sleep(1)

  device(100,100,MonkeyDevice.UP)

  当然,也可以通过drag方法实现:device.drag((100,100),(100,100),1,10)

  两种方式效果一样,但实现原理是不同的,可以根据自己需求选择。

  附上帮助同事实现的脚本:


import random

from com.android.monkeyrunner import MonkeyRunner as mr

from com.android.monkeyrunner import MonkeyDevice as md

from com.android.monkeyrunner import MonkeyImage as mi

device=mr.waitForConnection()

#创建测试目录

device.press('KEYCODE_HOME','DOWN_AND_UP')

mr.sleep(1)

#打开新浪

device.touch(120,200,'DOWN_AND_UP')

mr.sleep(15)

url_x=55

url_y=200

#分别点击导航的各个链接

for i in range(1,19):

#长按实现方式

#device.drag((url_x,url_y),(url_x,url_y),0.2,1)

randomNum=random.uniform(0.06,0.1)

device.touch(url_x,url_y,md.DOWN)

mr.sleep(randomNum)

device.touch(url_x,url_y,md.UP)

print "sina:",i

print "sleep time:",randomNum

mr.sleep(15)

device.press('KEYCODE_BACK','DOWN_AND_UP')

url_x+=85

if url_x==480:

url_x=55

url_y+=45

else:

print 'end'

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-17 22:50:10

MonkeyRunner的长按操作实现的相关文章

web form实现长时间的服务器操作问题,请帮助我

问题描述 我有这样一个程序,我在ie浏览点击一个按钮,然后就到web服务器执行一段数据库操作,因为这个操作花费时间很长,有时候需要一个小时,问题1:因为经常出现web服务器没有完成操作就停止了.有什么好办法可以防止出现这种情况,好像ie默认的等待时间是一分钟.用webform可以实现这种消耗时间长的服务器操作么?问题2:如果web服务器执行30分钟,还没完成,我想停止操作,我怎样来停止呢,如果是从ie中,怎样发送这种取消操作的请求呢. 解决方案 解决方案二:你可以给你的命令对象设置超时时间,默认

锤子便签的Monkeyrunner 测试脚本

MonkeyRunner可能大家已经听过无数次了,大家在网上也看过了各种关于的它的资料了,我这里就不再过多的啰嗦它的用途了,它可以对app做功能测试也可以对手机Rom做功能测试,在没有app源码的情况下monkeyrunner可以做到很好的功能测试.MonkeyRunner有一个录制脚本的工具和回放的功能,大家去下载monkeyrecody.py和monkeyplayback.py这两个脚本就可以了,这个我这里也不讲了,网上去google可以搜到很好的教程, 下面是我对锤子便签的一个Monkey

android自动化测试中实现长按并拖动

  android应用自动化过程中,会遇见需要长按并拖动的场景,例如类似UC浏览器中,长按某个导航中的图标,使其处于可移动状态,然后再将其移动到另一个地方,与其它导航图标换个位置,在robotium中有个drag(float fromX, float toX, float fromY, float toY,int stepCount)方法,但由于drag没有长按这个步骤,因此不能使应用处于可移动的状态,是没法完成这样的常见而简单的操作的. drag方法源码实现如下: public void dr

利用Spring的@Async异步处理改善web应用中耗时操作的用户体验

Web应用中,有时会遇到一些耗时很长的操作(比如:在后台生成100张报表再呈现,或 从ftp下载若干文件,综合处理后再返回给页面下载),用户在网页上点完按钮后,通常会遇到二个问题:页面超时.看不到处理进度. 对于超时,采用异步操作,可以很好的解决这个问题,后台服务收到请求后,执行异步方法不会阻塞线程,因此就不存在超时问题.但是异步处理的进度用户也需要知道,否则不知道后台的异步处理何时完成,用户无法决定接下来应该继续等候? or 关掉页面? 思路: 1.browser -> Spring-MVC

详解Google Chrome浏览器(操作篇)(下)

开篇概述      由于最近忙于公司产品的架构与研发,已经三个多月没有写博客了,收到有些朋友的来信,问为什么不及时更新博客内容呢,他们说他们正期待着某些内容.对此,非常抱歉,那么我在此也给各位朋友一些承诺,从即日起,无论再忙,也想办法抽出时间保证每周至少一篇文章.好了,废话不多说了,进入我们的主题吧,<详解Google Chrome浏览器(操作篇)(下)>       建议大家在阅读本篇文章前,先阅读前面写的两篇文章,即详解google Chrome浏览器(理论篇)和详解Google Chro

高级问题!怎样多线程操作队列?

问题描述 比如,有一个数据表(可以理解为队列不?)中有5000条未完成数据,每条数据需要进行复杂的计算.处理.写入文本文件后才能标记为完成.现在是单台机器按先进先出的原则逐条处理.领导觉得太慢了,想加几台机器同时处理[数据表是同一个].我现在想法是,假如有两台机器,每台机器每五分钟读取一些待处理数据,然后处理.A机器处理ID为单号的,B机器处理ID为双号的.大家觉得可行吗?MSsql不能select单双数ID吧...我知道这是一个很笨的方法,期待高手们能有更好的方法 解决方案 解决方案二:所谓的

求解决方案——后台处理过长,前台响应“服务器超时”

问题描述 求解决方案--后台处理过长,前台响应"服务器超时"我是后台要处理万条以上的数据,耗时长,虽然我设置了TImeOUT=36000,但是前台未等到后台的提交,就响应"服务器超时".不知能否在前台提交数据后,后台进行处理,可以切断和前台联系,后台不受前台影响,直到后台处理完成后,再给前台一个提示?或者还有其他更好的解决方案!急求解! 解决方案 解决方案二:开发一个服务,提交给服务进行处理解决方案三:引用1楼liuchaolin的回复: 开发一个服务,提交给服务进

QQ,6.7发布体验邀请:群禁言支持自定义禁言时长

QQ,6.7发布,群禁言支持自定义禁言时长11月25日消息,QQ,6.6正式版发布还不到一个星期,腾讯又已经开始了QQ,6.7的体验邀请,编译版本号13237.腾讯在邀请说明中列出了五方面的更新,其中收藏再编辑.QQ收藏入驻Outlook.我的手机页可添加收藏这三项都是QQ,6.6里已经有了,真正 新的是这两项:1.离线文件,轻松一键即可收藏.2.群禁言支持自定义禁言时长,操作更灵活.本次体验时间为11月24日到12月6日.体验申请地址:http://exp.qq.com/details.htm

c# 怎么延时等待 一个耗时操作的返回

问题描述 点击按钮时调用一个耗时函数,会导致界面假死因为这个耗时函数是需要返回参数的,如果调用新进程去执行,怎么接收它的返回.这种情况要怎么处理,谢谢 解决方案 解决方案二:把接收到的返回值先放到一个全局变量里,然后在给线程结束注册个回调事件,线程结束了,主线程就调用这个事件,然后到全局变量里拿数据解决方案三:耗时函数应该另开个线程执行,可以写个委托来处理返回结果,用信号量或者静态变量也行.解决方案四:引用2楼china_ggd的回复: 耗时函数应该另开个线程执行,可以写个委托来处理返回结果,用