Mar*_*kus 4 android android-actionbar android-espresso
我SearchView在ActionBar中有一个从XML中膨胀的东西
<?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>
Run Code Online (Sandbox Code Playgroud)
我用这种方式在片段中给它充气:
@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);
}
Run Code Online (Sandbox Code Playgroud)
我的测试:
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"));
Run Code Online (Sandbox Code Playgroud)
看起来该字段在开始输入时失去焦点.我不知道为什么.
找到所有视图并且typeText语句通过顺畅,但文本不会出现在字段中.我也尝试过简单EditText和自定义,android:actionLayout但结果相同.
有什么我想念的吗?
Jen*_*sen 18
这段代码适用SerachView于我的ActionBar,因为这SearchView是EditText我的唯一Fragment:
onView(withId(R.id.action_search)).perform(click());
onView(isAssignableFrom(EditText.class)).perform(typeText("test"), pressKey(KeyEvent.KEYCODE_ENTER));
Run Code Online (Sandbox Code Playgroud)
KeyEvent.KEYCODE_ENTER 是按下提交按钮的代码.
小智 10
搜索视图具有默认ID.你可以用这种方式在Espresso中获得它.
onView(withId(android.support.design.R.id.search_src_text)).perform(typeText("example"), pressKey(KeyEvent.KEYCODE_ENTER));
Run Code Online (Sandbox Code Playgroud)
希望这很有用.
最后,我决定创建自己的自定义操作,因为我无法输入文本工作。这是我的代码:
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);
}
};
}
Run Code Online (Sandbox Code Playgroud)
此代码对于在 TextView 的所有子级中编写代码很有用。F. 例如,EditText。
我从/sf/answers/2299513331/获取此代码
| 归档时间: |
|
| 查看次数: |
6121 次 |
| 最近记录: |