Google I/O 2016 Android笔记之Espresso进阶
例程:
@RunWith(AndroidJUnit4.class)
public class LoginUITest {
@Rule
public ActivityTestRule<LoginActivity> rule=new ActivityTestRule<LoginActivity>(LogingActivity.class,true);
@Test
public void login(){
//login
onView(withId(R.id.userName)).perform(typeText("Jack"),closeSoftKeyboard());
onView(withId(R.id.password)).perform(typeText("1234"),closeSoftKeyboard());
onView(withText("登录")).perform(click());
//verify
onView(withId(R.id.content)).check(matches(isDisplayed()));
}
}
作者:汪海游龙
链接:https://www.jianshu.com/p/22a09ae7b995
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
分为三步:
一.定位控件(ViewMatcher)
通过id定位
onView(withId(R.id.my_view))
通过字符串定位
onView(withText("Hello"))
如果目标视图在AdapterView(例如ListView,GridView,Spinner)中,onView方法可能无法正常工作,这个时候需要用到onData方法。
假设一个Spinner的控件,我们要点击“Americano”,我们使用默认的Adaptor,它的字段默认是String的,因此当我们要进行点击的时候,就可以使用如下方法:
onData(allOf(is(instanceOf(String.class)), is("Americano"))).perform(click());
假设是一个Listview,我们需要点击Listview中第二个item的按钮,那么我们需要这样写:
onData(Matchers.allOf())
.inAdapterView(withId(R.id.photo_gridview)) // listview的id
.atPosition(1) // 所在位置
.onChildView(withId(R.id.imageview_photo)) // item中子控件id
.perform(click());
二.执行操作(ViewAction)
可以通过一个命令执行多个操作:
onView(...).perform(typeText("Hello"), click()); //从左往右顺序执行操作
三.校验(ViewAssertion)
使用check方法可以断言当前选择的界面, 常用的断言是matches,它使用ViewMatcher来断言当前选定视图的状态。例如,要检查视图中是否包含“Hello”这个字符串:
onView(...).check(matches(withText("Hello")));