我有一个PinCodeView扩展了LinearLayout。我的init()方法中有以下代码。 DigitEditText扩展了EditText,仅接受一位数字。此 View 将用于接收长4位数字的确认代码。

private void init()
{
    ...

    for (int i = 0; i < 4; i++)
    {
        DigitEditText digitView = getDigitInput();
        digitView.setTag(R.id.etPinCodeView, i); // uses for Espresso testing
        digitView.setKeyEventCallback(this);
        ...
}

我创建了res/values/ids.xml,这是它的内容:
<resources>
    <item name="etPinCodeView" type="id"/>
</resources>

现在,在Espresso中,我想捕获每个DigitEditText并在其中放入一个数字。我该怎么做?我看到有两种方法,withTagKey()withTagValue(),但我不知道如何使它们生效。

我以为这样的事情可能会起作用,但似乎我无法将0分配给withTagValue()
onView(allOf(withTagKey(R.id.etPinCodeView), withTagValue(matches(0)))).perform(typeText("2"));

最佳答案

由于 withTagValue 需要org.hamcrest.Matcher的实例作为参数,因此我们可以使用 Matcher.is 方法创建一个简单的实例
在表情测试中查找带有特定标签的 View :

String tagValue = "lorem impsum";
ViewInteraction viewWithTagVI = onView(withTagValue(is((Object) tagValue)));

09-05 04:07