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")));