android 使用shell command實現對裝置控制,實現按座標點選
目的:實現自動化測試,
方法:使用adb shell命令。
難點,factory無法使用sendkey event 執行, 需要使用sendevent按照座標點選.
雖然是dev下的檔案是裝置,但是實時的資料是在/proc/這個目錄下對應的檔案裡。
解決難點過程,使用cat /proc/bus/input/devices > log.txt 活得裝置輸入資訊。
從裝置的資訊中可以看出觸控式螢幕lm75對應的裝置input0(name為lm75的裝置,Handlers對應的是event0)
然後檢視/dev/input/event0的記錄資訊。
然後把輸入資訊解析成10進位制 ,然後傳送給裝置, 如下。
self.extDevice.shellCommand("sendevent /dev/input/event0 3 48 88")
self.extDevice.shellCommand("sendevent /dev/input/event0 3 50 10")
self.extDevice.shellCommand("sendevent /dev/input/event0 3 53 908")
self.extDevice.shellCommand("sendevent /dev/input/event0 3 54 884")
self.extDevice.shellCommand("sendevent /dev/input/event0 0 2 0")
self.extDevice.shellCommand("sendevent /dev/input/event0 0 0 0")
self.extDevice.shellCommand("sendevent /dev/input/event0 0 2 0")
self.extDevice.shellCommand("sendevent /dev/input/event0 0 0 0")
大功搞成。(well done.)
參考過文件如下:
android手機上sendevent的命令在一些手機上失效, 比如htc wildfire貌似使用sendevent的ball事件就沒有響應, 在nexus one上ball event ok,但touch event fail... pity, 有沒有解決的辦法?
我也遇到這個問題,好像back鍵都不起作用:
adb shell sendevent dev/input/event0 1 158 1
adb shell sendevent dev/input/event0 1 158 0
adb shell sendevent /dev/input/event2 1 330 1
adb shell sendevent /dev/input/event2 3 48 18
adb shell sendevent /dev/input/event2 3 50 1
adb shell sendevent /dev/input/event2 3 53 210 //x 座標
adb shell sendevent /dev/input/event2 3 54 200 //y 座標
adb shell sendevent /dev/input/event2 0 2 0
adb shell sendevent /dev/input/event2 0 0 0
adb shell sendevent /dev/input/event2 1 330 0
adb shell sendevent /dev/input/event2 0 2 0
adb shell sendevent /dev/input/event2 0 0 0
題的緣由是有個自動化測試的需求,我需要寫指令碼模擬點選觸控式螢幕的一系列操作,以代替手工測試(話說~遇上連續啟動1000次camera並且拍照後 退出這種變態測試,你們都是怎麼做的?)。以此來證明:頭兒,此bug真的解了!
Linux上可以通過sendEvent來模擬鍵盤或者滑鼠點選事件,而Android是 基於Linux2.6的,所以也可以模擬點選事件。網路文章很多都給出這樣一段資料資訊,告訴你怎麼去實現模擬點選:
需要注意輸入裝置, 和輸入據型別。我的是device0 十進位制