Espresso之ViewAction

Espresso的官方文档中提示,尽量使用Espresso提供的操作动作,来控制view,而且Espresso也确实提供了比较全面ViewAction
Matcher类似,所有的操作动作都是实现了interface ViewAction

public interface ViewAction {

    /**
     * 在 perform 使用时提及过,view 执行特定的操作需要满足特定的条件
     * 这里是针对当前 ViewAction 对 view 设置的限制条件
     */
    public Matcher<View> getConstraints();
    
     /**
     * 对当前的 view action 提供描述
     */
    public String getDescription();
    
     /**
     * 对指定的 view 进行操作
     */
    public void perform(UiController uiController, View view);
}

如果你看过前面的onView()&onData()这里应该就很容易明白这里所对应的操作,这里简单的总结一下ViewAction的使用过程:

  1. 使用初始化信息拿到目标view准备开始进行操作(perform()和check()是整体的驱动器)
  2. 检查一下目标view能否胜任当前的操作getConstraints()
  3. 生成关于ViewAction的描述,用于之后和其他描述一起打印日志
  4. 正式开始在目标 view 上进行 ViewAction 操作

自定义ViewAction

在了解一个大概流程之后再来看自定义ViewAction并没有什么难度,这里一起看一个栗子

//获取指定view的文本内容
String tv = getText(withId(R.id.xxx));

public String getText(final Matcher<View> matcher) {
        final String[] text = {null};
        onView(matcher)
            .perform(new ViewAction() {
                 //识别所操作的对象类型
                 @Override
                 public Matcher<View> getConstraints() {
                        return isAssignableFrom(TextView.class);
                 }
                 //视图操作的一个描述
                 @Override
                 public String getDescription() {
                        return "getting text from a TextView";
                 }
                 //实际的一个操作,在之类我们就可以获取到操作的对象了。
                 @Override
                 public void perform(UiController uiController, View view) {
                      TextView textView = (TextView)view;
                       text[0] = textView.getText().toString();
                   }
              });
        return text[0];
    }

因为常规的view的操作已经足够使用了,这里就借用于ViewAction的特性,来获取一些相关的属性信息,使用一个数组(引用)将view中的属性获取出来,同样的方法也可以将view获取出来

ViewActions

Matcher相同 Espresso 为 使用者提供了大量的 ViewAction供测试使用:

函数名 功能
addGlobalAssertion() 设置全局断言
actionWithAssertions() 包装 action ,执行前必须满足所有全局断言
removeGlobalAssertion() 删除全局断言
clearGlobalAssertions() 清空全局断言
clearText() 清空文本
click() 单击
click(ViewAction rollbackAction() 单击(防止误判为长按)
closeSoftKeyboard() 关闭软键盘
doubleClick() 双击
longClick() 长按
openLink() 打开连接(TextView)
openLinkWithText() 打开连接(Text)
openLinkWithUri() 打开连接(Uri)
pressBack() 返回键
pressImeActionButton()
pressKey() 根据Key模拟按键
pressMenuKey() 实体键盘菜单键
replaceText() 替换文本
scrollTo() 滑动到
swipeDown() 下滑
swipeLeft() 左滑
swipeRight() 右滑
swipeUp() 上滑
typeText() 获得焦点并注入文本(模拟按键单个输入)
typeTextIntoFocusedView() 在已获得焦点的View上注入文本(模拟按键单个输入)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容

  • 如果你看了上一篇中对一些常用方法的介绍,想必现在已经可以对Espresso正常进行使用了,从这里开始我们开始看一些...
    总是一点点阅读 1,841评论 0 3
  • Google为他们写的Espresso框架也写单元测试/集成测试代码,让我们先从这些测试代码出发看一下Espres...
    OliverGao阅读 5,760评论 2 11
  • 不错的官方文档翻译(含作者见解)这篇文章翻译简直太棒了,本文的内容都来自对该文章所记录的笔记。Android自动化...
    天神Deity阅读 621评论 0 1
  • UI测试 UI 测试是为了确保对于用户的UI动作,app能返回正确的UI输出。根据实际实现方案大体可以分为两种: ...
    AnAppleADie阅读 3,089评论 0 2
  • 在过去几年的发展中,中国市场动向和前景正变得越来越具有吸引力。此外,年轻一代们也正在逐渐改变市场的趋势,以寻求在发...
    青枫Harry阅读 688评论 0 0