在自定义对话框上获得对控件的引用(Android JUnit测试)

时间:2013-08-03 08:05:07

标签: android junit

我目前的任务是进行一些Android GUI测试,我在查找位于从基本视图打开的对话框中的元素的引用时遇到了困难:

setContentView(R.layout.dialog_new_type); 

为了找到控件,我使用findViewById,f.ex:

Button addType = (Button) mainActivity.findViewById(R.id.main_menu_button_add_type);

这很有效。按下此按钮后,将打开自定义对话框:

new DialogNewType(v.getContext(), controller).show();

并找到该对话框上的控件让我很头疼。

我认为基本的想法是这样的: findViewById(R.id.dialog_new_type).findViewById(R.id.whatever_control_on_the_dialog),但对对话框的引用返回null。我还尝试使用findViewById(R.layout.my_dialog)获取对话框的引用,也返回null。

或者,我尝试使用Robotium框架来实现控件,如下所示:

ArrayList<EditText> test = solo.getCurrentViews(EditText.class);
EditText et = test.get(0); 

通过这种方式,我获得了所需控件的引用,但是我发现它非常脏,并且更愿意使用“普通的旧Android”来获得相同的解决方案。

这是对话框布局的样子:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/dialog_new_type"
>

    <EditText 
     android:hint="@string/dialog_new_type_edit_hint"
     android:inputType="textAutoCorrect"
     android:layout_height="wrap_content"
     android:layout_width="fill_parent"
     android:visibility="visible"
     android:id="@+id/dialog_new_type_edit">
        <requestFocus></requestFocus>
    </EditText>
</LinearLayout>

1 个答案:

答案 0 :(得分:1)

Dialog不会扩展View,这就是你无法使用的原因:

findViewById(R.id.dialog_new_type);

为什么不使用:

findViewById(R.id.whatever_control_on_the_dialog)