如何在 Android 中通过 Espresso 捕捉带有标签的视图?
How to catch a View with Tag by Espresso in Android?
我有一个扩展 LinearLayout
的 PinCodeView
。我的 init()
方法中有以下代码。 DigitEditText
扩展 EditText
并且只接受一位数字。此视图将用于接收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"));
我用这个技巧解决了我的问题。希望它能为您节省一些时间。
首先我使用 Id
而不是 tag
。
for (int i = 0; i < 4; i++)
{
DigitEditText digitView = getDigitInput();
digitView.setId(R.id.etPinCodeView + i); // uses for Espresso testing
digitView.setKeyEventCallback(this);
...
这是测试:
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"));
因为 withTagValue
needs an instance of org.hamcrest.Matcher
as an argument, we can create a simple one using the Matcher.is
方法
在您的 expresso 测试中查找带有特定标签的视图:
String tagValue = "lorem impsum";
ViewInteraction viewWithTagVI = onView(withTagValue(is((Object) tagValue)));
在应用中某处的视图中设置标签后,对于那些对 Kotlin 中的语法感到困惑的人:
withTagValue(`is`(EXPECTED_TAG))
在特定视图上断言标记的完整语法:
onView(
allOf(
withId(R.id.some_id),
withTagValue(`is`(EXPECTED_TAG))
)
)
简单:)
我有一个扩展 LinearLayout
的 PinCodeView
。我的 init()
方法中有以下代码。 DigitEditText
扩展 EditText
并且只接受一位数字。此视图将用于接收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"));
我用这个技巧解决了我的问题。希望它能为您节省一些时间。
首先我使用 Id
而不是 tag
。
for (int i = 0; i < 4; i++)
{
DigitEditText digitView = getDigitInput();
digitView.setId(R.id.etPinCodeView + i); // uses for Espresso testing
digitView.setKeyEventCallback(this);
...
这是测试:
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"));
因为 withTagValue
needs an instance of org.hamcrest.Matcher
as an argument, we can create a simple one using the Matcher.is
方法
在您的 expresso 测试中查找带有特定标签的视图:
String tagValue = "lorem impsum";
ViewInteraction viewWithTagVI = onView(withTagValue(is((Object) tagValue)));
在应用中某处的视图中设置标签后,对于那些对 Kotlin 中的语法感到困惑的人:
withTagValue(`is`(EXPECTED_TAG))
在特定视图上断言标记的完整语法:
onView(
allOf(
withId(R.id.some_id),
withTagValue(`is`(EXPECTED_TAG))
)
)
简单:)