UI 테스트를위한 몇 가지 기본 자동화를 수행 할 수 있도록 AndroidDebugBridge를 사용하여 기기에 터치 이벤트를 보내려고합니다. 나는 LINK 에서 토론을 따랐다 . sendevent를 사용하여 에뮬레이터에서 터치를 시뮬레이션 할 수 있지만 장치에서는 동일하게 수행 할 수 없습니다.
위의 링크에서와 같이 에뮬레이터는 각 터치에 대해 6 개의 이벤트 (xcoord, ycoord, 2는 보도, 2는 릴리스)를 보내는 것으로 보이며이 정보를 사용하여 이벤트를 보내는 것은 쉬웠지만 장치의 터치 스크린에 대한 getevent는 다음과 같은 것 같습니다. 너무 많은 이벤트를 생성합니다.
누군가 ADB에서 장치로 터치를 보낼 수 있습니까? 해결책을 공유해 주시겠습니까?
답변
Android에는 input
기타 입력 이벤트를 시뮬레이션 할 수 있는 명령 줄 도구 가 함께 제공됩니다 . 두드리기를 시뮬레이션하려면 다음과 같습니다.
input tap x y
adb 셸 (> 2.3.5)을 사용하여 명령을 원격으로 실행할 수 있습니다.
adb shell input tap x y
답변
특정 작업 (예 : 웹 브라우저 열기)을 수행하려면 먼저 탭할 위치를 파악해야합니다. 이를 위해 먼저 다음을 실행할 수 있습니다.
adb shell getevent -l
원하는 위치에서 장치를 누르면 다음 출력이 표시됩니다.
<...>
/dev/input/event3: EV_KEY BTN_TOUCH DOWN
/dev/input/event3: EV_ABS ABS_MT_POSITION_X 000002f5
/dev/input/event3: EV_ABS ABS_MT_POSITION_Y 0000069e
adb는 십진수로 757 및 1694 인 16 진수 위치 2f5, 69e에서 키를 눌렀 음을 알려줍니다 (버튼 누름).
이제 동일한 이벤트를 생성하려는 경우 동일한 위치에서 입력 탭 명령을 사용할 수 있습니다.
adb shell input tap 757 1694
자세한 정보는 다음에서 찾을 수 있습니다.
https://source.android.com/devices/input/touch-devices.html
http://source.android.com/devices/input/getevent.html
답변
2.3.5는 없었 input tap
습니다. input keyevent
그리고 input text
당신은 그것을 위해 monkeyrunner를 사용할 수 있습니다 : (이것은 https://stackoverflow.com/a/18959385/1587329 에있는 대답의 복사본입니다 ) :
다음 과 같이 monkeyrunner 를 사용할 수 있습니다 .
$ monkeyrunner
>>> from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
>>> device = MonkeyRunner.waitForConnection()
>>> device.touch(200, 400, MonkeyDevice.DOWN_AND_UP)
드래그를하거나 활동을 시작하는 등의 작업을 할 수도 있습니다 . MonkeyDevice 용 API를 살펴보세요 .
답변
사용할 필요가 없습니다
adb 쉘 getevent -l
명령을 실행하려면 장치의 개발자 옵션에서 [터치 데이터 표시]를 활성화하면 X와 Y를 얻을 수 있습니다.
더 많은 정보는 여기 내 기사에서 찾을 수 있습니다 : https://mobileqablog.wordpress.com/2016/08/20/android-automatic-touchscreen-taps-adb-shell-input-touchscreen-tap/
답변
adb shell uiautomator […]와 함께 Android의 uiautomator를 사용하거나 SDK와 함께 제공되는 .jar를 직접 사용하는 것이 좋습니다.
답변
Tomas의 답변을 바탕으로 이것이 내가 찾은 정수로 위치 탭 위치를 찾는 가장 좋은 방법입니다.
adb shell getevent -l | grep ABS_MT_POSITION --line-buffered | awk '{a = substr($0,54,8); sub(/^0+/, "", a); b = sprintf("0x%s",a); printf("%d\n",strtonum(b))}'
사용은 adb shell getevent -l
이벤트 목록을 얻을 수에 대한 사용 그렙은 ABS_MT_POSITION
마지막으로하고, 관련 16 진수 값을 얻을 수 AWK 사용하는 정수로 0과 1의 변환 진수 그들을 제거 (터치 진수의 이벤트와 라인을 얻는다). 이것은 장치를 눌렀을 때만 터미널의 x 및 y 좌표를 계속 인쇄합니다.
그런 다음이 adb 셸 명령을 사용하여 명령을 보낼 수 있습니다.
adb shell input tap x y