51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1972|回复: 1
打印 上一主题 下一主题

Robotium的左右为难 -- enterText

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-9 15:57:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近测试框架收到反馈,详查后发现了一个Robotium的问题,甚有趣,遂记录。



问题场景:

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


问题分析:

    这个问题不需要深入的分析流程,直接看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在玩我吧......算了这个也不重要...
                }
            }
        });
    }
}
复制代码
    重点是performClick和hideSoftKeyboard。

    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会回退到初始状态。如图:


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

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



解决方案:

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

2. 修改案例避免问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-10 18:00 , Processed in 0.061608 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表