最近在写android app自动化测试时,发现输入和清除操作耗费时间比较长,下面我用了不同的方法进行输入和清除操作,对比下时间(选取测试的一组数据做分析),选出最佳方法。

1、输入操作

1.1、webElement.sendKeys()

可以看到 该方法的输入时间在5s 左右

1.2、actions.sendKeys().perform()

该方法是使用Actions类的sendKeys方法,sendKeys前需要先webElement.click()

从结果可以看到该方法的输入时间在3s左右

1.3、adb shell input text

该方法是直接使用adb命令进行输入,可以看出输入时间不到1s. 操作前需要先webElement.click()

1.4、总结

方法 第一次 第二次 第三次 第四次 解释 结果
webElement.sendKeys() 5112 5444 17045 5380 第三次默认进行了清除操作 IOS、android 通用,用时最长
actions.sendKeys().perform() 5747 3203 3298 3757 第一次较长是等待元素可以点击 iOS、android通用,用时较长
adb shell input text 3999 948 947 891 第一次较长是等待元素可以点击 只用于android,时间最短

2、清除操作

2.1、webElement.clear()

该方法在需要清除的元素没有内容时,耗费时间较长,在5s左右。清除元素有内容时时间在1s左右。如果是密码输入框,有几率出现清除不干净。

2.2、adb shell input keyevent 67

该方法直接使用adb命令删除,代码如下:

webElement.click

String conent = webElement.getText();

 while (StringUtils.isNotBlank(conent)) {

 ShellUtils.adbClear();---封装执行adb命令的方法

conent = webElement.getText();

 }

从图可以看出,该删除方法耗时依赖于元素的长度,比如如果是手机号码,则删除要耗时十几秒。注意:如果是密码输入框,则不会进行清除。

2.3、pressKeyCode

该方法是 点击–全选–删除,代码

webElement.click

((AndroidDriver<WebElement>) driver).pressKeyCode(29, 28672);

((AndroidDriver<WebElement>) driver).pressKeyCode(112)

该方法删除时间稳定在1.3左右

2.4、总结

方法 第一次 第二次 第三次 第四次 解释 结果
webElement.clear() 146 5238 1198 4037 第一次判断了text为空,所以没有进行清除操作,第二次和第四次是密码输入框获取到text为空的原因。 IOS、android 通用,密码输入框用时较长
adb shell input keyevent 67 3239 723 11353 780 第一次较长是等待元素可以点击,第三次是要清楚的文案太长 只用于android,依赖文本长度,且密码输入框不能清除
pressKeyCode 3282 845 1288 1388 第一次较长是等待元素可以点击 只用于android,时间最短

3、结果

输入最终代码如下

case "sendKeys":

   webElement.click();
if (StringUtils.isNotEmpty(webElement.getText())
|| Boolean.valueOf(webElement.getAttribute("password"))) { //如果元素内容不为空或者是密码输入框,则先进行删除操作。pressKeyCode删除
((AndroidDriver<WebElement>) driver).pressKeyCode(29, 28672);
((AndroidDriver<WebElement>) driver).pressKeyCode(112); } ShellUtils.adbSendKeys(elementLocator.getActionValue());---adb 命令输入
break;

最新文章

  1. Oracle XMLTable 使用教程与实例
  2. 关于handler
  3. glGetFloatv (GL_MODELVIEW_MATRIX, mat)
  4. Python项目实战
  5. 详解MyEclipse10 安装Spket 1.6.23(支持Extjs4.1.1及jQuery1.8)
  6. 【转】Android 布局学习之——LinearLayout属性baselineAligned的作用及baseline
  7. java小提示:标示符常见命名规则、常用ASCII
  8. Css3 圆角和渐变色问题(IE9)
  9. gitlab hooks
  10. Keil C51内存分配与优化
  11. C# Switch is Type
  12. LeetCode Day4——Factorial Trailing Zeroes
  13. visual assist常用快捷键
  14. JAVA工具_PinyinConv
  15. OO第一单元总结(表达式求导)
  16. jQuery 选择城市,显示对应的即时时区时间
  17. linux下lamp环境修改网站根目录
  18. 【Nginx】开启 gzip和缓存
  19. 一起脱去小程序的外套和内衣 - 微信小程序架构解析
  20. Netty 源码(一)服务端启动

热门文章

  1. Hive的安装搭建(三)
  2. (转) MiniUI使用
  3. springboot 关于log4j日志配置
  4. Django 视图层和模板层
  5. javaScript事件--事件流
  6. Css min-height max-height min-width max-height
  7. Python中最常见括号()、[]、{}的区别
  8. haproxy教程
  9. springboot项目作为其他项目子项目
  10. Python使用XML操作mapnik,实现复杂标注(Multi line text symbolizer)