我有一个活动,该活动具有片段容器,该片段容器使用recyclerview加载片段。单击任何回收者视图项目时,它将打开一个新活动。我想为这种情况编写一个espresso测试用例。
我的活动:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/background">
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:layout_weight="1">
</FrameLayout>
我的片段xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_items"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
MyTestCase:
@RunWith(AndroidJUnit4.class)
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Before
public void init() {
mActivityTestRule.getActivity()
.getSupportFragmentManager().beginTransaction();
}
@Test
public void recyclerview_clickTest() {
/* onView(withId(R.id.fragmentContainer)).perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
onView(withText("Alpha")).perform(click());
onView(allOf(instanceOf(TextView.class), withParent(withResourceName("action_bar"))))
.check(matches(withText("Alpha")));*/
onData(allOf(is(new BoundedMatcher<Object, MyModel>(MyModel.class) {
@Override
public void describeTo(Description description) {
}
@Override
protected boolean matchesSafely(MyModel abc) {
return onView(allOf(instanceOf(TextView.class), withParent(withResourceName("action_bar"))))
.check(matchesSafely(withResourceName(abc)));
}
})));
}
}
TIA。
答案 0 :(得分:0)
您可以将ViewMatchers用于此操作,例如:
onView(withId(R.id.your_recycler_view))。perform(RecyclerViewActions.actionOnItemAtPosition(0,click()));
答案 1 :(得分:0)
尝试以下
Price::where('start', '<=', $price)->where('end', '>=', $price)->first();
如果以上方法仍然无效,并且您确定显示了回收者视图,则启动UIAutomator并尝试突出显示回收者视图上方的内容,检查突出显示的内容是否是回收者视图,可能是回收者视图可能上面有一些东西使其无法点击(或者甚至可能没有显示)。
要检查的另一件事是,是否存在过渡并且没有动画,测试可能正在寻找尚未显示的回收者视图。您可能要检查https://developer.android.com/training/testing/espresso/idling-resource
为了更快地进行检查,只需在单击“回收者”视图之前使线程进入睡眠状态
onView(allOf(isDisplayed(), withId(R.id.your_recycler_view))).perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));