2015-12-11 32 views
1

我與元素的列表,其中每一個與一個ArrayAdapter提供一個對話框:選擇咖啡與ArrayAdapter和材料v7的支持庫對話框選項

@Override 
    public Dialog onCreateDialog(Bundle savedInstanceState){ 

     ArrayList<String> names = getArguments().getStringArrayList(INTENT_OPTIONS); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(
       getActivity(), android.R.layout.simple_list_item_1, names); 
     DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener(){ 
      @Override 
      public void onClick(DialogInterface dialog, int which){ 
       if (mListener != null){ 
        mListener.onSelectedElement(which); 
       } 
      } 
     }; 

     return new AlertDialog.Builder(getActivity()) 
       .setTitle(R.string.loginActivity_selectVACenter) 
       .setCancelable(true) 
       .setAdapter(adapter, listener) 
       .create(); 
    } 

之前執行程序兼容性V7庫納入材料特性我選擇的每個元素在咖啡與下面的句子:

onView(withText("text of the entry")) 
        .perform(click()); 

但添加這個庫後,這句話不工作了,咖啡找不到視圖和拋出一個NoMatchingViewException。

是否有任何其他方式來訪問對話框選項?

+1

添加請該對話框的截圖,當然是一個完整的日誌的'NoMatchingViewException' – piotrek1543

回答

1

我已經發現了這個話題可能會有所幫助:Check if a dialog is displayed with Espresso

在可能的答案之一是有getRootView()匹配:

要回答問題4,其接受的答案不對,我修改了 下面的代碼,我在這裏找到Stack Overflow (link),用於測試 是否顯示Toast。

@NonNull 
public static ViewInteraction getRootView(@NonNull Activity activity, @IdRes int id) { 
    return onView(withId(id)).inRoot(withDecorView(not(is(activity.getWindow().getDecorView())))); 
} 

id傳入是View的當前顯示在您的 對話框中的ID。你也可以寫像這樣的方法:

@NonNull 
public static ViewInteraction getRootView(@NonNull Activity activity, @NonNull String text) { 
    return onView(withText(text)).inRoot(withDecorView(not(is(activity.getWindow().getDecorView())))); 
} 

,現在是尋找包含特定文本字符串View

使用它,像這樣:

getRootView(getActivity(), R.id.text_id).perform(click()); 

先試試這個。也是同樣的主題,你會發現這個方法:。

onView(withText(R.string.my_title))器InRoot(isDialog())檢查(匹配(isDisplayed()));

如果它仍然不起作用,它可能會使用onData匹配器。

只要你有一個ListView,GridView控件,微調,和其他適配器 爲本次,你必須以與從該列表中的 項交互使用昂達()。 onData()直接針對您的適配器提供的數據 。這是什麼意思,我們馬上就會看到。[1]

你可以閱讀一下:

Get started with a simple test using onData

[codepath] UI Testing with Espresso

Android Espresso onData with doesNotExist

+1

這些解決方案都不起作用:( – svprdga

+0

尋找在Espr中使用'scrollTo()'埃索像:http://stackoverflow.com/questions/25410613/android-espresso-scrolling-to-a-non-list-view-item – piotrek1543