I have a PinCodeView
that extends LinearLayout
. I have following code in my init()
method. DigitEditText
extends EditText
and just accepts one digit. This view will be used to receive confirmation code which has 4 digits long.
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);
...
}
I have created res/values/ids.xml
and this is its content:
<resources>
<item name="etPinCodeView" type="id"/>
</resources>
Now, in Espresso I want to catch each DigitEditText
and put a digit in it. How I'm able to do that? I see there are two methodes, withTagKey()
and withTagValue()
but I have no idea how to get them into work.
I thought something like this might work but seems I'm not able to assign 0 into withTagValue()
.
onView(allOf(withTagKey(R.id.etPinCodeView), withTagValue(matches(0)))).perform(typeText("2"));
Since
withTagValue
needs an instance oforg.hamcrest.Matcher
as an argument, we can create a simple one using theMatcher.is
method to find views with a certain tag in your expresso test:I solved my problem with this trick. Hope it saves some times for you.
First I used
Id
rather thantag
.And this is test for it: