Espresso - typeText无效

时间:2013-12-07 02:48:34

标签: android android-espresso

我正在尝试在EditText中输入一些文本:


    public void testSearch() {
          onView(withId(R.id.titleInput)).perform(typeText("Engineer"));
          onView(withId(R.id.titleInput)).check(matches(withText("Engineer")));
    }

我看到EditText正在获得焦点,但没有任何反应。没有输入文字。
我在手机和模拟器上试过这个 - 结果相同。

10 个答案:

答案 0 :(得分:16)

看起来我发现了这个问题。它与硬件和软件键盘有关。

对于模拟器:

转到设置 - >语言与输入 - >将默认输入切换到样本软键盘。

电话:

从Play商店安装软件键盘并切换到该键盘。看来某些手机的原生键盘不起作用。

现在有效。

答案 1 :(得分:10)

如果EditText还没有焦点,你应该先点击它。如果这可以解决您的问题,那么就没有错误。

onView(withId(R.id.titleInput)).perform(click()).perform(typeText("Engineer"));

答案 2 :(得分:10)

使用Espresso 2时遇到同样的问题。作为解决方法,我使用replaceText而不是typeText。

public void testSearch() {
      onView(withId(R.id.titleInput)).perform(click(), replaceText("Engineer"));
      onView(withId(R.id.titleInput)).check(matches(withText("Engineer")));
}

答案 3 :(得分:9)

您可以通过在EditText上调用setText来绕过此问题。

   final EditText titleInput = (EditText) activity.findViewById(R.id.titleInput);
   getInstrumentation().runOnMainSync(new Runnable() {
        public void run() {
            titleInput.setText("Engineer");
        }
    });

答案 4 :(得分:1)

您可以将其包含在这样的代码中,

onView(withId(R.id.titleInput))。perform(click(),replaceText(" Engineer"),closeSoftKeyboard());

答案 5 :(得分:0)

如果您正在使用Genymotion,您可能需要在Genymotion配置中切换默认键盘(它是模拟器上的应用程序)。

  1. 转到应用 - > Genymotion配置 - >键盘 - >虚拟键盘(当提示您重新启动时单击“是”)
  2. 注意:关闭模拟器后,这些更改不会保留。每次启动模拟器时都需要设置它。

答案 6 :(得分:0)

我通过在我想要layout_height="wrap_content"的视图上设置click()来修复此问题。也许它可以帮助这里的人。

答案 7 :(得分:0)

同一问题已通过以下解决:

myField.perform(scrollTo(), click(), clearText(), typeText(myInput))

有趣的是,只有当我的机器努力工作时,我才遇到问题。

答案 8 :(得分:0)

对我来说,我用@UiThreadTest注释了我的测试方法。我删除了它,然后解决了。

答案 9 :(得分:0)

closeSoftKeyboard()之后添加typeText()对我有用。

代码:

onView(withId(R.id.editTextUserInput))
            .perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());

这是Android docs中记录的方式。