首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于Kotlin DSL的Espresso和UIAutomator的融合客户端自动化

前言 最近小编在探索端对端测试相关的topic,在Android端的自动化测试,可供我们选择的库并不是很多,而其中小编使用最多的两个库分别是Espresso和UIAutomator。...然而,如果我们想设计一套自顶向下,设备、接口、代码层级均可自动化执行且有一定校验的框架或系统时,就会发现这两个完全不同语法的库融合一起后,可读性和可维护性几乎等于零。...EspressoEspresso中,我们一般会处理三种类型的对象:匹配器、ViewAction和ViewAssertions。...MainActivity::class verifyThat { itIsDisplayed() } } } 后续优化思考 在后续项目发展过程中,我们肯定会在UI组件使用越来越多的操作和断言...当前Github已有Android Test KTX可供大家使用。 尽管UIAutomator对我们来说效果很好,但这也是造成大多数麻烦的原因。

2.2K50
您找到你想要的搜索结果了吗?
是的
没有找到

Espresso浅析和使用

Google希望,当Android的开发者利用Espresso写完测试用例后,能一边看着测试用例自动执行,一边享受一杯香醇Espresso(浓咖啡)。...我们都知道ListView的View是复用的,不可见状态的item并没有把内容绘制到ViewEspresso针对AdapterView(ListView的父类),提供了onData来支持。...执行原理 本文开头提到Espresso其中一个特点,无需主动写Sleep等待UI事件的执行和UI的绘制。...原因是,Espresso的用例运行过程是只有当UI线程IDLE和UI队列没有需要执行的事件时,Espresso的测试代码才会被执行。使用方无需写Sleep逻辑等待UI绘制完成。...以下是Espresso测试用例执行简易的流程图,帮助理解: [image.jpg] 写在最后 引用官方介绍的一段话,Espresso的目标受众是开发者。

2.3K00

Android开发者的UI自动化测试上手指南

这里包含了三个流程: 找元素:找到UI测试所针对的元素; 做操作:给这个元素做一些操作; 检查结果:这个元素做出了我期望的行为。...以上三个小步骤实际也是我们作为用户在使用一个APP的时候所遵循的流程。而我们的测试也是基本遵循这样一个流程的。...下面是官方文档中给出的一个简单测试用例的代码: @Testpublic void greeterSaysHello() { onView(withId(R.id.name_field)) .perform(typeText....check(matches(isDisplayed())); } 代码逻辑也是典型的三步: 首先通过withId方法找到了id为name_field的EditText组件,并且调用typeText方法对其进行设置...异步和延迟 有时点击一个按钮,ui操作后需要执行一个较为耗时的事情时通常会采用异步回调的方式通知显示结果,这时进行UI自动化测试的第三步验证结果的时机就不能才能同步的方式去执行,而是需要做异步回调通知执行或延迟执行

81220

Android使用Espresso实现UI自动化测试

)) // withId(R.id.my_view) is a ViewMatcher .perform(click()) // click() is a ViewAction...@Test @Test public void testLogin() { ... } 定义一个测试方法,当你的测试类运行时,所执行的代码就是Test注解下的方法(Espresso还提供了其他的一些注解...ViewActions 执行事件 对View的操作:perform()方法 方式是onView(...).perform()。...也可以执行多个操作在一个perform中如:perform(click(),clearText())。 所有的操作都有一个前提 ———— 就是要执行的view必须在当前界面上显示出来(有且可见)。...以下示例我们点击登录按钮时,首先对输入的用户名和密码进行验证,验证不通过在TextView显示对应原因,验证没有问题显示“登录成功”。

1.5K20

Gradle For Android(6)--测试单元

在Dependencies中加入testCompile不会在Release的APK中编译,如果需要在一些特殊的BuildType或者ProductFlavors中加入配置,那么可以使用test-only...Android提供了一些功能性测试的框架,但是最简单的还是使用Espresso框架。 Espresso Espresso Library通过Android Support仓库提供。...Test Runner会将App的Apk和test的APK安装到该设备,并且执行所有的test,然后将test结果生成到report中。...这个任务会和connectedAndroidTest任务一起执行,在设备执行Debug Build中的所有测试任务,并且创建DebugCoverageReport的报告。...你可以同时在多个设备执行这些测试任务,所以这些设备信息会更好的查找到设备或者版本单独的Bug。

1.7K40

一篇博客让你了解Material Design的使用

移动设备是这套设计语言的基础对象,让用户在不同的平台、不同尺寸的设备能保持一致的体验。 Material Design强调交互的即时反馈,即对于用户的触控等行为app需要给出即时的反应。...android:clipChildren=”false” 子控件是否能不超出padding的区域(比如ScrollView滑动的时候,child可以滑出该区域) 然后监听滑动事件,这里如果是ScrollView...searchView = (SearchView) MenuItemCompat.getActionView(item); //设置一出来就直接呈现搜索框---SearchView searchView.setIconified...CoordinatorLayout监听滑动子控件的滑动通过Behavior反馈到其他子控件并执行一些动画。...,其他的子view就会按照Fade动画执行

3.2K30

Android自定义View实现搜索框(SearchView)功能

需要监听是否按下search键(enter),按下时通知监听者执行search操作 结合以上6点和在上文分析过的内容,就能很轻松地实现该view。...= (SearchView) findViewById(R.id.main_search_layout); //设置监听 searchView.setSearchViewListener(this...比较简单,只要给SearchView设置onSearchViewListener监听接口,实现对应的方法,并给SearchView传入热搜版和自动补全的adapter既可。...考虑到实际开发中,数据量十分庞大,可以只把结果集的一部分(如前10个)显示出来,拉到底的时候再加载之后的记录,也就是可以加入拉加载的机制,使app性能更优化。 自动补全匹配也是采用相同的算法。...各位看官如果有任何问题可评论或者发邮件跟我联系yetwish@gmail.com 囧~忘记贴代码了,代码放在github,各位看官直接download即可 链接:https://github.com

4.4K10

Gradle 之 Task 使用

/gradlew projects 列表展示当前根project与它的子project Gradle 生命周期: 在初始化阶段完成所有的配置操作 初始化阶段后就是配置阶段, 再之后就是执行阶段,也就执行...'   }   /**   * gradle 执行完毕的回调监听   */   this.gradle.buildFinished {       println '执行阶段执行完毕...: [group: 'androidx.test.espresso', name: 'espresso-core', version: '3.1.0-alpha4&...  }   传递依赖 比如:工程A依赖于工程B,工程B依赖于工程C,工程A传递依赖于工程C,不能进行传递依赖,是不确定的,可能B升级后就不需要依赖于C,那么A不会在C找到所需东西 Gradle 执行外部命令进行拷贝文件到磁盘下.../** * 文件拷贝到外部电脑文件夹下 */ task(name:'apkcopy'){     doLast{         //gradle 执行阶段去执行

87210

解耦重构 Internet BGP SDN

关于B4详细信息,请参考Google B4 广域网SDN 的前世今生 Google在ONS Summit 2017推出了他的第四个SDN控制器Espresso(浓缩咖啡),在Metro网络中新引入...关于更多详细的BGP EPE解决方案,请参考我们在2016年初在New Zealand Apricot的演讲。...调度仍然发生在PR,出向拥塞的PR做SR Tunnel重定向到非拥塞的PR.如下图所示: 从上图可以看出Facebook采用的都是业界主流厂商支持的协议来实现Edge Fabric。...对于在POP和DC中有大规模服务器的Google来讲,在POP中的每个Server处理内容的基础加上1.2GB内存和2-3%的CPU来实现Internet路由查表和隧道封装基本是可以接受的。...仅仅改造了Metro POP, 今后会不会在B2采用类似Espresso架构来打通Backbone和Peering Fabric进行跨越B2全网流量调度?

2K41

Espresso 遇见 Android 单元测试

如果依赖Android环境,但是没有UI相关或者UI比较简单(如点击按钮)的单元测试可以使用开源库Robolectric解决依赖问题,使测试运行在JVM,而非模拟器,大大提高测试运行效率。...以上,UI控件执行了初始化代码及各函数代码,达到单元测试的目的。 那么问题来了,为何不用Espresso直接获取UI控件对象进行函数调用呢?...其他函数为初始化或被测函数中调用的函数,都会被自动调用执行。 Activity中需要完成解析命令执行以上对应UI控件函数,根据输入框输入的字符来区分。 由此,Activity便制作完成。...Espresso需要做的事情,就是在已经做好的Activity提交不同的已定义命令,来执行UI控件不同的函数,并检查结果,达到单元测试目的。...,以便Espresso检查。

2.4K10

Groovy高级用法

/gradlew projects 列表展示当前根project与它的子project Gradle 生命周期: 在初始化阶段完成所有的配置操作 初始化阶段后就是配置阶段, 再之后就是执行阶段,也就执行...'   }   /**   * gradle 执行完毕的回调监听   */   this.gradle.buildFinished {       println '执行阶段执行完毕...: [group: 'androidx.test.espresso', name: 'espresso-core', version: '3.1.0-alpha4&...  }   传递依赖 比如:工程A依赖于工程B,工程B依赖于工程C,工程A传递依赖于工程C,不能进行传递依赖,是不确定的,可能B升级后就不需要依赖于C,那么A不会在C找到所需东西 Gradle 执行外部命令进行拷贝文件到磁盘下.../** * 文件拷贝到外部电脑文件夹下 */ task(name:'apkcopy'){     doLast{         //gradle 执行阶段去执行

88320
领券