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的下载目录,输入如下命令
calabash-android console HackerNews.apk
如果一切运行正常,则会进入calabash命令行,同时可以看到提示符变为:irb(main):001:0>
此时可在命令行里输入如下命令
irb(main):
001
:
0
> reinstall_apps
irb(main):
002
:
0
> start_test_server_in_background
第一条命令用来安装被测试app和test_server, 第二天命令启动test_server,此时可以进入到程序的主界面。
Query的用法
query(uiquery, *args)
此函数返会一个数组,每一个数组项包含View的信息,如id,坐标,类型。在命令行中输入
irb(main):
003
:
0
> query(
"ActionBarButton"
)
[
[
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: \"刷新内容\""
}
]
irb(main):
004
:
0
> query(
"ActionBarButton"
).size
查询keys
irb(main):
013
:
0
> query(
"ImageView"
).first.keys
[
[
0
]
"id"
,
[
1
]
"enabled"
,
[
2
]
"contentDescription"
,
[
3
]
"class"
,
[
4
]
"rect"
,
[
5
]
"tag"
,
[
6
]
"description"
]
query(
"*"
)[
0
]
query(
"* index:0"
)
query中的参数可以是通配符,如输入
irb(main):
006
:
0
> query(
"*"
)
通过类名来过滤元素
简单类名
之前查询元素的方法是通过简单类名,且大小写不敏感。如
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}"
}
]
irb(main):
010
:
0
> query(
"ImageVIew"
)
含有包作用域的类名
若输入以下查询命令,
irb(main):
011
:
0
> query(
"android.widget.ImageView"
)
[
[
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
8
V.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
8
V.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
8
V.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
0
V.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
8
V.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
0
V.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
0
V.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
0
V.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
8
V.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
8
V.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
8
V.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
8
V.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
0
V.ED.... ........
50
,
89
-
76
,
122
#7f060120 app:id/icv_comment}"
}
]
由此可看出:
1.当仅给出简单类名时,仅查询该类名所对应的对象
2.当查询含有包名的类名时,会给出该类的对象和该类的子类的对象。
过滤操作
可以通过id,text或class来对结果进行过滤。
指定id:
irb(main):
018
:
0
> query(
"android.widget.ImageView id:'icv_comment'"
)
指定text:
query(
"* text:'Login'"
)
其它属性
query(
"* width:200"
)
query(
"* enabled:false"
)
可以同时指定多个属性,如:
query("* enabled:true height:50") 查询原理calabash过滤属性的语法如下:
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属性。
qeuery(
"button marked:'login_button'"
)
可指定query中的*args参数来控制返回的结果。
返回id
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"
]
irb(main):
006
:
0
> query(
"android.widget.ImageView enabled:true"
, :id)
query(
"android.widget.ImageView enabled:true"
,
"id"
)
query(android.widget.ImageView
", "
text
", "
toLowerCase")
设置元素的值:(暂未调试)
irb(main):
034
:
0
> query(
"edittext index:1"
, :setText =>
"1234"
)
- calabash-android 命令行使用
- calabash-android 命令行使用
- Calabash-android
- 使用calabash-android 实现 翻转屏幕
- Calabash-android【转】
- 有关Calabash-Android
- Windows 安装Calabash-Android
- Calabash-Android用法入门
- Calabash-Android用法入门
- Calabash Android 简介
- Calabash Android 简介
- Calabash-android调研
- calabash-android源码解读
- calabash-android 链接整理
- Calabash-android 简明步骤
- Calabash-android环境搭建
- Calabash Android安装
- calabash
- R.java文件介绍
- C编译器剖析_5.2.6 中间代码生成及优化_一元表达式及其他表达式的翻译
- asp.net C# DataList绑定数据库
- 如何获取Android唯一标识(唯一序列号)
- 正则表达式学习参考
- calabash-android 命令行使用
- c++ primer 学习笔记12--拷贝赋值,销毁
- 存储过程
- 多线程编程复习笔记 进程与线程
- Android处理Home键方法小结
- OSX 10.10“通过inode认证上网”
- linux 下shell 命令资料总结
- 第8题
- RFID系统二进制属性搜索算法是如何解决碰撞的?简述其实现步骤。