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代码量也不是很大,因此打算学习一下. 一. ...
随机推荐
- tornado框架基础11-tornado异步
01 同步和异步 生活中常常会遇到在超市排队买东西的情况,排在你前面的人没有结算完成,你就无法付账,在计算机中也有类似的情形,一个程序在执行之前,需要等待其他的程序执行完成,大家还能举出其他的例子吗? ...
- C#如何根据DataTable生成泛型List或者动态类型list
背景:在项目中,sql语句检索返回DataTable,然后根据检索结果做进一步的操作,本篇文章即是介绍如何将DataTable快速生成泛型List返回. 假设存在如下学生类: public class ...
- 实现List集合中数据逆序排列
Collections.reverse(list); 实现list集合逆序排列
- 调用hcm接口同步员工数据更新员工信息没有同步到bdm
原来是更新的时候,baseEmployeeEntity的id为空,这时候需要把原先的baseEmployeeEntity1的id赋值给baseEmployeeEntity,问题解决
- String painter(区间DP)
There are two strings A and B with equal length. Both strings are made up of lower case letters. Now ...
- HDU-1087Super Jumping! Jumping! Jumping!
Super Jumping! Jumping! Jumping! ...
- 准确率(Precision),召回率(Recall)以及综合评价指标(F1-Measure)
准确率和召回率是数据挖掘中预测,互联网中得搜索引擎等经常涉及的两个概念和指标. 准确率:又称“精度”,“正确率” 召回率:又称“查全率” 以检索为例,可以把搜索情况用下图表示: 相关 不相关 检索 ...
- [codeforces538D]Weird Chess
[codeforces538D]Weird Chess 试题描述 Igor has been into chess for a long time and now he is sick of the ...
- 聊聊flink的log.file配置
本文主要研究一下flink的log.file配置 log4j.properties flink-release-1.6.2/flink-dist/src/main/flink-bin/conf/log ...
- hdu 分类
HDU分类 http://www.cnblogs.com/ACMan/archive/2012/05/26/2519550.html#2667329 努力A完.方便自己系统A题 不断更新中...... ...