4、Android UI測試
為你的APP進行UI測試是為了確保不出現意料之外的結果,提升使用者的體驗。如果你需要驗證你的APP UI的正確性,你需要養成建立UI測試的習慣。
Espresso測試框架是由Android Testing Support Library提供,包含了編寫UI測試的API用於模擬使用者在指定的APP介面上進行互動。Espresso測試可以執行在Android 2.2(API level 8)以上的裝置。當主執行緒空閒時,Espresso可以偵測到,所以它可以在合適的時候執行你的測試指令,提升測試的可信度。
Espresso基於儀表測試。
配置Espresso
先看第一篇。
在build.gradle檔案中新增依賴。
dependencies {
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
}
關閉測試機器的動畫。
建立一個Espresso 測試類
為了建立一個Espresso測試,按照以下的方式建立一個Java類:
1、 通過呼叫onView()方法或者onData()在Activity中找到需要測試的UI元件。
2、 通過呼叫ViewInteraction.perform()或DataInteraction.perform()在UI元件上模擬特定的使用者動作。
3、 需要的話重複如上動作。
4、 用ViewAssertions來檢測UI。
程式碼如下:
nView(withId(R.id.my_view))
.perform(click())
.check(matches(isDisplayed()));
使用帶ActivityTestRule的Espresso
下面將接受如何建立Junit 4風格的Espresso 測試,通過使用ActivityTestRule來減少不必要的程式碼。
package com.example.android.testing.espresso.BasicSample;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
...
@RunWith(AndroidJUnit4.class)
@LargeTest
public class ChangeTextBehaviorTest {
private String mStringToBetyped;
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(
MainActivity.class);
@Before
public void initValidString() {
// 宣告一個String
mStringToBetyped = "Espresso";
}
@Test
public void changeText_sameActivity() {
// 輸入文字,點選按鈕
onView(withId(R.id.editTextUserInput))
.perform(typeText(mStringToBetyped), closeSoftKeyboard());
onView(withId(R.id.changeTextBt)).perform(click());
// 檢測文字改變
onView(withId(R.id.textToBeChanged))
.check(matches(withText(mStringToBetyped)));
}
}
使用帶ActivityInstrumentationTestCase2的Espresso
程式碼如下:
import android.support.test.InstrumentationRegistry;
public class MyEspressoTest
extends ActivityInstrumentationTestCase2<MyActivity> {
private MyActivity mActivity;
public MyEspressoTest() {
super(MyActivity.class);
}
@Before
public void setUp() throws Exception {
super.setUp();
injectInstrumentation(InstrumentationRegistry.getInstrumentation());
mActivity = getActivity();
}
}
訪問UI元件
在測試下Espresso與你的app進行互動之前,你首先需要宣告UI 元件或者view。
程式碼如下:
public void testChangeText_sameActivity() {
// 輸入文字,點選按鈕
onView(withId(R.id.editTextUserInput))
.perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());
onView(withId(R.id.changeTextButton)).perform(click());
}
宣告一個ViewMatcher
可以通過如下方法宣告一個view matcher:
1、 呼叫ViewMatchers類中的方法。如下:
onView(withText("登陸"));
onView(withId(R.id.button_signin));
使用id的時候需要注意,Android中資源id並不是唯一的,使用不當,Espresso可能會丟擲AmbiguousViewMatcherException一場。
2、 使用Hamcrest Matchers類。你可以使用allof()方法來組合多個matchers。比如containsString()和instanceof()
onView(allOf(withId(R.id.button_signin), withText(“登陸”)));
onView(allOf(withId(R.id.button_signin), not(withText(“登出”))));
在AdapterView中定位View
程式碼如下:
onData(allOf(is(instanceOf(Map.class)),
hasEntry(equalTo(LongListActivity.ROW_TEXT), is(str))));
模擬動作
ViewActions.click():單擊view
ViewActions.typeText():單機view並輸入一個特定的string
ViewActions.scrollTo():滾動操作
ViewActions.pressKey();按鍵單機
ViewActions.clearText():清除text
驗證結果
通過呼叫ViewInteraction.check()或者DataInteraction.check()方法來檢測。
程式碼如下:
public void testChangeText_sameActivity() {
// 檢測text更改
onView(withId(R.id.textToBeChanged))
.check(matches(withText(STRING_TO_BE_TYPED)));
}
“`
本文作者:宋志輝
個人微博:點選進入
相關文章
- Android UI 測試指南之 EspressoAndroidUIEspresso
- android 5個自動化測試Ui框架AndroidUI框架
- Android 中構建快速可靠的 UI 測試AndroidUI
- Android使用Espresso進行UI自動化測試AndroidEspressoUI
- Android UI 自動化測試實現過程AndroidUI
- 自動化測試系列(三)|UI測試UI
- 測試4
- iOS 單元測試和 UI 測試快速入門iOSUI
- 自動化測試系列 —— UI自動化測試UI
- 解放雙手 - Android 開發應該嘗試的 UI 自動化測試AndroidUI
- Android單元測試(4):Mock 和Mockito的使用AndroidMockito
- UI 設計之AB測試UI
- Huxley:開源 UI 測試工具UXUI
- 一種新的UI測試方法:視覺感知測試UI視覺
- 軟體測試經典測試題(4)
- Junit 4 測試方法
- SM4測試
- 測試 之Java單元測試、Android單元測試JavaAndroid
- UI自動化測試實戰UI
- UI自動化測試之AirtestUIAI
- Xcode 7 中的 UI 測試XCodeUI
- UI 自動化測試平臺UI
- Junit測試Android自動化測試Android
- 利用 Rize 來進行 UI 測試或 E2E 測試UI
- Android單元測試-對Activity的測試Android
- Android單元測試-對View的測試AndroidView
- UI自動化測試框架Cypress初探UI框架
- Postman實現UI自動化測試PostmanUI
- [轉載]使用uiautomator做UI測試UI
- Sencha應用程式的UI測試 薦UI
- UI自動化測試工程實踐UI
- Android UI 設計(4):EditText 控制元件AndroidUI控制元件
- JUnit 4 單元測試
- OpenSSL測試-SM4
- [android]android自動化測試十四之dumpsys效能測試Android
- JF +Spring 4 +JUNIT4 測試?Spring
- Android - 單元測試Android
- android單元測試Android