Issue: com.rey.material.widget.EditText https://github.com/rey5137/material/blob/master/material/src/main/java/com/rey/material/widget/EditText.java延伸自Framelayout
and 明文 https://android.googlesource.com/platform/frameworks/testing/+/android-support-test/espresso/core/src/main/java/android/support/test/espresso/action/ViewActions.java uses 替换文本动作 https://android.googlesource.com/platform/frameworks/testing/+/android-support-test/espresso/core/src/main/java/android/support/test/espresso/action/ReplaceTextAction.java as
public static ViewAction clearText() {
return actionWithAssertions(new ReplaceTextAction(""));
}
where ReplaceTextAction
强制执行view
, 一种EditText
as
allOf(isDisplayed(), isAssignableFrom(EditText.class));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Since rey...EdiText
不是 的子类EditText
因此出现错误
Solution: 创建你自己的ViewAction
as
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";
}
};
}
稍后你可以做
onView(withId(R.id.tagEditorSettings))
.perform(click()).perform(clearTextInCustomView());