diff options
Diffstat (limited to 'WordPress/src/androidTest/monkeys/playstore-screenshots.py')
-rwxr-xr-x | WordPress/src/androidTest/monkeys/playstore-screenshots.py | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/WordPress/src/androidTest/monkeys/playstore-screenshots.py b/WordPress/src/androidTest/monkeys/playstore-screenshots.py new file mode 100755 index 000000000..68ed7d4a7 --- /dev/null +++ b/WordPress/src/androidTest/monkeys/playstore-screenshots.py @@ -0,0 +1,202 @@ +#! /usr/bin/env python + +import sys +import os +import time +import settings +from subprocess import Popen, PIPE +from com.dtmilano.android.viewclient import ViewClient + +# App actions + +def action_login(device, serialno): + print("login") + device.type(settings.username) + device.press('KEYCODE_DPAD_DOWN') + device.type(settings.password) + device.press('KEYCODE_ENTER') + # time to login + time.sleep(10) + # lose focus + device.press('KEYCODE_DPAD_DOWN') + time.sleep(1) + +def action_open_my_sites(device, serialno): + print("open my sites") + device.press('KEYCODE_TAB') + for i in range(5): + device.press('KEYCODE_DPAD_LEFT') + # Wait for gravatars to load + time.sleep(2) + +def action_open_reader_freshlypressed(device, serialno): + print("open reader") + # Open the reader + for i in range(5): + device.press('KEYCODE_DPAD_LEFT') + device.press('KEYCODE_DPAD_RIGHT') + device.press('KEYCODE_ENTER') + # Wait for the reader to load articles / pictures + time.sleep(5) + +def action_open_notifications(device, serialno): + print("open notifications tab") + # Open the reader + for i in range(5): + device.press('KEYCODE_DPAD_LEFT') + for i in range(4): + device.press('KEYCODE_DPAD_RIGHT') + device.press('KEYCODE_ENTER') + time.sleep(5) + +def action_open_me(device, serialno): + print("open me tab") + # Open the reader + for i in range(5): + device.press('KEYCODE_DPAD_LEFT') + for i in range(2): + device.press('KEYCODE_DPAD_RIGHT') + device.press('KEYCODE_ENTER') + time.sleep(5) + +def action_open_editor_and_type_text(device, serialno): + print("open editor") + # Open My Sites + for i in range(5): + device.press('KEYCODE_DPAD_LEFT') + + viewclient = ViewClient(device, serialno) + viewclient.dump() + view = viewclient.findViewById("org.wordpress.android:id/fab_button") + view.touch() + time.sleep(2) + + viewclient.dump() + view = viewclient.findViewById("org.wordpress.android:id/post_content") + + # Type a sample text (spaces can't be entered via device.type()) + view.type(settings.example_post_content) + time.sleep(2) + +def action_open_stats(device, serialno): + print("open stats tab") + device.press('KEYCODE_TAB') + for i in range(5): + device.press('KEYCODE_DPAD_LEFT') + viewclient = ViewClient(device, serialno) + viewclient.dump() + view = viewclient.findViewById("org.wordpress.android:id/row_stats") + view.touch() + time.sleep(5) + +# Utilities + +def lose_focus(serialno): + # tap point 0,0 to lose focus + _adb_shell(serialno, " input tap 0 0") + time.sleep(1) + +def take_screenshot(serialno, filename): + os.popen("adb -s '%s' shell /system/bin/screencap -p /sdcard/screenshot.png" % (serialno)) + os.popen("adb -s '%s' pull /sdcard/screenshot.png '%s'" % (serialno, filename)) + +def launch_activity(device, package, activity): + component = package + "/" + activity + FLAG_ACTIVITY_NEW_TASK = 0x10000000 + device.startActivity(component=component, flags=FLAG_ACTIVITY_NEW_TASK) + time.sleep(2) + +def _adb_shell(serialno, command): + print("adb -s '%s' shell \"%s\"" % (serialno, command)) + os.popen("adb -s '%s' shell \"%s\"" % (serialno, command)) + +def change_lang_settings(serialno, lang): + adb_command = "su -c 'setprop persist.sys.language %s; setprop persist.sys.country %s; stop; start'" + _adb_shell(serialno, adb_command % (lang, lang)) + # time to reload + time.sleep(15) + unlock_screen(serialno) + +def unlock_screen(serialno): + _adb_shell(serialno, "input keyevent 82") + time.sleep(1) + +def reinstall_apk(serialno, packagename, apk): + os.popen("adb -s '%s' uninstall '%s'" % (serialno, packagename)) + os.popen("adb -s '%s' install '%s'" % (serialno, apk)) + +def back(device): + device.press('KEYCODE_BACK') + +# Main scenario + screenshots + +def run_tests_for_device_and_lang(device, serialno, filename, lang, packagename, apk): + # Install the apk` + reinstall_apk(serialno, packagename, apk) + + # Change language setting + change_lang_settings(serialno, lang) + + # Launch the app + launch_activity(device, packagename, "org.wordpress.android.ui.WPLaunchActivity") + take_screenshot(serialno, lang + "-99-login-screen-" + filename) + + # Login into the app + action_login(device, serialno) + + # Action! + action_open_my_sites(device, serialno) + take_screenshot(serialno, lang + "-1-my-sites-" + filename) + action_open_reader_freshlypressed(device, serialno) + take_screenshot(serialno, lang + "-2-reader-discover-" + filename) + action_open_me(device, serialno) + take_screenshot(serialno, lang + "-3-me-tab-" + filename) + action_open_notifications(device, serialno) + take_screenshot(serialno, lang + "-4-notifications-" + filename) + action_open_stats(device, serialno) + take_screenshot(serialno, lang + "-5-stats-" + filename) + back(device) + action_open_editor_and_type_text(device, serialno) + take_screenshot(serialno, lang + "-6-editor-" + filename) + # Close virtual keyboard + back(device) + # Close the editor + back(device) + +def list_devices(): + devices = [] + process = Popen("adb devices -l", stdout=PIPE, shell=True) + for line in iter(process.stdout.readline, ''): + split = line.split() + if len(split) <= 1 or split[0] == "List": + continue + devices.append({"name": split[3].replace("model:", ""), "serialno": split[0]}) + process.communicate() + return devices + +def run_tests_on_device(packagename, apk, serialno, name, lang): + device, serialno = ViewClient.connectToDeviceOrExit(verbose=False, serialno=serialno) + filename = name + ".png" + run_tests_for_device_and_lang(device, serialno, filename, lang, packagename, apk) + +def run_tests_on_all_devices(packagename, apk, lang): + devices = list_devices() + if not devices: + print("No device found") + return + for device in devices: + print("Running on %s - language: %s" % (device, lang)) + run_tests_on_device(packagename, apk, device["serialno"], device["name"], lang) + +def run_tests_on_all_devices_for_all_languages(packagename, apk): + for lang in settings.languages: + run_tests_on_all_devices(packagename, apk, lang) + +def main(): + if len(sys.argv) < 3: + sys.exit("usage: %s packagename apk" % sys.argv[0]) + packagename = sys.argv.pop(1) + apk = sys.argv.pop(1) + run_tests_on_all_devices_for_all_languages(packagename, apk) + +main() |