Issue
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"));
Solution
I solved my problem with this trick. Hope it saves some times for you.
First I used Id
rather than tag
.
for (int i = 0; i < 4; i++)
{
DigitEditText digitView = getDigitInput();
digitView.setId(R.id.etPinCodeView + i); // uses for Espresso testing
digitView.setKeyEventCallback(this);
...
And this is test for it:
onView(withId(R.id.etPinCodeView + 0)).perform(typeText("2"));
onView(withId(R.id.etPinCodeView + 1)).perform(typeText("0"));
onView(withId(R.id.etPinCodeView + 2)).perform(typeText("1"));
onView(withId(R.id.etPinCodeView + 3)).perform(typeText("6"));
Answered By - Hesam
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.