aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/androidTest/monkeys/playstore-screenshots.py
diff options
context:
space:
mode:
Diffstat (limited to 'WordPress/src/androidTest/monkeys/playstore-screenshots.py')
-rwxr-xr-xWordPress/src/androidTest/monkeys/playstore-screenshots.py202
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()