在一个小应用程序中,我试图隐藏EditText字段(onCreate of activity,我们将焦点设置为它)。因此,一旦用户启动活动并开始输入,我就会在Activity上渲染角色图像。
由于功能正在发挥作用,但我发现很难为它编写espresso测试。我遇到过如果EditText将背景颜色设置为白色(#FFFFFF),那么espresso无法对其执行typeText()操作。在控制台中显示错误。
android.support.test.espresso.PerformException: Error performing 'replace text' on view 'with id: some.test.test.espressopractice:id/main_label_2'
任何输入都有助于理解这一点。以下是示例代码。代码https://github.com/anilnamde/AndroidStudy/tree/master/EspressoPractice的github网址。
布局activity_main.xml
<EditText
android:text="First"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#FF0000"
android:textSize="40sp"
android:id="@+id/main_label"/>
<EditText
android:text="Second"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#00FF00"
android:height="0dp"
android:width="0dp"
android:textSize="40sp"
android:id="@+id/main_label_1"/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#0000FF"
android:background="#FFFFFF"
android:height="0dp"
android:width="0dp"
android:id="@+id/main_label_2"/>
</LinearLayout>
活动代码MainActivity.class
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
....
}
测试代码如下
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> rule = new ActivityTestRule<MainActivity>(MainActivity.class);
// Normal EditText : Passed
@Test
public void testNormalEditText(){
onView(withId(R.id.main_label)).check(matches(withText("First")));
onView(withId(R.id.main_label)).perform(clearText(), typeText("Hello"));
onView(withId(R.id.main_label)).check(matches(withText("Hello")));
}
// EditText with 0dp width and 0dp height - Passed
@Test
public void testEditTextWithHeighWidthZero(){
onView(withId(R.id.main_label_1)).check(matches(withText("Second")));
onView(withId(R.id.main_label_1)).perform(clearText(), typeText("Hello"));
onView(withId(R.id.main_label_1)).check(matches(withText("Hello")));
}
// EditText has white background : Failed
@Test
public void testEditTextWithHeighWidthZeroAndWhiteBackground(){
onView(withId(R.id.main_label_2)).perform(clearText(), typeText("Hello"));
onView(withId(R.id.main_label_2)).check(matches(withText("Hello")));
}
}
答案 0 :(得分:2)
你的clearText()失败了,而不是typeText()。
但失败的原因是Espresso无法对视图做任何事情,因为视图的高度和宽度为0。
如果您使用“层次结构视图”工具检查其他视图,您会注意到所有其他edittexts都有高度,即使您的main_label_1的高度设置为22,因此espresso也可以在那里键入文本。