android的自動(dòng)化測(cè)試2020-06-09

前言:

最近剛開始學(xué)習(xí)android的自動(dòng)化測(cè)試上真,看了很多種方法,各有各的優(yōu)點(diǎn)羹膳,各有各的缺點(diǎn)睡互,覺得要找到最合適的方法,其實(shí)并不容易溜徙。

本文為菜鳥的個(gè)人總結(jié)湃缎,純屬拋磚引玉,如果有什么錯(cuò)誤蠢壹,請(qǐng)大家抱著寬容為主,欣賞為輔的原則九巡,批評(píng)指正图贸。

Android還有一種更底層的模擬鍵盤鼠標(biāo)事件的方法,那就是通過使用adb?shell?命令冕广。?

一疏日、發(fā)送鍵盤事件:

命令格式1:adb?shell?inputkeyevent"value"

其中value以及對(duì)應(yīng)的key?code如下表所列:

KeyEvent?ValueKEYCODEComment

0KEYCODE_UNKNOWN?

1KEYCODE_MENU在SDK2.1的模擬器中命令失效,sendevent命令可行

2KEYCODE_SOFT_RIGHT?

3KEYCODE_HOME?

4KEYCODE_BACK?

5KEYCODE_CALL?

6KEYCODE_ENDCALL?

7KEYCODE_0?

8KEYCODE_1?

9KEYCODE_2?

10KEYCODE_3?

11KEYCODE_4?

12KEYCODE_5?

13KEYCODE_6?

14KEYCODE_7?

15KEYCODE_8?

16KEYCODE_9?

17KEYCODE_STAR?

18KEYCODE_POUND?

19KEYCODE_DPAD_UP?

20KEYCODE_DPAD_DOWN?

21KEYCODE_DPAD_LEFT?

22KEYCODE_DPAD_RIGHT?

23KEYCODE_DPAD_CENTER?

24KEYCODE_VOLUME_UP?

25KEYCODE_VOLUME_DOWN?

26KEYCODE_POWER?

27KEYCODE_CAMERA?

28KEYCODE_CLEAR?

29KEYCODE_A?

30KEYCODE_B?

31KEYCODE_C?

32KEYCODE_D?

33KEYCODE_E?

34KEYCODE_F?

35KEYCODE_G?

36KEYCODE_H?

37KEYCODE_I?

38KEYCODE_J?

39KEYCODE_K?

40KEYCODE_L?

41KEYCODE_M?

42KEYCODE_N?

43KEYCODE_O?

44KEYCODE_P?

45KEYCODE_Q?

46KEYCODE_R?

47KEYCODE_S?

48KEYCODE_T?

49KEYCODE_U?

50KEYCODE_V?

51KEYCODE_W?

52KEYCODE_X?

53KEYCODE_Y?

54KEYCODE_Z?

55KEYCODE_COMMA?

56KEYCODE_PERIOD?

57KEYCODE_ALT_LEFT?

58KEYCODE_ALT_RIGHT?

59KEYCODE_SHIFT_LEFT?

60KEYCODE_SHIFT_RIGHT?

61KEYCODE_TAB?

62KEYCODE_SPACE?

63KEYCODE_SYM?

64KEYCODE_EXPLORER?

65KEYCODE_ENVELOPE?

66KEYCODE_ENTER?

67KEYCODE_DEL?

68KEYCODE_GRAVE?

69KEYCODE_MINUS?

70KEYCODE_EQUALS?

71KEYCODE_LEFT_BRACKET?

72KEYCODE_RIGHT_BRACKET?

73KEYCODE_BACKSLASH?

74KEYCODE_SEMICOLON?

75KEYCODE_APOSTROPHE?

76KEYCODE_SLASH?

77KEYCODE_AT?

78KEYCODE_NUM?

79KEYCODE_HEADSETHOOK?

80KEYCODE_FOCUS?

81KEYCODE_PLUS?

82KEYCODE_MENU?

83KEYCODE_NOTIFICATION?

84KEYCODE_SEARCH?

85TAG_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?NameCODE

MENU229

HOME102

BACK?(back?button)158

CALL?(call?button)231

END?(end?call?button)107


二撒汉、發(fā)送鼠標(biāo)事件(Touch):

命令格式:adb?shell?sendevent?[device]?[type]?[code]?[value]


1.在某坐標(biāo)點(diǎn)上touch

如在屏幕的x坐標(biāo)為40沟优,y坐標(biāo)為210的點(diǎn)上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???????//itmust?have


adb?shell?sendevent?/dev/input/event0?1?330?0?//untouch

adb?shell?sendevent?/dev/input/event0?0?0?0?//it?musthave


注:以上六組命令必須配合使用睬辐,缺一不可


2.模擬滑動(dòng)軌跡

如下例是在aPaint軟件上畫出一條開始于(100,200)挠阁,止于(108,200)的水平直線

adb?shell?sendevent?/dev/input/event0?3?0?100?//startfrom?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?//stepto?point?(101,200)

adb?shell?sendevent?/dev/input/event0?0?0?0

……………………//must?list?each?step,?here?justskip

adb?shell?sendevent?/dev/input/event0?3?0?108?//endpoint(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

三宾肺、CMD指令Python封裝

1.通過os進(jìn)行Python封裝

adb_shell?=?"adb?shellsendevent?/dev/input/event0?30?"+str(PointX)

os.system(adb_shell)

這個(gè)方法有一個(gè)問題,就是每執(zhí)行一次指令侵俗,都會(huì)有一個(gè)CMD窗口一閃而過锨用,于是改用下面的方法。

2.通過subprocess進(jìn)行Python封裝

adb_shell?=?"adb?shellsendevent?/dev/input/event0?31?"+str(PointX1)

subprocess.Popen(adb_shell,stdout=subprocess.PIPE,?shell=True)

這個(gè)方法可以避免彈窗的出現(xiàn)隘谣。

四增拥、真機(jī)與模擬器上的模擬觸控差異

將上述指令應(yīng)用在模擬器上,確實(shí)很有效寻歧,但是當(dāng)搬到真機(jī)上時(shí)掌栅,你會(huì)發(fā)現(xiàn),這些指令都失效了码泛,經(jīng)過仔細(xì)分析渣玲,原因有兩點(diǎn):

1.event

模擬器上只有一個(gè)/dev/input/event0,但是真機(jī)上不是(如果還真是弟晚,那你這設(shè)備還是別出廠了-_-||)忘衍。

用cat獲得設(shè)備對(duì)應(yīng)的event信息:

#?cat?/proc/bus/input/devicesI:?Bus=0000?Vendor=0000?Product=0000?Version=0000N:?Name="qtouch-touchscreen"P:?Phys=S:?Sysfs=/devices/virtual/input/input5U:Uniq=H:?Handlers=event5B:?EV=bB:?KEY=400?0?4?0?0?0?0?0?0?00B:?ABS=2750000?11030003"qtouch-touchscreen"不是規(guī)定死的event幾,話說1234567都有可能卿城,看你設(shè)備了枚钓。

2.觸控參數(shù)數(shù)據(jù)

#探究原因的時(shí)候,通過:

#adb?shell?getevent/dev/input/event5?>?getvalue

可以得到:

0003?0035?000007c8

0003?0036?00000771

0003?0038?00000001

0000?0002?00000000?

0003?0037?00000010

0000?0000?00000000

這和我之前所想象的坐標(biāo)信息不一樣瑟押,看到c搀捷,應(yīng)該是16進(jìn)制數(shù),轉(zhuǎn)化成10進(jìn)制可以得到:

3??53??1992?

3??54??1905?

3??56??1?

0??2???0?

3??55??16

0??0???0

然后按照原來的方法做個(gè)測(cè)試驗(yàn)證下結(jié)果:

adb?shell?sendevent?/dev/input/event5?3?53?1992

adb?shell?sendevent?/dev/input/event5?3?54?1905

adb?shell?sendevent?/dev/input/event5?3?56?1

adb?shell?sendevent?/dev/input/event5?0?2?0

adb?shell?sendevent?/dev/input/event5?3?55?16

adb?shell?sendevent?/dev/input/event5?0?0?0

結(jié)果可以實(shí)現(xiàn)點(diǎn)擊6嗤嫩舟!

(倘若操作的數(shù)據(jù)特別大,那我們可以利用vi怀偷,在腳本中實(shí)現(xiàn)批量數(shù)據(jù)轉(zhuǎn)換:vim?'+%normal?gg''+.,$g/^/s//adb?shellsendevent?//dev//input//event5?/g'?'+wq'?value)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末家厌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子椎工,更是在濱河造成了極大的恐慌饭于,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件维蒙,死亡現(xiàn)場(chǎng)離奇詭異掰吕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)颅痊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門殖熟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斑响,你說我怎么就攤上這事菱属∏ィ” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵照皆,是天一觀的道長(zhǎng)重绷。 經(jīng)常有香客問我,道長(zhǎng)膜毁,這世上最難降的妖魔是什么昭卓? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮瘟滨,結(jié)果婚禮上候醒,老公的妹妹穿的比我還像新娘。我一直安慰自己杂瘸,他們只是感情好倒淫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著败玉,像睡著了一般敌土。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上运翼,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天返干,我揣著相機(jī)與錄音,去河邊找鬼血淌。 笑死矩欠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悠夯。 我是一名探鬼主播癌淮,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼沦补!你這毒婦竟也來了乳蓄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤策彤,失蹤者是張志新(化名)和其女友劉穎栓袖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體店诗,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年音榜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庞瘸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赠叼,死狀恐怖擦囊,靈堂內(nèi)的尸體忽然破棺而出违霞,到底是詐尸還是另有隱情,我是刑警寧澤瞬场,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布买鸽,位于F島的核電站,受9級(jí)特大地震影響贯被,放射性物質(zhì)發(fā)生泄漏眼五。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一彤灶、第九天 我趴在偏房一處隱蔽的房頂上張望看幼。 院中可真熱鬧,春花似錦幌陕、人聲如沸诵姜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棚唆。三九已至,卻和暖如春心例,著一層夾襖步出監(jiān)牢的瞬間宵凌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工契邀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摆寄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓坯门,卻偏偏與公主長(zhǎng)得像微饥,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子古戴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355