2014-07-24 26 views
4

我有我的動作條一SearchView是從XML充氣的Android咖啡的TypeText到的EditText在動作條

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/action_menu_search" 
     android:showAsAction="always|collapseActionView" 
     android:icon="@drawable/action_bar_search_icon" 
     android:actionViewClass="android.widget.SearchView"/> 
</menu> 

我這樣吹在我的片段:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    inflater.inflate(R.menu.search, menu); 

    final MenuItem item = menu.findItem(R.id.action_menu_search); 
    searchView = (SearchView) item.getActionView(); 
    searchView.setOnQueryTextListener(this); 
} 

而且我的測試:

onView(withId(R.id.catalog_filter_indicator_header_text)).perform(click()); 

//enter text and wait for suggestions 
onView(withId(R.id.action_menu_search)).perform(click()); 
onViewisAssignableFrom(AutoCompleteTextView.class)).perform(click(), typeText("test")); 

看起來像字段開始鍵入時失去焦點。我不知道爲什麼。

找到所有視圖並且typeText語句順利通過,但文本不會顯示在字段中。我也嘗試用簡單的EditText和自定義android:actionLayout但結果相同。

有什麼我失蹤了嗎?

回答

1

最後,我決定創建自己的自定義操作,因爲我無法工作的TypeText。這裏你是我的代碼:

public static ViewAction setText(final String text){ 
    return new ViewAction(){ 
     @Override 
     public Matcher<View> getConstraints() { 
      return allOf(isDisplayed(), isAssignableFrom(TextView.class)); 
     } 

     @Override 
     public String getDescription() { 
      return "Change view text"; 
     } 

     @Override 
     public void perform(UiController uiController, View view) { 
      ((TextView) view).setText(text); 
     } 
    }; 
} 

這段代碼對於從TextView的所有孩子中編寫代碼很有用。 F. ex,E​​ditText。

我把這個代碼https://stackoverflow.com/a/32850190/1360815

+0

有沒有原因你沒有使用['UiController.injectKeyEvent()'](http:// developer。 android.com/reference/android/support/test/espresso/UiController.html#injectKeyEvent(android.view.KeyEvent))爲了更密切地模擬實際的打字? –

14

此代碼爲SerachView在我ActionBar,因爲SearchView是我Fragment唯一EditText

onView(withId(R.id.action_search)).perform(click());  
onView(isAssignableFrom(EditText.class)).perform(typeText("test"), pressKey(KeyEvent.KEYCODE_ENTER)); 

KeyEvent.KEYCODE_ENTER是按下提交按鈕的代碼。

+0

我的代碼和你的代碼一樣。你是否在仿真器或genymotion或實際設備上運行測試? –

+0

您是否使用EditTex而不是AutoCompleteTextView來嘗試它?我想我以前曾用AutoCompleteTextView試過,並且這對我沒有用......我的測試正在真實設備和仿真器上運行。 – JensJensen

+3

'pressKey(KeyEvent.KEYCODE_ENTER)'做同樣的事情,是一個更易讀的海事組織。 – vaughandroid

1

的EditText上的搜索查看id是search_src_text

onView(withId(R.id.action_menu_search)).perform(click()); 
onView(withId(R.id.search_src_text)).perform(typeText("test")); 
9

搜索視圖具有默認的ID。 你可以用這種方式在濃咖啡中得到它。

onView(withId(android.support.design.R.id.search_src_text)).perform(typeText("example"), pressKey(KeyEvent.KEYCODE_ENTER)); 

希望這是有用的。