在espresso测试中,typeText()无法使用带有白色背景的EditText

时间:2015-08-28 09:17:40

标签: android android-testing android-espresso

在一个小应用程序中,我试图隐藏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")));
  }


}

1 个答案:

答案 0 :(得分:2)

你的clearText()失败了,而不是typeText()。

但失败的原因是Espresso无法对视图做任何事情,因为视图的高度和宽度为0。

如果您使用“层次结构视图”工具检查其他视图,您会注意到所有其他edittexts都有高度,即使您的main_label_1的高度设置为22,因此espresso也可以在那里键入文本。