Robotium的左右为难 -- enterText

最近测试框架收到反馈,详查后发现了一个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在玩我吧......算了这个也不重要...
                }
            }
        });
    }
}

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

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

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

解决方案:

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

2. 修改案例避免问题。

时间: 2024-08-24 02:01:54

Robotium的左右为难 -- enterText的相关文章

转载:robotium typeText与enterText区别

solo.typeText和solo.enterText方法都可以对EditeText进行测试,达到的测试目的是一样的.存在几点不同: 1.实现上,typeText方法是robotium框架调用系统Instrumentation类里面的sendStringSync方法来实现的:enterText是调用TextView里面setText方法来实现的. 2.显示上,typeText在测试过程中能看到输入的痕迹:enterText则没有输入痕迹. 使用typeText的时候没办法输入中文.

Android开发:《Gradle Recipes for Android》阅读笔记(翻译)5.3——使用Robotium进行功能测试

问题: 你想要使用Robotium库测试activity. 解决方案: 增加Robotium依赖,编写自己的测试脚本. 讨论: Android Test Support Library提供类可以操作activity里的窗口部件,但是有更简单的方式操作Android UI.虽然这本书不是介绍测试的,但是可以很容易的将Robotium依赖增加到Gradle然后运行测试. Robotium项目被描述成"像Selenium,但是为了Android".这是一个自动化测试框架,可以很方便的为And

robotium从入门到放弃 二 第一个实例

1.导入被测试的源码 我们先下载加你计算器源码,下载地址: https://robotium.googlecode.com/files/AndroidCalculator.zip 如果地址被墙无法现在下面网盘地址也可以下载: 链接: http://pan.baidu.com/s/1c2e8McC 密码: vsj8   打开eclipse,点击File-Import 选择Existing Projects into Workspace,点击Next   选择Select archive file,

Android 自动化测试(5)<robotium>

关于Android的自动化测试之UI测试,之前介绍过Android 自动化测试(4)<uiautomator>, 在android原生的单元测试框架上,利用uiautomator.jar这个类库来完成Android的界面上的测试,这已经使得测试比较简单了.但还有更加简单的写测试的方式,那就是利用一些第三方的测试框架,比如robotium. Android的第三方的测试框架,有Robolectric 和 robotium,我试着用了下,觉得robotium已经非常好用了. 1.概要 Roboti

基于APK的Robotium登录人人网与发状态

搭建好Robotium的环境,大致就是下载安装jdk并配置环境变量,下载并打开Eclipse,下载安装Android SDK Tools并配置环境变量,下载安装ADT插件,创建并打开Android Virtual Device,下载.apk重签名并安装到该device,手动打开人人网应用没问题后环境就算是准备好了.(我学习Robotium时买了杨志伟编著的<手机测试Robotium实战教程>,我自己也总结了一份学习笔记,考虑到作者出书不易我就不上传了,这本书挺好的.) 一些常用的cmd命令,来

Robotium源码解读-native/webview控件的获取和操作

之前基本上没接触过移动端的UITest测试,之前因为一些需求临时赶鸭子上架采用了UIAutomator,但是后来发现webview没办法识别,在预研过程中,发现Robotium跟Appium这两个神器.由于Robotium提供了webview的解析方式,遂决定研究一下. 一.环境准备以及初始化 用来说明的用例采用的是Robotium官网的一个tutorial用例-Notepad @RunWith(AndroidJUnit4.class) public class NotePadTest { pr

Robotium的使用-有源码的情况

最近开始了解Robotium,Robotium是android的自动化框架,里面封装了很多api,方便我们使用.下面是我实践的结果,记录了其中出现过的问题,便于以后自己查阅.网上出现的很多是官方的demo,如果找不到,其实也可以用自己写的android小程序进行练习. 一.提前准备 1.robotium-solo-5.3.1.jar 2.android模拟器或真机 3.android sdk配置 platform-tools和tools 二.建立一个android test project 1.

Robotium自动化测试框架实用教程(图)

一.简介 Robotium是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击.长按.滑动等).查找和断言机制的API,能够对各种控件进行操作.Robotium结合Android官方提供的测试框架达到对应用程序进行自动化的测试.另外,Robotium 4.0版本已经支持对WebView的操作.Robotium 对Activity,Dialog,Toast,Menu 都是支持的. 二.相关下载 源码获取:http://code

Robotium中调用getActivity()方法导致程序挂起的研究浅析

1. 问题背景描述 在工作中需要在没有项目源码的情况下直接使用robotium测试目标android平台launcher,平台的版本基于当前最新的android 4.4.2.之前在验证可行性的时候使用本人同样使用android4.4.2的测试手机htc incredable s针对一个只有apk的notepad应用做过同样的验证,在测试手机上运行完全没有问题.该测试代码如下: package com.example.android.notepad.tryout; import com.robot