enterText与typeText
转自:http://www.cnblogs.com/hyddd/p/4126979.html
问题场景:
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,光控件不可视,click操作就会失败。至于成功/失败随机,是因为hideSoftKeyboard事件响应和click速度参差造成的。
只能说这种应用场景下,Robotium表示无能为力。
解决方案:
1. 对Robotium进行扩展,实施额外enterText接口,但这会对日后升级Robotium带来不便。
2. 修改案例避免问题。
enterText与typeText的更多相关文章
- 转载:robotium typeText与enterText区别
solo.typeText和solo.enterText方法都可以对EditeText进行测试,达到的测试目的是一样的.存在几点不同: 1.实现上,typeText方法是robotium框架调用系统I ...
- Robotium的左右为难 -- enterText
最近测试框架收到反馈,详查后发现了一个Robotium的问题,甚有趣,遂记录. 问题场景: Robotium.enterText输入数据后,点击"发送"按钮,多数情况下失败,少数时 ...
- 文件操作总结:关于文本和二进制流(typeText&typeBinary)
本人能力.精力有限,所言所感都基于自身的实践和有限的阅读.查阅,如有错误,欢迎拍砖,敬请赐教——博客园:钱智慧. 总结: CFile,其自身是不提供缓冲区的(?但CFile又有一个Flush,这一点目 ...
- robotium(及百度cafe)运行testcase之后程序挂起没有响应的原因调查及解决
一.问题背景 刚开始用的是百度cafe搭建的框架,已经用了一些版本,最后的test版本在7.4的apk上能跑,但是在最新发布的7.5的版本上跑不了,直接提示nullPointer错误,通过打日志的方式 ...
- Robotium API -- 除click/clickLong外的其他操作
拖动操作 void drag (float fromX, float toX, float fromY, float toY, int stepCount) 选定两个位置,进行拖动操作(这里的拖动操作 ...
- Robotium--通过Id寻找控件
在自动化测试中,UI上经常有一些控件是没有名称的,那么此时,就可以通过id来找到这些控件. 案例:对两个EditText进行测试 package com.tangbc.tedit.test; impo ...
- Android 自己的自动化测试(5)<robotium>
大约Android自己的自动化测试UI测试,前出台Android 自己主动化測试(4)<uiautomator>, 在android原生的单元測试框架上,利用uiautomator.jar ...
- iOS自己主动化測试的那些干货
前言 假设有測试大佬发现内容不正确.欢迎指正,我会及时改动. 大多数的iOS App(没有持续集成)迭代流程是这种 也就是说.測试是公布之前的最后一道关卡.假设bug不能在測试中发现,那么bug 就会 ...
- Robotium源码解读-native控件/webview元素的获取和操作
目前比较有名的Uitest框架有Uiautomator/Robotium/Appium,由于一直对webview元素的获取和操作比较好奇,另外Robotium代码量也不是很大,因此打算学习一下. 一. ...
随机推荐
- Linux CentOS 知识和常用命令
1.常用热键 [Tab]它具有“命令补全”与“文件补全”的功能[Ctrl+C]中断执行中的程序组合键[Ctrl+d]键盘输入结束.也可以用来替代 exit 2.Linux 常用编辑器 vi 和 vim ...
- c++_等差素数列
标题:等差素数列 2,3,5,7,11,13,....是素数序列.类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列.上边的数列公差为30,长度为6. 2004年 ...
- 【HIHOCODER 1049】 后序遍历
描述 在参与过了美食节之后,小Hi和小Ho在别的地方又玩耍了一阵子,在这个过程中,小Ho得到了一个非常有意思的玩具--一棵由小球和木棍连接起来的二叉树! 小Ho对这棵二叉树爱不释手,于是给它的每一个节 ...
- 数据结构实验3:C++实现顺序栈类与链栈类
实验3 3.1 实验目的 熟练掌握栈的顺序存储结构和链式存储结构. 熟练掌握栈的有关算法设计,并在顺序栈和链栈上实现. 根据具体给定的需求,合理设计并实现相关结构和算法.3.2实验要求3.2.1 ...
- JQuery给元素动态增删类或特性
背景:通过JQuery动态给Html元素增加.删除类或属性,使Html元素在不同的时刻呈现不同的样式,给用户更好的体验感觉. 如存在以下p片段和button按钮,代码如下: <p id=&quo ...
- 将树莓派3B+变成WiFi热点
我有一个树莓派3B+,安装的是官方的Raspbian Stretch操作系统,该系统和Debian 9很类似,很多命令都是通用的. 接下来我将演示如何利用树莓派搭建WiFi热点,此热点就和家里的无线路 ...
- OpenSSH高级功能之端口转发(Port Forwarding)
在RedHat提供的系统管理员指南中提到OpenSSH不止是一个安全shell,它还具有X11转发(X11 Forwarding)和端口转发(Port Forwarding)的功能.X11功能一般用于 ...
- httpclient调用webservice接口的方法实例
这几天在写webservice接口,其他的调用方式要生成客户端代码,比较麻烦,不够灵活,今天学习了一下httpclient调用ws的方式,感觉很实用,话不多说,上代码 http://testhcm.y ...
- FZU-2148-Moon Game,,几何计算~~
Problem 2148 Moon Game Time Limit: 1000 mSec Memory Limit : 32768 KB Problem Description Fat brothe ...
- MySQL性能优化的21个最佳实践 和 mysql使用索引【转载】
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...