calabash-android 命令行使用

来源:互联网 发布:淘宝抢购前1000名半价 编辑:程序博客网 时间:2024/04/30 15:41

http://www.2cto.com/kf/201409/332196.html


本文介绍calabash-android的命令行的使用,通过例子,熟悉calabash-android所调用的ruby api和常用控制台命令, 如query, touch, wait等。,。熟悉这些API有助于我们编写自定义feature。

第一步:下载app

本文所用的测试app为黑客头条,点此下载。app中view的元素如下图所示:

\

第二步:打开命令行,进入app的下载目录,输入如下命令

?
1
calabash-android console HackerNews.apk

如果一切运行正常,则会进入calabash命令行,同时可以看到提示符变为:irb(main):001:0>此时可在命令行里输入如下命令

?
1
2
3
irb(main):001:0> reinstall_apps
irb(main):002:0> start_test_server_in_background
  第一条命令用来安装被测试app和test_server, 第二天命令启动test_server,此时可以进入到程序的主界面。
每个Android应用程序都是有一系列的View组成.Button, ImageView, chekbox都是屏幕上的View。每个View都有对应的类型,程序界面可以看做是View的集合。

Query的用法

query(uiquery, *args)

此函数返会一个数组,每一个数组项包含View的信息,如id,坐标,类型。在命令行中输入

?
1
irb(main):003:0> query("ActionBarButton")
由于在ControllerBar中有两个ActionBarButton,故输出结果如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[
    [0] {
                        "id"=> nil,
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.actionbar.ActionBarBut
ton",
                      "rect"=> {
            "center_y"=> 98,
            "center_x"=> 480,
              "height"=> 96,
                   "y"=> 50,
               "width"=> 96,
                   "x"=> 432
        },
                       "tag"=> nil,
               "description"=> "ActionBarButton: \"推广\""
    },
    [1] {
                        "id"=> nil,
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.actionbar.ActionBarBut
ton",
                      "rect"=> {
            "center_y"=> 98,
            "center_x"=> 576,
              "height"=> 96,
                   "y"=> 50,
               "width"=> 96,
                   "x"=> 528
        },
                       "tag"=> nil,
               "description"=> "ActionBarButton: \"刷新内容\""
    }
]
由于返回的结果是个ruby array,我们可以使用array的方法,如获取size

?
1
irb(main):004:0> query("ActionBarButton").size
返回的结果是2

查询keys

?
1
2
3
4
5
6
7
8
9
10
irb(main):013:0> query("ImageView").first.keys
[
    [0]"id",
    [1]"enabled",
    [2]"contentDescription",
    [3]"class",
    [4]"rect",
    [5]"tag",
    [6]"description"
]
index

?
1
query("*")[0]
?
1
query("* index:0")

query中的参数可以是通配符,如输入

?
1
irb(main):006:0> query("*")
返回屏幕中的所有元素

通过类名来过滤元素

简单类名 

之前查询元素的方法是通过简单类名,且大小写不敏感。如

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
irb(main):010:0> query("ImageView")
[
    [0] {
                        "id"=> "img_up_icon",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "android.widget.ImageView",
                      "rect"=> {
            "center_y"=> 97,
            "center_x"=> 74,
              "height"=> 67,
                   "y"=> 64,
               "width"=> 67,
                   "x"=> 41
        },
                       "tag"=> nil,
               "description"=> "android.widget.ImageView{41f4c740 V.ED.... ....
....41,14-108,81#7f060091 app:id/img_up_icon}"
    }
]

?
1
irb(main):010:0> query("ImageVIew")
结果一样。 

含有包作用域的类名 

若输入以下查询命令,

?
1
irb(main):011:0> query("android.widget.ImageView")
结果如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
[
    [0] {
                        "id"=> "icv_up_indicator",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 98,
            "center_x"=> 20,
              "height"=> 50,
                   "y"=> 73,
               "width"=> 41,
                   "x"=> 0
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{41f41cc
8V.ED.... ........ 0,23-41,73#7f060090 app:id/icv_up_indicator}"
    },
    [1] {
                        "id"=> "img_up_icon",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "android.widget.ImageView",
                      "rect"=> {
            "center_y"=> 97,
            "center_x"=> 74,
              "height"=> 67,
                   "y"=> 64,
               "width"=> 67,
                   "x"=> 41
        },
                       "tag"=> nil,
               "description"=> "android.widget.ImageView{41f4c740 V.ED.... ....
....41,14-108,81#7f060091 app:id/img_up_icon}"
    },
    [2] {
                        "id"=> "icv",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 98,
            "center_x"=> 480,
              "height"=> 96,
                   "y"=> 50,
               "width"=> 96,
                   "x"=> 432
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{4241f03
8V.ED.... ........ 0,0-96,96#7f060096 app:id/icv}"
    },
    [3] {
                        "id"=> "icv",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 98,
            "center_x"=> 576,
              "height"=> 96,
                   "y"=> 50,
               "width"=> 96,
                   "x"=> 528
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{424aa62
8V.ED.... ........ 0,0-96,96#7f060096 app:id/icv}"
    },
    [4] {
                        "id"=> "icv_overflow",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 98,
            "center_x"=> 672,
              "height"=> 96,
                   "y"=> 50,
               "width"=> 96,
                   "x"=> 624
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{41f6a6b
0V.ED..C. ........ 500,0-596,96#7f060095 app:id/icv_overflow}"
    },
    [5] {
                        "id"=> "icv_comment",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 317,
            "center_x"=> 63,
              "height"=> 33,
                   "y"=> 301,
               "width"=> 26,
                   "x"=> 50
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{42075eb
8V.ED.... ........ 50,55-76,88#7f060120 app:id/icv_comment}"
    },
    [6] {
                        "id"=> "icv_comment",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 454,
            "center_x"=> 49,
              "height"=> 33,
                   "y"=> 438,
               "width"=> 26,
                   "x"=> 36
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{4240c4d
0V.ED.... ........ 36,89-62,122#7f060120 app:id/icv_comment}"
    },
    [7] {
                        "id"=> "icv_comment",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 557,
            "center_x"=> 63,
              "height"=> 33,
                   "y"=> 541,
               "width"=> 26,
                   "x"=> 50
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{42368ad
0V.ED.... ........ 50,55-76,88#7f060120 app:id/icv_comment}"
    },
    [8] {
                        "id"=> "icv_comment",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 660,
            "center_x"=> 63,
              "height"=> 33,
                   "y"=> 644,
               "width"=> 26,
                   "x"=> 50
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{41c8a72
0V.ED.... ........ 50,55-76,88#7f060120 app:id/icv_comment}"
    },
    [9] {
                        "id"=> "icv_comment",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 797,
            "center_x"=> 77,
              "height"=> 33,
                   "y"=> 781,
               "width"=> 26,
                   "x"=> 64
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{423685d
8V.ED.... ........ 64,89-90,122#7f060120 app:id/icv_comment}"
    },
    [10] {
                        "id"=> "icv_comment",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 900,
            "center_x"=> 77,
              "height"=> 33,
                   "y"=> 884,
               "width"=> 26,
                   "x"=> 64
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{424c065
8V.ED.... ........ 64,55-90,88#7f060120 app:id/icv_comment}"
    },
    [11] {
                        "id"=> "icv_comment",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 1037,
            "center_x"=> 49,
              "height"=> 33,
                   "y"=> 1021,
               "width"=> 26,
                   "x"=> 36
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{423b43f
8V.ED.... ........ 36,89-62,122#7f060120 app:id/icv_comment}"
    },
    [12] {
                        "id"=> "icv_comment",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 1140,
            "center_x"=> 63,
              "height"=> 33,
                   "y"=> 1124,
               "width"=> 26,
                   "x"=> 50
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{420c0dd
8V.ED.... ........ 50,55-76,88#7f060120 app:id/icv_comment}"
    },
    [13] {
                        "id"=> "icv_comment",
                   "enabled"=> true,
        "contentDescription"=> nil,
                     "class"=> "com.airlocksoftware.holo.image.IconView",
                      "rect"=> {
            "center_y"=> 1277,
            "center_x"=> 63,
              "height"=> 33,
                   "y"=> 1261,
               "width"=> 26,
                   "x"=> 50
        },
                       "tag"=> nil,
               "description"=> "com.airlocksoftware.holo.image.IconView{423ab81
0V.ED.... ........ 50,89-76,122#7f060120 app:id/icv_comment}"
    }
]
此时返回的结果有14个元素
由此可看出:

1.当仅给出简单类名时,仅查询该类名所对应的对象

2.当查询含有包名的类名时,会给出该类的对象和该类的子类的对象。

过滤操作

可以通过id,text或class来对结果进行过滤。

指定id:

?
1
irb(main):018:0> query("android.widget.ImageView id:'icv_comment'")
主要id后面的单引号

指定text:

?
1
query("* text:'Login'")
该操作会返回屏幕中含有"Login"文本的View

其它属性

?
1
2
query("* width:200")
query("* enabled:false")
注意,此处无单引号

可以同时指定多个属性,如:

query("* enabled:true height:50") 查询原理

calabash过滤属性的语法如下:

?
1
prop:value
prop是属性名,value是一个字符串,布尔值或整数。

上面的例子,我们使用的属性有id,text,enabled和width.除此之外,还有更多的可以用。

每一个View对象都有一系列方法,如View有isEnabled方法。当calabash准备去解析query中传入的属性时,它会以如下的顺序调用View的方法:prop(),getProp()和isProp().

故对于enabled属性,它会尝试调用enabled(),getEnabled()或isEnabled().最后将返回结果与query中指定的值进行比较。

有用的技巧

除了以上的查询语句,还有其它有用的技巧

marked

此关键字通过名称来标识一个View,用来比较id, text或contentDescription属性。

?
1
qeuery("button marked:'login_button'")
返回属性
可指定query中的*args参数来控制返回的结果。

返回id

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
irb(main):005:0> query("android.widget.ImageView", :id)
[
    [0]"icv_up_indicator",
    [1]"img_up_icon",
    [2]"icv",
    [3]"icv",
    [4]"icv_overflow",
    [5]"icv_comment",
    [6]"icv_comment",
    [7]"icv_comment",
    [8]"icv_comment",
    [9]"icv_comment",
    [10]"icv_comment",
    [11]"icv_comment",
    [12]"icv_comment",
    [13]"icv_comment"
]
可以将属性过滤与指定的属性配合使用,如

?
1
irb(main):006:0> query("android.widget.ImageView enabled:true", :id)
属性也可以写成如下形式
?
1
query("android.widget.ImageView enabled:true","id")
链式调用:

?
1
query(android.widget.ImageView", "text", "toLowerCase")
先对放回的对象调用getText(),然后再调用toLowerCase函数。

设置元素的值:(暂未调试)

?
1
irb(main):034:0> query("edittext index:1", :setText => "1234")
暂时介绍到这儿,后续会继续更新。
0 0
原创粉丝点击