4、Android UI测试
来源:互联网 发布:as3.0调用js页面方法 编辑:程序博客网 时间:2024/06/06 12:59
为你的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)@LargeTestpublic 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)));
}
“`
本文作者:宋志辉
个人微博:点击进入
- 4、Android UI测试
- Android UI 测试框架
- Android UI自动化测试
- Android UI 自动化测试
- Android UI 自动化测试
- android ui测试uiautomator
- Android UI 自动化测试
- Android UI 自动化测试
- android测试:UI automator
- Android Espresso UI测试
- Android UI 自动化测试工具
- 总结Android UI 自动化测试
- Android ui 测试课堂笔记
- Android UI自动化测试--Espresso
- android各种UI测试框架
- Android自动化测试|UI Automatorviewer
- 关于Android的UI测试
- Android自动化测试 UI Automator
- Swift基本语法
- Protobuf vs Json
- Swift UI学习之基础:UIButton,UILabel and UISlider
- MySQL的varchar长度问题
- leetcode——Next Permutation
- 4、Android UI测试
- Swift UI学习之UITableView and protocol use
- linux下查看文件编码及修改编码
- Python爬虫积累
- 【BZOJ 2818】 gcd(附φ的线性筛法预处理)
- 当布局中如果出现多个文本并且颜色背景不同,我们怎么办
- 1、我的php自学笔记开始
- swift 学习这十八:宏()
- leetcode——Container With Most Water