写点什么

如果用 ADB 模拟按手机上的“菜单”键

作者:IT蜗壳-Tango
  • 2022 年 7 月 11 日
  • 本文字数:4790 字

    阅读完需:约 16 分钟

如何上图红框中的按钮,我通常称他为菜单键,不知道大家怎么称呼它。


今天测试的时候,遇到一个场景,我需要验证 APP 调起微信支付的接口,但是不完成支付,然后去验证轮询时的消息。


APP 的设计是这样的:

  • 关闭支付:提示未完成支付

这个很好办,我只需要将支付窗口关闭即可。


  • 支付异常:进入轮询,持续一分钟,去判断是否完成了支付(主要是有的时候,弱网导致的支付完成,但是 APP 未能及时获取到返回值的场景)

手工测试的时候,可以借助 charles 来打断点实现这样的场景。

但是在自动化测试的时候,这并不好办,尤其是批量运行的时候。

好在我们的 APP 有这样的一个问题,在支付界面点击上面的“菜单键”即可将支付界面关闭,然后系统就会开始进行轮询操作。


开始解决

于是我开始尝试在 JAVA 中调用 ADB 的操作命令来实现点击“菜单”按钮的这一操作。

adb shell input keyevent key_code
复制代码

key_code 请参照文章末尾

于是我去查了一下菜单键的 key code,网上说是 82.但是实际操作的时候这个却是唤醒锁屏的功能。

那么真正的,和手工测试点击这个按钮的 key code 是什么呢?

答案是:KEYCODE_APP_SWITCH

至少在荣耀的手机上是这个。

我的具体代码:

public static void cmdExecute(String command){        try{            Process process = Runtime.getRuntime().exec(command);            process.waitFor();            process.destroy();        }catch(Exception e) {            e.printStackTrace();        }    }
复制代码

然后在测试用例里面调用的时候

String command1 = "adb shell input keyevent KEYCODE_APP_SWITCH";cmdExecute(command1);Thread.sleep(2000);command1 = "adb shell input keyevent KEYCODE_APP_SWITCH";cmdExecute(command1);
复制代码

这样就可以完成上面的自动化测试了。


如果今天的内容对你有所帮助,欢迎转发给你的朋友。

我是 Tango,一个热爱分享技术的程序猿,我们下期见。


安卓常用 KEY CODE

每个数字与 keycode 对应表如下:

0 -->  "KEYCODE_UNKNOWN"

1 -->  "KEYCODE_MENU"

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"


KEYCODE 列表

电话键

KEYCODE_CALL 拨号键 5

KEYCODE_ENDCALL 挂机键 6

KEYCODE_HOME 按键 Home 3

KEYCODE_MENU 菜单键 82

KEYCODE_BACK 返回键 4

KEYCODE_SEARCH 搜索键 84

KEYCODE_CAMERA 拍照键 27

KEYCODE_FOCUS 拍照对焦键 80

KEYCODE_POWER 电源键 26

KEYCODE_NOTIFICATION 通知键 83

KEYCODE_MUTE 话筒静音键 91

KEYCODE_VOLUME_MUTE 扬声器静音键 164

KEYCODE_VOLUME_UP 音量增加键 24

KEYCODE_VOLUME_DOWN 音量减小键 25


控制键

KEYCODE_ENTER 回车键 66

KEYCODE_ESCAPE ESC 键 111

KEYCODE_DPAD_CENTER 导航键 确定键 23

KEYCODE_DPAD_UP 导航键 向上 19

KEYCODE_DPAD_DOWN 导航键 向下 20

KEYCODE_DPAD_LEFT 导航键 向左 21

KEYCODE_DPAD_RIGHT 导航键 向右 22

KEYCODE_MOVE_HOME 光标移动到开始键 122

KEYCODE_MOVE_END 光标移动到末尾键 123

KEYCODE_PAGE_UP 向上翻页键 92

KEYCODE_PAGE_DOWN 向下翻页键 93

KEYCODE_DEL 退格键 67

KEYCODE_FORWARD_DEL 删除键 112

KEYCODE_INSERT 插入键 124

KEYCODE_TAB Tab 键 61

KEYCODE_NUM_LOCK 小键盘锁 143

KEYCODE_CAPS_LOCK 大写锁定键 115

KEYCODE_BREAK Break/Pause 键 121

KEYCODE_SCROLL_LOCK 滚动锁定键 116

KEYCODE_ZOOM_IN 放大键 168

KEYCODE_ZOOM_OUT 缩小键 169


组合键

KEYCODE_ALT_LEFT Alt+Left

KEYCODE_ALT_RIGHT Alt+Right

KEYCODE_CTRL_LEFT Control+Left

KEYCODE_CTRL_RIGHT Control+Right

KEYCODE_SHIFT_LEFT Shift+Left

KEYCODE_SHIFT_RIGHT Shift+Right


基本

KEYCODE_0 按键'0' 7

KEYCODE_1 按键'1' 8

KEYCODE_2 按键'2' 9

KEYCODE_3 按键'3' 10

KEYCODE_4 按键'4' 11

KEYCODE_5 按键'5' 12

KEYCODE_6 按键'6' 13

KEYCODE_7 按键'7' 14

KEYCODE_8 按键'8' 15

KEYCODE_9 按键'9' 16

KEYCODE_A 按键'A' 29

KEYCODE_B 按键'B' 30

KEYCODE_C 按键'C' 31

KEYCODE_D 按键'D' 32

KEYCODE_E 按键'E' 33

KEYCODE_F 按键'F' 34

KEYCODE_G 按键'G' 35

KEYCODE_H 按键'H' 36

KEYCODE_I 按键'I' 37

KEYCODE_J 按键'J' 38

KEYCODE_K 按键'K' 39

KEYCODE_L 按键'L' 40

KEYCODE_M 按键'M' 41

KEYCODE_N 按键'N' 42

KEYCODE_O 按键'O' 43

KEYCODE_P 按键'P' 44

KEYCODE_Q 按键'Q' 45

KEYCODE_R 按键'R' 46

KEYCODE_S 按键'S' 47

KEYCODE_T 按键'T' 48

KEYCODE_U 按键'U' 49

KEYCODE_V 按键'V' 50

KEYCODE_W 按键'W' 51

KEYCODE_X 按键'X' 52

KEYCODE_Y 按键'Y' 53

KEYCODE_Z 按键'Z' 54


符号

KEYCODE_PLUS 按键'+'

KEYCODE_MINUS 按键'-'

KEYCODE_STAR 按键'*'

KEYCODE_SLASH 按键'/'

KEYCODE_EQUALS 按键'='

KEYCODE_AT 按键'@'

KEYCODE_POUND 按键'#'

KEYCODE_APOSTROPHE 按键''' (单引号)

KEYCODE_BACKSLASH 按键'\'

KEYCODE_COMMA 按键','

KEYCODE_PERIOD 按键'.'

KEYCODE_LEFT_BRACKET 按键'['

KEYCODE_RIGHT_BRACKET 按键']'

KEYCODE_SEMICOLON 按键';'

KEYCODE_GRAVE 按键'`'

KEYCODE_SPACE 空格键


小键盘

KEYCODE_NUMPAD_0 小键盘按键'0'

KEYCODE_NUMPAD_1 小键盘按键'1'

KEYCODE_NUMPAD_2 小键盘按键'2'

KEYCODE_NUMPAD_3 小键盘按键'3'

KEYCODE_NUMPAD_4 小键盘按键'4'

KEYCODE_NUMPAD_5 小键盘按键'5'

KEYCODE_NUMPAD_6 小键盘按键'6'

KEYCODE_NUMPAD_7 小键盘按键'7'

KEYCODE_NUMPAD_8 小键盘按键'8'

KEYCODE_NUMPAD_9 小键盘按键'9'

KEYCODE_NUMPAD_ADD 小键盘按键'+'

KEYCODE_NUMPAD_SUBTRACT 小键盘按键'-'

KEYCODE_NUMPAD_MULTIPLY 小键盘按键'*'

KEYCODE_NUMPAD_DIVIDE 小键盘按键'/'

KEYCODE_NUMPAD_EQUALS 小键盘按键'='

KEYCODE_NUMPAD_COMMA 小键盘按键','

KEYCODE_NUMPAD_DOT 小键盘按键'.'

KEYCODE_NUMPAD_LEFT_PAREN 小键盘按键'('

KEYCODE_NUMPAD_RIGHT_PAREN 小键盘按键')'

KEYCODE_NUMPAD_ENTER 小键盘按键回车


功能键

KEYCODE_F1 按键 F1

KEYCODE_F2 按键 F2

KEYCODE_F3 按键 F3

KEYCODE_F4 按键 F4

KEYCODE_F5 按键 F5

KEYCODE_F6 按键 F6

KEYCODE_F7 按键 F7

KEYCODE_F8 按键 F8

KEYCODE_F9 按键 F9

KEYCODE_F10 按键 F10

KEYCODE_F11 按键 F11

KEYCODE_F12 按键 F12 多媒体键

KEYCODE_MEDIA_PLAY 多媒体键 播放

KEYCODE_MEDIA_STOP 多媒体键 停止

KEYCODE_MEDIA_PAUSE 多媒体键 暂停

KEYCODE_MEDIA_PLAY_PAUSE 多媒体键 播放/暂停

KEYCODE_MEDIA_FAST_FORWARD 多媒体键 快进

KEYCODE_MEDIA_REWIND 多媒体键 快退

KEYCODE_MEDIA_NEXT 多媒体键 下一首

KEYCODE_MEDIA_PREVIOUS 多媒体键 上一首

KEYCODE_MEDIA_CLOSE 多媒体键 关闭

KEYCODE_MEDIA_EJECT 多媒体键 弹出

KEYCODE_MEDIA_RECORD 多媒体键 录音手柄按键

KEYCODE_BUTTON_1 通用游戏手柄按钮 #1

KEYCODE_BUTTON_2 通用游戏手柄按钮 #2

KEYCODE_BUTTON_3 通用游戏手柄按钮 #3

KEYCODE_BUTTON_4 通用游戏手柄按钮 #4

KEYCODE_BUTTON_5 通用游戏手柄按钮 #5

KEYCODE_BUTTON_6 通用游戏手柄按钮 #6

KEYCODE_BUTTON_7 通用游戏手柄按钮 #7

KEYCODE_BUTTON_8 通用游戏手柄按钮 #8

KEYCODE_BUTTON_9 通用游戏手柄按钮 #9

KEYCODE_BUTTON_10 通用游戏手柄按钮 #10

KEYCODE_BUTTON_11 通用游戏手柄按钮 #11

KEYCODE_BUTTON_12 通用游戏手柄按钮 #12

KEYCODE_BUTTON_13 通用游戏手柄按钮 #13

KEYCODE_BUTTON_14 通用游戏手柄按钮 #14

KEYCODE_BUTTON_15 通用游戏手柄按钮 #15

KEYCODE_BUTTON_16 通用游戏手柄按钮 #16

KEYCODE_BUTTON_A 游戏手柄按钮 A

KEYCODE_BUTTON_B 游戏手柄按钮 B

KEYCODE_BUTTON_C 游戏手柄按钮 C

KEYCODE_BUTTON_X 游戏手柄按钮 X

KEYCODE_BUTTON_Y 游戏手柄按钮 Y

KEYCODE_BUTTON_Z 游戏手柄按钮 Z

KEYCODE_BUTTON_L1 游戏手柄按钮 L1

KEYCODE_BUTTON_L2 游戏手柄按钮 L2

KEYCODE_BUTTON_R1 游戏手柄按钮 R1

KEYCODE_BUTTON_R2 游戏手柄按钮 R2

KEYCODE_BUTTON_MODE 游戏手柄按钮 Mode

KEYCODE_BUTTON_SELECT 游戏手柄按钮 Select

KEYCODE_BUTTON_START 游戏手柄按钮 Start

KEYCODE_BUTTON_THUMBL Left Thumb Button

KEYCODE_BUTTON_THUMBR Right Thumb Button


待查

KEYCODE_NUM 按键 Number modifier

KEYCODE_INFO 按键 Info

KEYCODE_APP_SWITCH 按键 App switch

KEYCODE_BOOKMARK 按键 Bookmark

KEYCODE_AVR_INPUT 按键 A/V Receiver input

KEYCODE_AVR_POWER 按键 A/V Receiver power

KEYCODE_CAPTIONS 按键 Toggle captions

KEYCODE_CHANNEL_DOWN 按键 Channel down

KEYCODE_CHANNEL_UP 按键 Channel up

KEYCODE_CLEAR 按键 Clear

KEYCODE_DVR 按键 DVR

KEYCODE_ENVELOPE 按键 Envelope special function

KEYCODE_EXPLORER 按键 Explorer special function

KEYCODE_FORWARD 按键 Forward

KEYCODE_FORWARD_DEL 按键 Forward Delete

KEYCODE_FUNCTION 按键 Function modifier

KEYCODE_GUIDE 按键 Guide

KEYCODE_HEADSETHOOK 按键 Headset Hook

KEYCODE_META_LEFT 按键 Left Meta modifier

KEYCODE_META_RIGHT 按键 Right Meta modifier

KEYCODE_PICTSYMBOLS 按键 Picture Symbols modifier

KEYCODE_PROG_BLUE 按键 Blue “programmable”

KEYCODE_PROG_GREEN 按键 Green “programmable”

KEYCODE_PROG_RED 按键 Red “programmable”

KEYCODE_PROG_YELLOW 按键 Yellow “programmable”

KEYCODE_SETTINGS 按键 Settings

KEYCODE_SOFT_LEFT 按键 Soft Left

KEYCODE_SOFT_RIGHT 按键 Soft Right

KEYCODE_STB_INPUT 按键 Set-top-box input

KEYCODE_STB_POWER 按键 Set-top-box power

KEYCODE_SWITCH_CHARSET 按键 Switch Charset modifier

KEYCODE_SYM 按键 Symbol modifier

KEYCODE_SYSRQ 按键 System Request / Print Screen

KEYCODE_TV 按键 TV

KEYCODE_TV_INPUT 按键 TV input

KEYCODE_TV_POWER 按键 TV power

KEYCODE_WINDOW 按键 Window

KEYCODE_UNKNOWN 未知按键


发布于: 刚刚阅读数: 6
用户头像

一个日语专业的程序猿。 2017.09.10 加入

【坐标】无锡 【软件技能】Java,C#,Python 【爱好】炉石传说 【称号】InfoQ年度人气作者,Intel OpenVINO领航者联盟成员 【B站】https://space.bilibili.com/397260706/ 【个人站】www.it-worker.club

评论

发布
暂无评论
如果用ADB模拟按手机上的“菜单”键_IT蜗壳教学_IT蜗壳-Tango_InfoQ写作社区