准备工作

1.将android studio 版本升级到3.0+
2.百度下载夜神模拟器

夜神模拟器的基本设置

PS:以上就是夜神模拟器的基本设置

Android Studio 连接夜神模拟器

//夜神模拟器默认的地址
adb connect 127.0.0.1:62001

开始录制自动测试代码

在顶部工具栏找到Run -> Record Espresso Test -> 选择夜神模拟器双击启动 -> 启动后界面如下图

PS:操作模拟器 -> Record Your Test 弹框将自动生成你的行为代码 -> 点击OK -> 命名并保存代码

注意每次运行都会重新安装,从启动页开始,但是可以针对功能点录制,然后生成一份一份的测试脚本

运行自动化测试脚本

PS:静待安装,然后模拟器会自动执行你录制的动作,Logcat可以查看日志

贴上一份 Record Espresso Test的脚本看看

package com.example.administrator.teagarden.activity.login;

import android.support.test.espresso.ViewInteraction;
import android.support.test.filters.LargeTest;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import com.example.administrator.teagarden.R;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static android.support.test.espresso.action.ViewActions.replaceText;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withClassName;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.is; @LargeTest
@RunWith(AndroidJUnit4.class)
public class SplashActivityTest { @Rule
public ActivityTestRule<SplashActivity> mActivityTestRule = new ActivityTestRule<>(SplashActivity.class); @Test
public void splashActivityTest() {
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
e.printStackTrace();
} ViewInteraction appCompatEditText = onView(
allOf(withId(R.id.login_edit_user),
childAtPosition(
childAtPosition(
withClassName(is("android.widget.LinearLayout")),
2),
0),
isDisplayed()));
appCompatEditText.perform(click()); ViewInteraction appCompatEditText2 = onView(
allOf(withId(R.id.login_edit_user),
childAtPosition(
childAtPosition(
withClassName(is("android.widget.LinearLayout")),
2),
0),
isDisplayed()));
appCompatEditText2.perform(replaceText("152****3478"), closeSoftKeyboard()); ViewInteraction appCompatEditText3 = onView(
allOf(withId(R.id.login_edit_mima),
childAtPosition(
allOf(withId(R.id.logint_edit_layout),
childAtPosition(
withClassName(is("android.widget.LinearLayout")),
4)),
0),
isDisplayed()));
appCompatEditText3.perform(replaceText("admin000"), closeSoftKeyboard()); ViewInteraction appCompatButton = onView(
allOf(withId(R.id.login_button), withText("登录"),
childAtPosition(
childAtPosition(
withClassName(is("android.widget.RelativeLayout")),
1),
2),
isDisplayed()));
appCompatButton.perform(click()); // Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} ViewInteraction radioButton = onView(
allOf(withId(R.id.main_home_radio2), withText("监控"),
childAtPosition(
allOf(withId(R.id.main_tab_group),
childAtPosition(
withClassName(is("android.widget.LinearLayout")),
0)),
1),
isDisplayed()));
radioButton.perform(click()); // Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} ViewInteraction radioButton2 = onView(
allOf(withId(R.id.main_home_radio3), withText("动态"),
childAtPosition(
allOf(withId(R.id.main_tab_group),
childAtPosition(
withClassName(is("android.widget.LinearLayout")),
0)),
2),
isDisplayed()));
radioButton2.perform(click()); // Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
} ViewInteraction radioButton3 = onView(
allOf(withId(R.id.main_home_radio4), withText("我的"),
childAtPosition(
allOf(withId(R.id.main_tab_group),
childAtPosition(
withClassName(is("android.widget.LinearLayout")),
0)),
3),
isDisplayed()));
radioButton3.perform(click());
} private static Matcher<View> childAtPosition(
final Matcher<View> parentMatcher, final int position) { return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("Child at position " + position + " in parent ");
parentMatcher.describeTo(description);
} @Override
public boolean matchesSafely(View view) {
ViewParent parent = view.getParent();
return parent instanceof ViewGroup && parentMatcher.matches(parent)
&& view.equals(((ViewGroup) parent).getChildAt(position));
}
};
}
}

ps:代码其实很简单,照搬照套,还有别的花样么...录制的时候,也就是操作模拟器,生成代码的时候有点卡....有没有人告诉我怎么解决?

Android Studio 3.0+ Record Espresso Test 自动化测试的更多相关文章

  1. Android Studio 2.2 Record Espresso Test

    Android Studio 已经更新到了2.2,在 Run 中发现了 Record Espresso Test 功能,很强大,但是不稳定. 尝试了下在 Android 6.0 上的登录页面,可以通过 ...

  2. Android Studio 3.0 变化之 implementation与compile

    Android Studio 3.0 出来很久了,本文就着重介绍一下 新版本中 Moudle 中 build.gradle 文件中的变化. 我们来看看新建一个项目在 Moudle 中的 depende ...

  3. Android Studio 2.0使用指南

    一.下载界面.[无激活码 无序列码 无毒请放心使用][需将JAVA程序升级到1.8] 网址:http://www.android-studio.org/index.php/download/andro ...

  4. Android Studio 1.0.2项目实战——从一个APP的开发过程认识Android Studio

    Android Studio 1.0.1刚刚发布不久,谷歌紧接着发布了Android Studio 1.0.2版本,和1.0.0一样,是一个Bug修复版本.在上一篇Android Studio 1.0 ...

  5. Android Studio 1.0.1 + Genymotion安卓模拟器打造高效安卓开发环境

    我们开发安卓大多是使用Eclipse和安卓SDK中自带的安卓模拟器.当然,Google早就推出了自己的安卓开发环境——Android studio,在不久前,Google发布了Android Stud ...

  6. [Android] 环境配置之正式版Android Studio 1.0

    昨天看见 Android Studio 1.0 正式版本发布了:心里挺高兴的. 算是忠实用户了吧,从去年开发者大会一开始出现 AS 后就开始使用了:也是从那时开始就基本没有用过 Eclipse 了:一 ...

  7. [Android] android studio 2.0即时运行功能探秘

    即时运行instant Run是android studio 2中,开发人员最关心的特性之一 在google发布studio 2.0之后,马上更新体验了一把,然而发现,并没快多少,说好的即时运行呢? ...

  8. Windows环境下Android Studio v1.0安装教程

    Windows环境下Android Studio v1.0安装教程 准备工具 JDK安装包. 要求:JDK 7以及以上版本. Android Studio安装文件. Windows: exe(包含SD ...

  9. 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能

    以往的Android开发有一个头疼的且拖慢速度的问题,就是你每改一行代码要想看到结果必须要编译运行到手机或者模拟器上,而且需要从头(可能是登录界面)一直点击到你修改的界面为止.开发一个完整的Andro ...

随机推荐

  1. UIView的作用

    UIView [UIView的作用] 主要用来显示应用程序的内容,可以作为label.button等控件的容器.表示屏幕上的一块矩形区域,同时可以处理该区域的绘制和触屏事件. MVC,MVVM等设计架 ...

  2. Spring面试题总结及答案

    Spring面试总结 Spring是什么? Spring框架是一个java平台,提供全面基础设施支持开发java应用程序. Spring的主要模块有哪些? Spring Code:基础模块,主要提供I ...

  3. ARTS-S 获取子线程返回值注意事项

    #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h& ...

  4. tensorflow add_to_collection用法

    训练代码: # coding: utf-8 from __future__ import print_function from __future__ import division import t ...

  5. .net core 如何正确的读取body中的内容

    private string BodyToJson() { var reader = new StreamReader(Request.Body); var contentFromBody = rea ...

  6. linux—chown

    1 .修改 /usr/local下bin目录的所属者 2.修改 /usr/local下bin目录的所属组 3.修改 /usr/local下games目录的所属者和所属组 4.修改 /usr/local ...

  7. 【Web技术】 275- 理解 WebView

    前言 了解webview的神秘之处.今日早读文章由@子非翻译分享. 正文从这开始-- 我们通常使用 Chrome, Firefox, Safari, Internet Explorer 和 Edge ...

  8. 支持100+业务线、累计发布17万次|宜信容器云的A点与B点(分享实录)

    宜信公司从2018年初开始建设容器云,至今,容器云的常用基本功能已经趋于完善,主要包括服务管理.应用商店.Nginx配置.存储管理.CI/CD.权限管理等,支持100+业务线.3500+的容器运行.伴 ...

  9. B树?这篇文章彻底看懂了!

    前言 索引,相信大多数人已经相当熟悉了,很多人都知道 MySQL 的索引主要以 B+ 树为主,但是要问到为什么用 B+ 树,恐怕很少有人能把前因后果讲述完整.本文就来从头到尾介绍下数据库的索引. 索引 ...

  10. IT兄弟连 HTML5教程 响应式网站的内容设计

    基于响应式开发网站,除了页面的布局是我们设计的重点,网站中显示的图片和文字也是我们不能轻视的内容. 1  响应式图片显示内容设计 真正具有响应性的Web设计是完全调整网站以满足访问者的设备.我们需要在 ...