上面介绍了基本的输入框、文字显示,接下来我们说下监听事件
监听事件包含:文字监听、按钮、listView监听、gridView、arrayLIST、RecycleListView。
1、文字和按钮
通过id或是文字找到
onView(withId(R.id.search_text)).perform(click());
onView(withText("搜索")).perform(click());
如果当你遇到有相同文字时你可以通过他相邻的控件来判断;
onView(allOf(withText("数据"), hasSibling(withText("item 0")))).perform(click());
hasSibling
(
withText
(
"第一行"
);表示是在第一行的旁边
2、listView、gridView、arrayLIST
下面我们通过代码说下listView的点击
Thread.sleep(1000);
onView(withId(R.id.rl_contact_main_group_item)).perform(click());
Thread.sleep(1000);//等待加载列表
onData(instanceOf(TNPFeed.class)) //item的数据类型
.inAdapterView(withId(R.id.lv_contact)) //根据listView的id 找到adapter
.atPosition(1) //找到listView的某个item
.perform(click()); //点击
Thread.sleep(2000);
Thread.sleep(1000); 表示主线程等待1秒;为什么需要些这个代码呢,那是因为如果界面还未加载出来,你就去执行点击控件的操作,会报找不到View的错误,所有如果界面上的内容比较复杂可以相应的控制时间,特别是在请求接口时候,就更要延长时间;
onView(withId(R.id.rl_contact_main_group_item)).perform(click());表示点击一个id为R.id.rl_contact_main_group_item的控件;
instanceOf(TNPFeed.class);表示你列表数据的对象
.atPosition(1) 里面的1表示你要点击的位置;
onData(instanceOf(TNPFeed.class)).inAdapterView(allOf(withId(R.id.lv_apps),isDisplayed())).atPosition(0).perform(click());
allOf(withId(R.id.lv_apps),isDisplayed()) 表示id是R。id.lv_apps并且是在当前页,只有满足了这两个要求才是我们要找的控件
3、RecycleListView
这个是比较特殊的,他和listView还有有很大差别的,他不能像listView那样通过InAdapterView()来获取,
ViewInteraction interaction = onView(withId(R.id.lst_class));
interaction.check(matches(isDisplayed()));
interaction.perform(RecyclerViewActions.scrollToPosition(0));
Thread.sleep(1000);
interaction.perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
RecyclerViewActions.scrollToPosition(0)表示的是其需要找到的位置,
RecyclerViewActions.actionOnItemAtPosition(0, click())) 这个是其需要点击的位置,并且调用click()方法点击;
那么还有一个问题如果一个页面只能显示10条数据,你要点击第15条怎么办,没关系的如果有存在第15条数据,那么它会自动滑动的;
下面这个里面作者也写的挺好的,涉及到的内容比较广;