Robotium的左右为难 -- enterText

简介:

最近测试框架收到反馈,详查后发现了一个Robotium的问题,甚有趣,遂记录。

 

问题场景:

    Robotium.enterText输入数据后,点击"发送"按钮,多数情况下失败,少数时候成功。

    QQ图片20141127113057

 

 

问题分析:

    这个问题不需要深入的分析流程,直接看enterText源码便可发现大概问题:

复制代码
public void setEditText(final EditText editText, final String text) {
    if(editText != null){
        final String previousText = editText.getText().toString();

        inst.runOnMainSync(new Runnable()
        {
            public void run()
            {
                editText.setInputType(InputType.TYPE_NULL); // 设置input类型,不重要
                editText.performClick(); 
                dialogUtils.hideSoftKeyboard(editText, false, false);
                if(text.equals(""))
                    editText.setText(text);
                else{
                    editText.setText(previousText + text);
                    editText.setCursorVisible(false); // …为什么text.equals("")就不需要呢setCursorVisible(false)呢?这TM在玩我吧......算了这个也不重要...
                }
            }
        });
    }
}
复制代码

    重点是performClickhideSoftKeyboard

    1. 为什么Robotium要这么做呢?

        如果不这么做,editText.setText(msg)也成功。但这和真实操作不一致,真实流程是:点击editText,弹出键盘,输入文字,隐藏键盘。虽然这个流程短,但状态变化很大:

        (1)焦点发生变化,这可能会影响后续的检查/业务流程(触发事件之类…)。

        (2)弹出/隐藏键盘,这会触发Android从Touch模式变为键盘模式。另外弹出/隐藏键盘可能有监听事件,如不触发操作,监听事件不会执行。

    2. 为什么要在setText之前hideSoftKeyboard?

        如果performClick和hideSoftKeyboard是上面的原因,那么hideSoftKeyboard在setText之前/后都没所谓了,因为他压根不影响输入。

    3. 如果不执行hideSoftKeyboard会怎么样?

        (1)隐藏键盘的监听事件不执行。

        (2)Android将停留在键盘模式。

        (3)最重要的是:不藏起来,键盘一直占了半个屏啊,Robotium要可视控件才能操作,弹出键盘可能会影响其他控件的操作。

    这么说,Robotium在enterText的时候做performClick和hideSoftKeyboard是很合理的。

 

    回到之前的问题,为什么它会导致“信息发送失败”呢?

    因为:这个产品设计是,藏起键盘时,bottom_bar会回退到初始状态。如图:

    QQ图片20141127184039

    bottom_bar初始状态时,是没有输入框和发送按钮的。先不管edit和btn有没被GC,光控件不可视,click操作就会失败。至于成功/失败随机,是因为hideSoftKeyboard事件响应和click速度参差造成的。

    只能说这种应用场景下,Robotium表示无能为力。

 

解决方案:

1. 对Robotium进行扩展,实施额外enterText接口,但这会对日后升级Robotium带来不便。

2. 修改案例避免问题。



本文转自hyddd博客园博客,原文链接:http://www.cnblogs.com/hyddd/p/4126979.html,如需转载请自行联系原作者。


目录
相关文章
|
Android开发
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
1465 0
【错误记录】Android Studio 中 build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle及插件版本 )
|
8月前
|
JavaScript
Selenium--WebDriverWait--你知道显示等待?(结合源码让你更加得心应手)
Selenium--WebDriverWait--你知道显示等待?(结合源码让你更加得心应手)
42 0
|
Java 开发工具
AndroidStudio插件开发(进阶篇之Action机制)
AndroidStudio插件开发(进阶篇之Action机制)
AndroidStudio插件开发(进阶篇之Action机制)
|
人工智能 JavaScript IDE
干货|app自动化测试之Appium 源码修改定制分析
干货|app自动化测试之Appium 源码修改定制分析
|
IDE Java 测试技术
第七章 Android Gradle插件
从这章开始我们就开始介绍Android Gradle插件了,会通过几章由浅入深的详细的介绍Android Gradle,本章会简单的介绍下Android Gradle插件,然后通过一个例子对其有大概的了解,最后讲下如果从原来基于Eclipse进行Android开发的方式,转到基于Android Studio,使用Android Gradle插件开发的新方式 7.1 Android Gradle插件简介
296 0
第七章 Android Gradle插件
|
测试技术
Cypress系列(45)- cypress-skip-and-only-ui 插件详解
Cypress系列(45)- cypress-skip-and-only-ui 插件详解
80 0
Cypress系列(45)- cypress-skip-and-only-ui 插件详解
|
人工智能 JavaScript IDE
干货|app自动化测试之Appium 源码修改定制分析
Appium 是由 Node.js 来实现的 HTTP 服务,它并不是一套全新的框架,而是将现有的优秀的框架进行了集成,在 Selenium WebDriver 协议(JsonWireProtocol/Restful web service)的基础上增加了移动端的支持,使 Appium 满足多方面的需求。 官方提供更详细的 Appium 结构说明:https://appium.io/docs/e
|
Web App开发 移动开发 Java
Cordova4.0 系列 -- 基本环境搭建(1)
  一. 安装Node.js基本环境   官网下载地址:https://nodejs.org/   安装成功之后可以使用简单命令查看其版本 node -v   npm相关命令 node cli.
1115 0
|
Java Maven Android开发
从零开始仿写一个抖音App——Apt代码生成技术、gradle插件开发与protocol协议
本文首发于简书——何时夕,搬运转载请注明出处,否则将追究版权责任。交流qq群:859640274 有人说我标题党,也怪我开始决定写的时候没有注意标题,也没想到会有这么多阅读量,的确会生出一些是非出来。
1980 0
|
Android开发
Android项目实战(十九):Android Studio 优秀插件: Parcelable Code Generator
原文:Android项目实战(十九):Android Studio 优秀插件: Parcelable Code Generator Android Studio 优秀插件系列:                       Android Studio 优秀插件(一):GsonFormat    ...
913 0