最近在写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;

appium输入和清除操作各方法对比(android)的更多相关文章

  1. C语言清空输入缓冲区的N种方法对比

    转自C语言清空输入缓冲区的N种方法对比 C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int get ...

  2. C语言清空输入缓冲区的N种方法对比【转】

    转自:http://www.cnblogs.com/codingmylife/archive/2010/04/18/1714954.html C语言中有几个基本输入函数: //获取字符系列 int f ...

  3. C语言清空输入缓冲区的N种方法对比(转)

    C语言中有几个基本输入函数: //获取字符系列 int fgetc(FILE *stream); int getc(FILE *stream); int getchar(void); //获取行系列 ...

  4. Selenium_按钮的点击、文本框的输入和清除操作(3)

    from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get(" ...

  5. UIAutomator2、Appium、Robotium搭建环境与框架对比

    UIAutomator2.Appium.Robotium搭建环境与框架对比 一.框架介绍 Appium 特点 appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生 ...

  6. interrupt interrupted isInterrupted 方法对比、区别与联系 多线程中篇(八)

    interrupt interrupted isInterrupted 是三个“长相”非常类似的方法. 本文将对这三个方法简单的对比下,首先了解下线程停止的方式 线程停止方式 在Java中如果想停止一 ...

  7. iPhone开发 数据持久化总结(终结篇)—5种数据持久化方法对比

    iPhone开发 数据持久化总结(终结篇)—5种数据持久化方法对比   iphoneiPhoneIPhoneIPHONEIphone数据持久化 对比总结 本篇对IOS中常用的5种数据持久化方法进行简单 ...

  8. Android开发之按键、触摸屏和手势输入专业压力測试方法

    按键输入.触摸屏输入和手势笔画输入等功能是Android开发的基本功能.其稳定性和健壮性对移动应用系统开发很重要.按键.触摸屏和手势输入专业压力測试方法能够使用Monkey,相应用程序进行压力測试,检 ...

  9. SQL 2005 中查询或执行另外的数据库操作的方法

    原文:SQL 2005 中查询或执行另外的数据库操作的方法 摘要: 如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据, ...

随机推荐

  1. 【学习】024 springCloud

    单点系统架构 传统项目架构 传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一个项目中. 优点:适合于个人或者小团队开发,不适合大团队开发. 分布式项目架构 根据业务需求进行拆分成N个子 ...

  2. ini文件多了个dos的^M结尾符号,导致linux下脚本程序不能运行

    [omcr@lnlte2dmr-tdl legacy]$ cat -A ums_del_mr_files_cfg.ini MrFileDiskMountPoint=/home^M$ MrFileDis ...

  3. 【HDU4276】The Ghost Blows Light

    题目大意:给定一棵有根树,1 号节点为根节点,点有点权,边有边权,初始给定一个价值,每经过一条边都会减少该价值,每经过一个点都会增加相应的答案贡献值,求如何在给定价值的情况下最大化答案贡献,并要求最后 ...

  4. 大数据(量上GB的)查看命令

    大数据查看指令 cmd中(tab键可补全) type 文件名:全部查看 more 文件名:Enter键,按一下查看一页

  5. Maven:mirror和repository

    1 Repository(仓库) 1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository ...

  6. vue-项目模块化中this 指向问题

    在VUE项目中,我们想把一些主要的代码抽到一个模块中 export default { /** * 获取本地的群列表数据 * @param {*} params */ getGroupList () ...

  7. 【ipc-mq】根据mq的key查看使用进程

    使用ipcs -q可以得到key与msqid的对应关系,从而找到msgid webadmin@172.172.179.3:/usr/local/webapps/test_ma[17:17:36]$ i ...

  8. Redis :Linux和Window查看版本号

    一.Linux版本:查看服务端版本 **二者都可以** redis-server -v redis-server --version 查看客户端版本 **二者都可以** redis-cli -v re ...

  9. OI实用网址

    LaTeX公式编辑器 https://www.codecogs.com/latex/eqneditor.php http://latex.91maths.com/ 图.坐标系绘制 https://cs ...

  10. 解决"'pip' 不是内部或外部命令,也不是可运行的程序或批处理文件"的问题

    大家好,我是Connor,今天我为大家带来解决CMD命令无法直接运行 '点子' 进行安装库的问题. 今天本来想安装库来着,但是苦于pycharm的设置里不知道出了什么原因,无奈只能使用PIP功能来安装 ...