操作对话框(Dialog)上面的控件

  Robotium框架提供了获取、操作控件的API,如下图:

  对于有id或者String的控件可以通过Robotium直接找到,但是对于弹出的Dialog上面的控件单纯的利用Robotium的API是行不通的,见下图场景:

  对于上图中弹出的Dialog中仅仅对Set和Cancel按钮操作是可以的,但是要是操作+ – 按钮或者需要拿到EditText控件需要费点心思了。

  思路:主要是在弹出Dialog后通过Robotium的solo.getCurrentViews()方法得到Dialog上面的所有控件然后进行相关条件筛选。

/**
  * 获得dialog上面的指定类型和位置的控件,在dialog弹出时调用
  * @param solo
  * @param viewType View类型
  * @param index view位置
  * @return 返回dialog上面的指定类型和位置的控,不存在则返回null
  */
 public static View getViewFromDialogByIndex(Solo solo, Class viewType , int index){
     ArrayList dialogViews = solo.getCurrentViews();
     ArrayList typeViews = new ArrayList();
     for(View currentTypeView : dialogViews){
      if(viewType.isInstance(currentTypeView)){
       typeViews.add(currentTypeView);
      }
     }
     if(dialogViews.size()>0){
      return typeViews.get(index);
     }else {
      return null;
  }
 }