为什么需要快速点击控件

在我要测试的APP中,有一个名曰“秘密花园”的玩意儿,里面可以切换 正式、灰度、测试 环境;因为不想让用户随便就可以点进去切环境,开发同学在正常界面的某个位置放了一个控件(由于是保密的,所以这个位置点我就不公布了

),必须快速单击这个控件5次,才能进入(咒语很简单

)仅供测试时候使用;所以在自动化测试的时候,必须实现这个快速单击5次的动作。

踩坑

既然是连续单击5次,常规方法就是循环 里面套上5次 click;尝试之后不成功,于是打印一下click 时间,吓了一跳;

具体代码和输出结果如下:

WebElement secret = driver.findElementByXPath("//android.view.View[contains(@resource-id,'id/touch')]");

for(int i = 1; i <= 5; i++) {

long start = System.currentTimeMillis();

secret.click();

long end = System.currentTimeMillis();

long duration = end - start;

System.out.println("页面View对象单击: 第 " + i + " 次, 耗时: " + duration + "毫秒 !");

}

输出结果如下:

页面View对象单击: 第 1 次, 耗时: 3636毫秒 !

页面View对象单击: 第 2 次, 耗时: 3160毫秒 !

页面View对象单击: 第 3 次, 耗时: 3157毫秒 !

页面View对象单击: 第 4 次, 耗时: 3159毫秒 !

页面View对象单击: 第 5 次, 耗时: 3146毫秒 !

可见虽然是连续5次的单击,但是每次单击的耗时要3秒以上,其实已经不能算是5次快速单击了,只是5次有充足间隔的单击;

分析

很明显 对象.click() 格式的单击调用一次会比较耗时,而秘密花园的进入条件是5次连续单击,研发代码控制的单击间隔时间在300毫秒以下才被认为是连续;

变通

如果用 对象.click() 调用有时间太长的问题,就必须换一种单击方法,屏幕坐标点单击 driver.tap() ;

思路:

获取单击对象左上角x轴坐标;

获取单击对象左上角y轴坐标;

单击对象左上角往右 往下 挪10个像素的点位 (x+10, y+10) 基本可以肯定这个点一定会落在对象有效范围内;

循环坐标点单击5次;

记录每次单击后的耗时;

看代码:

WebElement secret = driver.findElementByXPath("//android.view.View[contains(@resource-id,'id/touch')]");

int x = secret.getLocation().getX(); //获取对象左上角的x点坐标

int y = secret.getLocation().getY(); //获取对象左上角的y点坐标

for(int i = 1; i <= 5; i++) {

long start = System.currentTimeMillis();

driver.tap(1, x+10, y+10, 0);

long end = System.currentTimeMillis();

long duration = end - start;

System.out.println("屏幕点直接单击: 第 " + i + " 次, 耗时: " + duration + "毫秒 !");

}

看输出结果:

屏幕点直接单击: 第 1 次, 耗时: 73毫秒 !

屏幕点直接单击: 第 2 次, 耗时: 39毫秒 !

屏幕点直接单击: 第 3 次, 耗时: 37毫秒 !

屏幕点直接单击: 第 4 次, 耗时: 40毫秒 !

屏幕点直接单击: 第 5 次, 耗时: 42毫秒 !

总结

可以看出用driver.tap() 调用的每次单击耗时明显减少,如果需要有快速单击控件的需求可以用这种方法做变通。

appium java 时间控件_在 Appium 中快速单击控件的变通方法相关推荐

  1. html 获取控件位置,html控件_获取HTML中的父控件方法

    摘要 腾兴网为您分享:获取HTML中的父控件方法,月星家居,优衣库,易视云3,悟空单车等软件知识,以及vsco安卓,墨墨背单词,八一军婚网,英语打字软件,地球仪,游戏音效制作,launcher.exe ...

  2. python图表交互控件_用djang中的交互式控件制作bokeh图表

    有两个用例: 没有服务器 如果您可以在JS中执行任何更新(不需要调用实际的python代码),那么使用CustomJS callbacks添加交互非常容易.在这个链接中有很多示例,但是一个基本的简单代 ...

  3. java console不见了_解决eclipse中console控制选项不见了的方法

    eclipse是一款用于编译java语言的程序,利用这款软件我们可以制作很多有趣的小程序,也可以制作一些大型的软件项目.在实际的操作中,eclipse是由多个工具栏组成的,其中console就是用于查 ...

  4. java defunct怎么杀掉_杀死Linux中的defunct进程(僵尸进程)的方法指南

    一.什么是defunct进程(僵尸进程)在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状态时 ...

  5. java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at

    [http-nio-8080-exec-1] org.apache.coyote.AbstractProcessor.parseHost [xxx_tomcat] 是无效主机注意:更多的请求解析错误将 ...

  6. java 开源控件_一些好用的开源控件

    工作两年,一直都在做些编码方面的表面功夫,实现了很多很炫的功能,在此写下一些体验.有些比较小的dll文件我会发上来,如果是开源组织的代码我会把地址附上,毕竟人家是会更新的.大家还有什么好用的开源控件欢 ...

  7. 安卓java代码写控件_安卓自定义流程进度图控件实例代码

    先上效果图: 如图,可实现设置:总流程数.已完进度程数.已完成颜色,各个标题 使用方法 1.导入compile 'com.github.pavlospt:circleview:1.3'依赖包(因为用到 ...

  8. java 地图控件_室内地图Android SDK地图控件 - 蜂鸟云

    地图控件 Fengmap Android SDK 提供多个控件.控件与地图之间存在交互.本模块将对控件交互部分提供说明介绍. 注:除指北针控件外,其余控件的创建都在onMapInitSuccess事件 ...

  9. appium java 点击事件_java – 无法使用Appium在Android中的权限对话框中单击“允许”按钮...

    我无法使用Appium Java在 Android的权限对话框中点击"拒绝"或"允许"按钮.在点击这些按钮之前,是否需要添加任何功能? 以下是代码: Desir ...

最新文章

  1. 通常我们将python语言程序保存在一个后缀_ACAA网络设计师模拟题
  2. 要学习机器学习,先从这十大算法开始吧
  3. Seconds_Behind_Master
  4. 创建守护进程关键步骤
  5. php aws s3查看所有文件_国内AWS没有文件系统服务,快来看如何通过EC2挂载S3存储桶替代...
  6. wmic 获取计算机ip,【已解决】xp系统下,受限用户如何用批处理在不使用wmic获取多个网卡的IP地址?...
  7. firefox ie table 布局 兼容性问题
  8. jzoj3055-比赛【数学,统计】
  9. 调查内存泄漏第2部分–分析问题
  10. 标签树状结构JSP中树状图的代码实现
  11. 《数据挖掘》学堂在线【第一章:概述】习题答案参考与解析
  12. 电信收费计费系统BI项目
  13. mikrotikROS路由配置L2TP
  14. 计算机无法关机 总是自动启动,告诉你win10电脑关机后自动开机怎么解决
  15. MySQL期末复习题(题库)
  16. 利用callKit实现电话防骚扰
  17. 软件开发中 前台、中台、后台英文_实战思考(一):如何搭建业务中台?
  18. Deinterlacer(影像解交错)概念与解析
  19. 从《我不是药神》说起
  20. android 6.0 电池曲线,Android6.0 RK3399 电池系统(一)BQ25700 IC 驱动分析 · Younix’s Studio...

热门文章

  1. java switch语句与switch表达式区别及使用
  2. Integer和int的区别
  3. 19张图带你梳理SpringCloud体系中的重要知识点!
  4. 一份 Hadoop 面试 【避坑指南】 拍了拍你!
  5. Spring包名代码提示
  6. 字符串、文件操作,英文词频统计预处理
  7. Unity之读取配置表去加载物体
  8. spring boot中的注解
  9. 什么是urlencode,什么时候能用到
  10. 应用程序初次运行数据库配置小程序(Java版)