Espresso - typeText无效

Edu*_*ysh 11 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正在获得焦点,但没有任何反应.没有输入文字.
我在手机和模拟器上试过这个 - 结果相同.

Edu*_*ysh 16

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

对于模拟器:

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

对于电话:

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

它现在有效.


小智 11

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

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

  • 解决方案可能会正常工作但我认为这不是正确的方法.当Espresso发布了一个允许你这样做的API时,我认为我们应该专注于这个bug.为什么不在他们的网站上打开一个bug或在谷歌小组讨论. (2认同)

小智 11

使用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")));
}
Run Code Online (Sandbox Code Playgroud)


小智 10

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

onView(withId(R.id.titleInput)).perform(click()).perform(typeText("Engineer"));
Run Code Online (Sandbox Code Playgroud)

  • 不知道Espresso在2013年是如何工作的,当你回答时,现在点击/焦点由`ViewActions.typeText()来处理 (3认同)

小智 5

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

onView(withId(R.id.titleInput))
     .perform(click(), replaceText("Engineer"), closeSoftKeyboard());
Run Code Online (Sandbox Code Playgroud)


Mik*_*ins 5

同样的问题通过以下方法解决:

editText.perform(scrollTo(), click(), clearText(), typeText(myInput), closeSoftKeyboard())
Run Code Online (Sandbox Code Playgroud)

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