• enterText与typeText


    转自:http://www.cnblogs.com/hyddd/p/4126979.html

    问题场景:

        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. 修改案例避免问题。

  • 相关阅读:
    Spring中bean的生命周期
    HashMap与HashTable原理及数据结构
    HashMap 与HashTable的区别
    2 rocketmq mqadmin 的用法详解
    搭建RocketMQ踩的坑-内存不足
    解决Hash碰撞冲突方法总结
    大端BigEndian、小端LittleEndian与字符集编码
    Linux中最常用的JAVA_HOME配置
    WIP_DISCRETE_JOBS.STATUS_TYPE
    Inventory > INV.MTL_MATERIAL_TRANSACTIONS Show Error Msg: ORA-20100: File lxxx.tmp creation for FND_FILE failed.
  • 原文地址:https://www.cnblogs.com/melody-emma/p/4463002.html
Copyright © 2020-2023  润新知