Espresso设置游标为edittext

时间:2018-05-22 01:02:14

标签: android android-espresso

我正在尝试使用EditText测试已包含某些文字的Espresso。问题是当我使用typeText()时,光标位于文本中的任意位置。我在使用click()之前尝试执行typeTextIntoFocusedView,但光标有时会放在EditText的开头。我想知道在将文本输入文本之前是否可以将光标设置在EditText的末尾?

4 个答案:

答案 0 :(得分:2)

我发现这样做的唯一方法是获取对EditText本身的引用并使用EditText#setSelection()。例如,将光标移动到当前文本的末尾:

    val activity = activityRule.activity
    val tv = activity.findViewById<EditText>(R.id.edittext)
    activity.runOnUiThread { tv.setSelection(tv.text.length) } 

答案 1 :(得分:1)

一种更好的方法是按其应使用的方式使用Espresso:对视图匹配器进行操作。

科特林的例子:

class SetEditTextSelectionAction(private val selection: Int) : ViewAction {

    override fun getConstraints(): Matcher<View> {
        return allOf(isDisplayed(), isAssignableFrom(EditText::class.java))
    }

    override fun getDescription(): String {
        return "set selection to $selection"
    }

    override fun perform(uiController: UiController, view: View) {
        (view as EditText).setSelection(selection)
    }
}

用法示例:

onView(withId(R.id.my_text_view).perform(SetEditTextSelectionAction(selection))

与手动执行findViewById()相比,另一个优势是,如果您没有视图ID,则可以将其与withSubString("my text")之类的匹配器结合使用。

顺便说一句:将其更改为文本末尾的设置选择,您只需删除selection: Int构造函数参数并将setSelection(selection)更改为setSelection(view.text.lastIndex)

答案 2 :(得分:0)

通过插入KeyCode分别表示“主页”和“结束”,我获得了成功。通过将光标移动到EditText的开头或结尾,它们就像在桌面键盘上一样工作。例如:

onView(withId(R.id.myView))
    .perform(pressKey(KeyEvent.KEYCODE_MOVE_HOME))

要移至末尾,可以使用KeyEvent.KEYCODE_MOVE_END,也可以使用KeyEvent.KEYCODE_DPAD_LEFTKeyEvent.KEYCODE_DPAD_RIGHT向左或向右移动。

答案 3 :(得分:0)

我想发布我的答案,因为我刚遇到这个问题,而其他答案都不能解决我的问题。

我使用GeneralClickAction单击编辑文本的右侧,该光标将光标放在需要的EditText的末尾。之后,我使用TypeTextAction并通过将false传递给构造函数来禁用tapToFocus行为:

onView(withId(R.id.edit_text))
.perform(
  new GeneralClickAction(Tap.SINGLE, GeneralLocation.CENTER_RIGHT, Press.FINGER, 0, 0, null),
  new TypeTextAction(text, false)
);
相关问题