UIAutomator is a great tool to perform Android UI testing, but to do it, you have to write java code, compile it, install the jar, and run. It's a complex steps for all testers...
This project is to build a light weight jsonrpc server in Android device, so that we can just write PC side script to write UIAutomator tests.
- Run command:
$ ./gradlew build $ ./gradlew packageDebugAndroidTest- Run the jsonrpc server on Android device
$ ./gradlew cC $ adb forward tcp:9008 tcp:9008 # tcp forwardIf debug apk already installed, There is no need to use gradle.
simply run the following command
adb forward tcp:9008 tcp:9008 adb shell am instrument -w -r -e debug false -e class com.github.uiautomator.stub.Stub \ com.github.uiautomator.test/androidx.test.runner.AndroidJUnitRunner $ curl -X POST -d '{"jsonrpc": "2.0", "id": "1f0f2655716023254ed2b57ba4198815", "method": "deviceInfo", "params": {}}' 'http://127.0.0.1:9008/jsonrpc/0' {'currentPackageName': 'com.smartisanos.launcher', 'displayHeight': 1920, 'displayRotation': 0, 'displaySizeDpX': 360, 'displaySizeDpY': 640, 'displayWidth': 1080, 'productName': 'surabaya', 'screenOn': True, 'sdkInt': 23, 'naturalOrientation': True}- Google UiAutomator Tutorial
- Google UiAutomator API
- Maven repository of uiautomator
- androidx.test.uiautomator release notes
Clipboard, Thanks to @fplust
- https://github.com/majido/clipper
- https://github.com/appium/io.appium.settings/blob/5d3bc99ff35f3b816b4342395aba1bdea82ad48f/app/src/main/java/io/appium/settings/receivers/ClipboardReceiver.java
com.github.uiautomator/.AdbKeyboard
Encode the text into UTF-8 and then Base64
For example:
"Hello 你好" -> (UTF-8 && Base64) = SGVsbG8g5L2g5aW9 Send to AdbKeyboard with broadcast
Broadcast completed: result=-1 means success
# show ime list $ adb shell ime list -s -a com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME com.google.android.tts/com.google.android.apps.speech.tts.googletts.settings.asr.voiceime.VoiceInputMethodService com.github.uiautomator/.AdbKeyboard # enable and set ime $ adb shell ime enable com.github.uiautomator/.AdbKeyboard $ adb shell settings put secure default_input_method com.github.uiautomator/.AdbKeyboard # Append text to input field $ adb shell am broadcast -a ADB_KEYBOARD_INPUT_TEXT --es text SGVsbG8g5L2g5aW9 Broadcasting: Intent { act=ADB_KEYBOARD_INPUT_TEXT flg=0x400000 (has extras) } Broadcast completed: result=-1 # Clear text $ adb shell am broadcast -a ADB_KEYBOARD_CLEAR_TEXT Broadcasting: Intent { act=ADB_KEYBOARD_CLEAR_TEXT flg=0x400000 } Broadcast completed: result=-1 # Clear text before append text $ adb shell am broadcast -a ADB_KEYBOARD_SET_TEXT --es text SGVsbG8g5L2g5aW9 Broadcasting: Intent { act=ADB_KEYBOARD_SET_TEXT flg=0x400000 (has extras) } Broadcast completed: result=-1 # Send Keycode or Editor code according to the InputEditor requires $ adb shell am broadcast -a ADB_KEYBOARD_SMART_ENTER Broadcasting: Intent { act=ADB_KEYBOARD_SMART_ENTER flg=0x400000 } Broadcast completed: result=-1 # Send keycode, eg: ENTER $ adb shell am broadcast -a ADB_KEYBOARD_INPUT_KEYCODE --ei code 66 # Send Editor code, eg: 2 $ adb shell am broadcast -a ADB_KEYBOARD_EDITOR_CODE --ei code 2 # IME_ACTION_GO # Get clipboard (without data) $ adb shell am broadcast -a ADB_KEYBOARD_GET_CLIPBOARD Broadcasting: Intent { act=ADB_GET_CLIPBOARD flg=0x400000 } Broadcast completed: result=0 # Get clipboard (with data, base64 encoded) $ adb shell am broadcast -a ADB_GET_KEYBOARD_CLIPBOARD Broadcasting: Intent { act=ADB_GET_CLIPBOARD flg=0x400000 } Broadcast completed: result=-1, data="5LqG6Kej5Lyg57uf5paH5YyW" # show keyboard $ adb shell am broadcast -a ADB_KEYBOARD_SHOW # hide keyboard $ adb shell am broadcast -a ADB_KEYBOARD_HIDEYou can change mock location from terminal using adb in order to test GPS on real devices.
adb [-s <specific device>] shell am broadcast -a send.mock [-e lat <latitude>] [-e lon <longitude>] [-e alt <altitude>] [-e accurate <accurate>] For example:
adb shell am broadcast -a send.mock -e lat 15.3 -e lon 99 adb shell am start -n com.github.uiautomator/.ToastActivity -e message hello adb shell am start -n com.github.uiautomator/.ToastActivity -e showFloatWindow true # show adb shell am start -n com.github.uiautomator/.ToastActivity -e showFloatWindow false # hide import uiautomator2 as u2 d = u2.connect() d.screen.on() d(text="Settings").click() d(scrollable=True).scroll.vert.forward()Refer to python wrapper library uiautomator.
npm install -g conventional-changelog-cli conventional-changelog -p grunt -i CHANGELOG.md -s -r 0If you have any idea, please email codeskyblue@gmail.com or submit tickets.
- support unicode input