Support Android 5.0+ 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.
Your Cloudflare account ID.
Your Cloudflare R2 bucket access key ID.
Your Cloudflare R2 bucket secret access key.
- Run command:
./gradlew build
./gradlew packageDebugAndroidTest
mv app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/com.github.tikmatrix.apk
mv app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk app/build/outputs/apk/com.github.tikmatrix.test.apk
- Run the jsonrpc server on Android device
./gradlew cC
adb forward tcp:9008 tcp:9008 # tcp forward
If 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.tikmatrix.stub.Stub com.github.tikmatrix.test/androidx.test.runner.AndroidJUnitRunner
adb shell am startservice com.github.tikmatrix/.Service
$ 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}
Fast input method
Encode the text into UTF-8 and then Base64
For example:
"Hello 你好" -> (UTF-8 && Base64) = SGVsbG8g5L2g5aW9
Send to FastInputIME with broadcast
# Append text to input field
$ adb shell am broadcast -a ADB_INPUT_TEXT --es text SGVsbG8g5L2g5aW9
# Clear text
$ adb shell am broadcast -a ADB_CLEAR_TEXT
# Clear text before append text
$ adb shell am broadcast -a ADB_SET_TEXT --es text SGVsbG8g5L2g5aW9
# Send keycode, eg: ENTER
$ adb shell am broadcast -a ADB_INPUT_KEYCODE --ei code 66
# Send Editor code
$ adb shell am broadcast -a ADB_EDITOR_CODE --ei code 2 # IME_ACTION_GO
# Get clipboard (without data)
$ adb shell am broadcast -a ADB_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_CLIPBOARD
Broadcasting: Intent { act=ADB_GET_CLIPBOARD flg=0x400000 }
Broadcast completed: result=-1, data="5LqG6Kej5Lyg57uf5paH5YyW"
You 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.tikmatrix/.ToastActivity -e message hello
adb shell am start -n com.github.tikmatrix/.ToastActivity -e showFloatWindow true # show
adb shell am start -n com.github.tikmatrix/.ToastActivity -e showFloatWindow false # hide
adb shell am start -n com.github.tikmatrix/.ToastActivity --es language en --es timezone Europe/London
npm install -g conventional-changelog-cli
conventional-changelog -p grunt -i CHANGELOG.md -s -r 0
- support unicode input