2013-08-03 57 views
0

我目前的任務是進行一些Android GUI測試,並且在找到對位於從基本視圖打開的對話框上的元素的引用時遇到困難:獲取對自定義對話框上控件的引用(Android JUnit測試)

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

對話框不擴展視圖,這就是爲什麼你不能使用:

findViewById(R.id.dialog_new_type); 

你爲什麼不只是使用:

findViewById(R.id.whatever_control_on_the_dialog) 
+0

嗯,這樣就解釋了對話框的空值。謝謝。但是,當我按照您的建議搜索EditText時,它也會返回null。這是我用的:typeName =(EditText)mainActivity.findViewById(R.id.dialog_new_type_edit); –

+0

在佈局xml文件中是這個EditText控件直接嵌套在對話框元素(LinearLayout)中(我在代碼片段中添加了描述)。 –