多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

Robotium的左右为难—enterText

更新时间:2022-04-27 09:12:24 作者:多测师 浏览:79

  最近测试框架收到反馈,详查后发现了一个Robotium的问题,甚有趣,遂记录。

  问题场景:

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

  问题分析:

  这个问题不需要深入的分析流程,直接看enterText源码便可发现大概问题:

Robotium的左右为难—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,弹出键盘,输入文字,隐藏键盘。虽然这个流程短,但状态变化很大:

  焦点发生变化,这可能会影响后续的检查/业务流程(触发事件之类…)。

  弹出/隐藏键盘,这会触发Android从Touch模式变为键盘模式。另外弹出/隐藏键盘可能有监听事件,如不触发操作,监听事件不会执行。

  2. 为什么要在setText之前hideSoftKeyboard?

  如果performClick和hideSoftKeyboard是上面的原因,那么hideSoftKeyboard在setText之前/后都没所谓了,因为他压根不影响输入。

  3. 如果不执行hideSoftKeyboard会怎么样?

  隐藏键盘的监听事件不执行。

  Android将停留在键盘模式。

  最重要的是:不藏起来,键盘一直占了半个屏啊,Robotium要可视控件才能操作,弹出键盘可能会影响其他控件的操作。

  这么说,Robotium在enterText的时候做performClick和hideSoftKeyboard是很合理的。

  回到之前的问题,为什么它会导致“信息发送失败”呢?

  因为这个产品设计是,藏起键盘时,bottom_bar会回退到初始状态。

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

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

  解决方案:

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

  以上内容为大家介绍了自动化测试中的Robotium的左右为难—enterText,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部