自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 资源 (1)
  • 收藏
  • 关注

原创 Espresso实现apk黑盒测试

直接上最终实践的教程吧 : 1. 新建工程 这里注意 package name必须与被测apk的包名一致 (至于如何查看apk包名,可另行查看资料) ,可以点击 Edit 编辑包名. 2. 选择无activity项目 3. 重签名文件 具体重签名方法不在文本讲述 . 签名完成后将得到的apk放置于lib目录下 ( 当然也可以是任意地方,这个位置将在

2017-03-21 17:17:12 1163 2

原创 按位异或的妙用

常常遇到这种逻辑判断 , 我从一个方法接收到结果为boolean 值 , 但我有一个预期<即希望它为true 或false > 然后针对不同的预期做相应的操作 . like this:public boolean isIdleNow(boolean exist) { boolean isIdle; List<View> views = getViews(match

2016-12-20 17:14:13 473

原创 espresso之Views获取

espresso 目前尚不能处理多个View , 不论是 onData 还是其他 , 都只能操作唯一匹配的View . 如果多个view被匹配 , 将抛出 AmbiguousViewMatcherException 这个异常 , 那么我们想循环遍历操作一组同类的views时 将变得不太现实 . 举个例子有一波 Text 相同的View , 我想全部点击一遍 , 一个个的通过复杂定位去点击 , 显然不

2016-12-09 19:37:53 717

原创 espresso之自由swipe

很多时候espresso不能自由的滑动 , 它必须在指定的View上进行 ( 当然 , view不可见的时候是不能滑动的 ) . 然而我们就是希望在屏幕上滑动一下来使某个view可见 , 一般情况很简单嘛 :onView(isRoot()).perform(swipeLeft()); onView(isRoot()).perform(swipeDown()); 这样真的就解决了吗 , 当然 . 这样

2016-12-09 18:56:29 838

原创 十进制转十六进制

这是做数字转换时写的个小例子 官方的例子不适合用来学习.private String conversion16(int i){ char[] chars = new char[16]; char ch = 'A'; char nu = '0'; int m = 0; //商 int y = 0; //余

2016-12-02 12:14:59 306

原创 espresso之判断EditText是否为password

这一需求可能比较少见 , 但也是常见的 . 往往我们需要验证输入的密码是否屏蔽 , 这时怎么处理呢 ? 匹配是否为"********" ? 先不说是否正确 , 假设不是用 * 作为掩盖 , 而是用别的特殊字符呢? 再逐个匹配吗? 显然不尽现实 , code就是为了一劳永逸 . 这里先说说为什么不能匹配到"*******" , 因为就算用 * 作为了屏蔽 , 但 Text 的值依然是原来的字符

2016-11-04 15:17:25 517

原创 espresso之自定义Matcher

往往既定的matcher颇有局限 , 又或者本就没有适合需求的matcher . 这时候就是自定义matcher出场的时候了. 看起来高大上的自定义matcher , 实际上不过是实现了 TypeSafeMatcher 这一接口而已 . 为了简洁 ,大多直接使用内部类的方式 . 直接上代码:public static Matcher<View> withIndex(final int index

2016-11-03 16:27:39 1012

原创 国际化你的测试

对于针对不同国别的app , 将会有很多的版本 ,如en版 , cn版 ,tw版等等 这时候验证文本将变得复杂起来 , 通过文本识别对象的方式也将在不同的版本中失效Android自带的国际化方式即可解决问题 经过各种尝试 ( 反编译拿到class.jar > 引入jar包 ; 复制string.xml文件到main中的res包中 ; 等都失败了 ) 后得出: 1. 将原app的资源文件

2016-10-24 17:46:50 444

原创 espresso之异常捕获

espresso之异常捕获 当然和java的异常捕获一样嘛 , 但确实是一样, 但也是有坑的. 先大体列一下java的异常机制 这个层次图先看着 , 后面就用着了进入正题: espresso需要捕获异常无非是为了继续封装 , 或是进行特殊操作.那么如果tyr{…}catch(Exception e){} 捕获不到呢 , 有了上面的图想必你已经知道怎么处理了 . 1. per

2016-10-24 16:47:39 655

原创 blog 生涯开始

最近觉得是该写写博客了 , 以前都直接在群里发发文档 . 有朋告之兮 , 不若写成博客 , 不惑众人. 一入IT深似海 , 回头省得已无岸 . 争渡 , 争渡 ...

2016-10-21 12:15:27 182

Jenkins权威指南.docx

可编辑的文档,docx格式,便于复制、粘贴、翻译 Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv 1. Introducing Jenkins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Introduction 1 Continuous Integration Fundamentals 1 Introducing Jenkins (née Hudson) 3 From Hudson to Jenkins—A Short History 4 Should I Use Jenkins or Hudson? 5 Introducing Continuous Integration into Your Organization 6 Phase 1—No Build Server 6 Phase 2—Nightly Builds 6 Phase 3—Nightly Builds and Basic Automated Tests 6 Phase 4—Enter the Metrics 7 Phase 5—Getting More Serious About Testing 7 Phase 6—Automated Acceptance Tests and More Automated Deployment 7 Phase 7—Continuous Deployment 7 Where to Now? 8 2. Your First Steps with Jenkins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Introduction 9 Preparing Your Environment 9 Installing Java 10 Installing Git 10 Setting Up a GitHub Account 11 Configuring SSH Keys 11 Forking the Sample Repository 12 Starting Up Jenkins 13 Configuring the Tools 17

2016-02-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除