Joh*_*hnA 4 android android-edittext android-espresso
这是我的布局的一部分:
<com.rey.material.widget.EditText
android:id="@+id/tagEditorSettings"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginStart="10dp"
android:layout_toEndOf="@+id/circularProgressbar"
android:hint="@string/tag_name_tag_settings"
android:inputType="text"
android:textSize="18sp"
app:et_dividerColor="@color/my_primary"
app:et_dividerHeight="1dp"
app:et_inputId="@+id/name_input"
app:et_labelEnable="true"
app:et_labelTextSize="14sp"
app:et_supportLines="1" />
Run Code Online (Sandbox Code Playgroud)
和我的测试代码:
onView(withId(R.id.tagEditorSettings))
.perform(click()).perform(clearText());
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,我收到这样的错误:
引起:java.lang.RuntimeException:由于目标视图不匹配以下一项或多项约束,将不会执行操作:(在屏幕上显示给用户并且可从类:class android.widget.EditText )
据我所知,问题出在“可从类中分配:类 android.widget.EditText”,但有人可以请教,我如何修复它并在我的情况下使用?
问题:com.rey.material.widget.EditText扩展自Framelayout,clearText使用ReplaceTextAction作为
public static ViewAction clearText() {
return actionWithAssertions(new ReplaceTextAction(""));
}
Run Code Online (Sandbox Code Playgroud)
其中ReplaceTextAction强制执行view,一种类型EditText为
allOf(isDisplayed(), isAssignableFrom(EditText.class));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
由于rey...EdiText不是EditText因此错误的子类
解决方案:创建自己ViewAction的
public static ViewAction clearTextInCustomView(){
return new ViewAction() {
@SuppressWarnings("unchecked")
@Override
public Matcher<View> getConstraints() {
return allOf(isDisplayed(), isAssignableFrom(com.rey.material.widget.EditText.class));
// ^^^^^^^^^^^^^^^^^^^
// To check that the found view is type of com.rey.material.widget.EditText or it's subclass
}
@Override
public void perform(UiController uiController, View view) {
((com.rey.material.widget.EditText) view).setText("");
}
@Override
public String getDescription() {
return "clear text";
}
};
}
Run Code Online (Sandbox Code Playgroud)
然后你可以做
onView(withId(R.id.tagEditorSettings))
.perform(click()).perform(clearTextInCustomView());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1103 次 |
| 最近记录: |