Android自动化测试初探(五): 再述模拟键盘鼠标事件(adb shell 实现)
上一篇博文中讲述了通过Socket编程从外部向Emulator发送键盘鼠标模拟事件,貌似实现细节有点复杂。其实Android还有一种更简单的模拟键盘鼠标事件的方法,那就是通过使用adb shell 命令。
?
1.???? 发送键盘事件:
命令格式1:adb shell input keyevent “value”
其中value以及对应的key code如下表所列:
KeyEvent Value
KEYCODE
Comment
0
KEYCODE_UNKNOWN
?
1
KEYCODE_MENU
在SDK2.1的模拟器中命令失效,sendevent命令可行
2
KEYCODE_SOFT_RIGHT
?
3
KEYCODE_HOME
?
4
KEYCODE_BACK
?
5
KEYCODE_CALL
?
6
KEYCODE_ENDCALL
?
7
KEYCODE_0
?
8
KEYCODE_1
?
9
KEYCODE_2
?
10
KEYCODE_3
?
11
KEYCODE_4
?
12
KEYCODE_5
?
13
KEYCODE_6
?
14
KEYCODE_7
?
15
KEYCODE_8
?
16
KEYCODE_9
?
17
KEYCODE_STAR
?
18
KEYCODE_POUND
?
19
KEYCODE_DPAD_UP
?
20
KEYCODE_DPAD_DOWN
?
21
KEYCODE_DPAD_LEFT
?
22
KEYCODE_DPAD_RIGHT
?
23
KEYCODE_DPAD_CENTER
?
24
KEYCODE_VOLUME_UP
?
25
KEYCODE_VOLUME_DOWN
?
26
KEYCODE_POWER
?
27
KEYCODE_CAMERA
?
28
KEYCODE_CLEAR
?
29
KEYCODE_A
?
30
KEYCODE_B
?
31
KEYCODE_C
?
32
KEYCODE_D
?
33
KEYCODE_E
?
34
KEYCODE_F
?
35
KEYCODE_G
?
36
KEYCODE_H
?
37
KEYCODE_I
?
38
KEYCODE_J
?
39
KEYCODE_K
?
40
KEYCODE_L
?
41
KEYCODE_M
?
42
KEYCODE_N
?
43
KEYCODE_O
?
44
KEYCODE_P
?
45
KEYCODE_Q
?
46
KEYCODE_R
?
47
KEYCODE_S
?
48
KEYCODE_T
?
49
KEYCODE_U
?
50
KEYCODE_V
?
51
KEYCODE_W
?
52
KEYCODE_X
?
53
KEYCODE_Y
?
54
KEYCODE_Z
?
55
KEYCODE_COMMA
?
56
KEYCODE_PERIOD
?
57
KEYCODE_ALT_LEFT
?
58
KEYCODE_ALT_RIGHT
?
59
KEYCODE_SHIFT_LEFT
?
60
KEYCODE_SHIFT_RIGHT
?
61
KEYCODE_TAB
?
62
KEYCODE_SPACE
?
63
KEYCODE_SYM
?
64
KEYCODE_EXPLORER
?
65
KEYCODE_ENVELOPE
?
66
KEYCODE_ENTER
?
67
KEYCODE_DEL
?
68
KEYCODE_GRAVE
?
69
KEYCODE_MINUS
?
70
KEYCODE_EQUALS
?
71
KEYCODE_LEFT_BRACKET
?
72
KEYCODE_RIGHT_BRACKET
?
73
KEYCODE_BACKSLASH
?
74
KEYCODE_SEMICOLON
?
75
KEYCODE_APOSTROPHE
?
76
KEYCODE_SLASH
?
77
KEYCODE_AT
?
78
KEYCODE_NUM
?
79
KEYCODE_HEADSETHOOK
?
80
KEYCODE_FOCUS
?
81
KEYCODE_PLUS
?
82
KEYCODE_MENU
?
83
KEYCODE_NOTIFICATION
?
84
KEYCODE_SEARCH
?
85
TAG_LAST_KEYCODE
?
?
命令格式2:adb shell sendevent [device] [type] [code] [value]
如: adb shell sendevent /dev/input/event0 1 229 1 代表按下按下menu键
?????? adb shell sendevent /dev/input/event0 1 229 0 代表按下松开menu键
说明:上述的命令需组合使用
另外所知道的命令如下:
Key Name ? ? ? ? ? ? ? ? ?????? CODE
MENU???????????????????????????????? 229
HOME???????????????????????????????? 102
BACK (back button)??????????? 158
CALL (call button)?????????????? 231
END (end call button)???????? 107
?
2.???? 发送鼠标事件(Touch):
命令格式:adb shell sendevent [device] [type] [code] [value]
?
情况1:在某坐标点上touch
如在屏幕的x坐标为40,y坐标为210的点上touch一下,命令如下
adb shell sendevent /dev/input/event0 3 0 40
adb shell sendevent /dev/input/event0 3 1 210
?
adb shell sendevent /dev/input/event0 1 330 1 //touch
adb shell sendevent /dev/input/event0 0 0 0?????? //it must have
?
adb shell sendevent /dev/input/event0 1 330 0 //untouch
adb shell sendevent /dev/input/event0 0 0 0 //it must have
?
注:以上六组命令必须配合使用,缺一不可
?
情况2:模拟滑动轨迹(可下载并采用aPaint软件进行试验)
如下例是在aPaint软件上画出一条开始于(100,200),止于(108,200)的水平直线
adb shell sendevent /dev/input/event0 3 0 100 //start from point (100,200)
adb shell sendevent /dev/input/event0 3 1 200
?
adb shell sendevent /dev/input/event0 1 330 1 //touch
adb shell sendevent /dev/input/event0 0 0 0
?
adb shell sendevent /dev/input/event0 3 0 101 //step to point (101,200)
adb shell sendevent /dev/input/event0 0 0 0
……………………????????????????????????????????????????????????? //must list each step, here just skip
adb shell sendevent /dev/input/event0 3 0 108 //end point(108,200)
adb shell sendevent /dev/input/event0 0 0 0
?
adb shell sendevent /dev/input/event0 1 330 0 //untouch
adb shell sendevent /dev/input/event0 0 0 0
?