我正在尝试在EditText中输入一些文本:
public void testSearch() {
onView(withId(R.id.titleInput)).perform(typeText("Engineer"));
onView(withId(R.id.titleInput)).check(matches(withText("Engineer")));
}
我看到EditText正在获得焦点,但没有任何反应。没有输入文字。
我在手机和模拟器上试过这个 - 结果相同。
答案 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配置中切换默认键盘(它是模拟器上的应用程序)。
注意:关闭模拟器后,这些更改不会保留。每次启动模拟器时都需要设置它。
答案 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中记录的方式。