Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2333)

Unified Diff: android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/GmailTest.java

Issue 2692923010: Gmail open conversation test automation (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « android_webview/tools/automated_ui_tests/BUILD.gn ('k') | build/android/gmail_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/GmailTest.java
diff --git a/android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/GmailTest.java b/android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/GmailTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..c806b05dba2f8a098d3cd3e06890e1819c1abbc9
--- /dev/null
+++ b/android_webview/tools/automated_ui_tests/javatests/src/org/chromium/webview_ui_test/test/GmailTest.java
@@ -0,0 +1,352 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.webview_ui_test.test;
+
+import android.content.Intent;
+import android.os.Build;
+import android.os.RemoteException;
+import android.os.SystemClock;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.test.uiautomator.UiDevice;
+import android.support.test.uiautomator.UiObject;
+import android.support.test.uiautomator.UiObjectNotFoundException;
+import android.support.test.uiautomator.UiScrollable;
+import android.support.test.uiautomator.UiSelector;
+
+import android.support.test.filters.LargeTest;
+
+import com.android.volley.DefaultRetryPolicy;
+import com.android.volley.Request;
+import com.android.volley.RequestQueue;
+import com.android.volley.Response;
+import com.android.volley.VolleyError;
+import com.android.volley.toolbox.StringRequest;
+import com.android.volley.toolbox.Volley;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.Log;
+
+@RunWith(AndroidJUnit4.class)
+public class GmailTest {
+ private UiDevice mDevice;
+
+ private static final int UI_TIMEOUT = 10 * 1000;
+ private static final int EMAIL_WAIT = 20 * 1000;
+ private static final int WEBVIEW_CONTENT_WAIT = 30 * 1000;
+ private int mCenterX;
+ private int mCenterY;
+ private String mTitleType;
+
+ private RequestQueue mRequestQueue =
+ Volley.newRequestQueue(InstrumentationRegistry.getContext());
+
+ private boolean startTracingResponse;
+ private boolean endTracingResponse;
+
+ public static String UNREAD_CENTITHREAD_EMAIL_DESC = "Unread Yoland Yan about Unread Test %s.*";
+ public static String UNREAD_SINGLE_EMAIL_DESC =
+ "Unread Yoland Yan about Unread Test Single %s.*";
+ public static String READ_CENTITHREAD_EMAIL_DESC = " *me about Read Test %s.*";
+ public static String READ_SINGLE_EMAIL_DESC = " *me about Read Test Single %s.*";
+
+ @Before
+ public void setUp() throws RemoteException, UiObjectNotFoundException, InterruptedException {
+ mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
+ mDevice.setOrientationNatural();
+ mDevice.wakeUp();
+ mCenterX = mDevice.getDisplayWidth() / 2;
+ mCenterY = mDevice.getDisplayHeight() / 2;
+ mDevice.swipe(mCenterX, mCenterY, mCenterX, 0, 20);
+ mTitleType = InstrumentationRegistry.getArguments().getString("title");
+ if (mTitleType == null) {
+ mTitleType = "Long Text";
+ }
+ mRequestQueue.start();
+ }
+
+ @After
+ public void tearDown() throws RemoteException, UiObjectNotFoundException, InterruptedException {
+ closeRecentActivity();
+ endTracing();
+ Thread.sleep(3000);
+ mDevice.unfreezeRotation();
+ mRequestQueue.stop();
+ }
+
+ // @Test
+ // public void testUnreadCentiThread() throws RemoteException, UiObjectNotFoundException {
+ // //STUB
+ // }
+
+ // @Test
+ // public void testUnreadSingleThread() throws RemoteException, UiObjectNotFoundException {
+ // //STUB
+ // }
+
+ // Test for CentiThread
+ @Test
+ @LargeTest
+ public void testReadCentiThread()
+ throws RemoteException, UiObjectNotFoundException, InterruptedException {
+ Log.d("#YOLAND", "open_conversation soon for " + mTitleType + " testReadCentiThread");
+ startTracing("testReadCentiThread");
+ openGmail();
+ clickEmail(String.format(READ_CENTITHREAD_EMAIL_DESC, mTitleType));
+ waitForWebView();
+ }
+
+ @Test
+ @LargeTest
+ public void testReadGoBackReadAgainCentiThread()
+ throws RemoteException, UiObjectNotFoundException, InterruptedException {
+ Log.d("#YOLAND",
+ "open_conversation soon for " + mTitleType + " testReadGoBackReadAgainCentiThread");
+ startTracing("testReadGoBackReadAgainCentiThread");
+ openGmail();
+ clickEmail(String.format(READ_CENTITHREAD_EMAIL_DESC, mTitleType));
+ waitForWebView();
+ clickBack();
+ Thread.sleep(5000);
+ clickEmail(String.format(READ_CENTITHREAD_EMAIL_DESC, mTitleType));
+ waitForWebView();
+ }
+
+ @Test
+ @LargeTest
+ public void testReadGoBackLockReadAgainCentiThread()
+ throws RemoteException, UiObjectNotFoundException, InterruptedException {
+ Log.d("#YOLAND", "open_conversation soon for " + mTitleType
+ + " testReadGoBackLockReadAgainCentiThread");
+ startTracing("testReadGoBackLockReadAgainCentiThread");
+ openGmail();
+ clickEmail(String.format(READ_CENTITHREAD_EMAIL_DESC, mTitleType));
+ waitForWebView();
+ clickBack();
+ mDevice.sleep();
+ Thread.sleep(5000);
+ mDevice.wakeUp();
+ mDevice.swipe(mCenterX, mCenterY, mCenterX, 0, 20);
+ clickEmail(String.format(READ_CENTITHREAD_EMAIL_DESC, mTitleType));
+ waitForWebView();
+ }
+
+ @Test
+ @LargeTest
+ public void testReadLockReadAgainCentiThread()
+ throws RemoteException, UiObjectNotFoundException, InterruptedException {
+ Log.d("#YOLAND",
+ "open_conversation soon for " + mTitleType + " testReadLockReadAgainCentiThread");
+ startTracing("testReadLockReadAgainCentiThread");
+ openGmail();
+ clickEmail(String.format(READ_CENTITHREAD_EMAIL_DESC, mTitleType));
+ waitForWebView();
+ mDevice.sleep();
+ Thread.sleep(5000);
+ mDevice.wakeUp();
+ mDevice.swipe(mCenterX, mCenterY, mCenterX, 0, 20);
+ waitForWebView();
+ }
+
+ // Test for Single Email Thread
+ @Test
+ @LargeTest
+ public void testReadSingleThread()
+ throws RemoteException, UiObjectNotFoundException, InterruptedException {
+ Log.d("#YOLAND", "open_conversation soon for " + mTitleType + " testReadSingleThread");
+ startTracing("testReadSingleThread");
+ openGmail();
+ clickEmail(String.format(READ_SINGLE_EMAIL_DESC, mTitleType));
+ waitForWebView();
+ }
+
+ @Test
+ @LargeTest
+ public void testReadGoBackReadAgainSingleThread()
+ throws RemoteException, UiObjectNotFoundException, InterruptedException {
+ Log.d("#YOLAND", "open_conversation soon for " + mTitleType
+ + " testReadGoBackReadAgainSingleThread");
+ startTracing("testReadGoBackReadAgainSingleThread");
+ openGmail();
+ clickEmail(String.format(READ_SINGLE_EMAIL_DESC, mTitleType));
+ waitForWebView();
+ clickBack();
+ Thread.sleep(5000);
+ clickEmail(String.format(READ_SINGLE_EMAIL_DESC, mTitleType));
+ waitForWebView();
+ }
+
+ @Test
+ @LargeTest
+ public void testReadGoBackLockReadAgainSingleThread()
+ throws RemoteException, UiObjectNotFoundException, InterruptedException {
+ Log.d("#YOLAND", "open_conversation soon for " + mTitleType
+ + " testReadGoBackLockReadAgainSingleThread");
+ startTracing("testReadGoBackLockReadAgainSingleThread");
+ openGmail();
+ clickEmail(String.format(READ_SINGLE_EMAIL_DESC, mTitleType));
+ waitForWebView();
+ clickBack();
+ mDevice.sleep();
+ Thread.sleep(5000);
+ mDevice.wakeUp();
+ mDevice.swipe(mCenterX, mCenterY, mCenterX, 0, 20);
+ clickEmail(String.format(READ_SINGLE_EMAIL_DESC, mTitleType));
+ waitForWebView();
+ }
+
+ @Test
+ @LargeTest
+ public void testReadLockReadAgainSingleThread()
+ throws RemoteException, UiObjectNotFoundException, InterruptedException {
+ Log.d("#YOLAND",
+ "open_conversation soon for " + mTitleType + " testReadLockReadAgainSingleThread");
+ startTracing("testReadLockReadAgainSingleThread");
+ openGmail();
+ clickEmail(String.format(READ_SINGLE_EMAIL_DESC, mTitleType));
+ waitForWebView();
+ mDevice.sleep();
+ Thread.sleep(5000);
+ mDevice.wakeUp();
+ mDevice.swipe(mCenterX, mCenterY, mCenterX, 0, 20);
+ waitForWebView();
+ }
+
+ // Private helper method from here on
+ private void clickBack() throws UiObjectNotFoundException {
+ UiObject back = mDevice.findObject(new UiSelector().descriptionMatches("Navigate up"));
+ Assert.assertTrue(
+ "Backbutton not found, wtf, check if the title is wrong, currently looking for back button",
+ back.waitForExists(UI_TIMEOUT));
+ back.click();
+ }
+
+ private void lockScreen() throws UiObjectNotFoundException {}
+
+ private void clickEmail(String descRegex) throws UiObjectNotFoundException {
+ UiObject emailThread = mDevice.findObject(new UiSelector().descriptionMatches(descRegex));
+ Assert.assertTrue(
+ "New email not found, wtf, check if the title is wrong, currently looking for email titled "
+ + descRegex,
+ emailThread.waitForExists(UI_TIMEOUT));
+ emailThread.click();
+ }
+
+ private void startTracing(String name) throws InterruptedException {
+ // adhoc way of notifying the host side to start tracing
+ Log.d("#YOLAND", "start tracing");
+ startTracingResponse = false;
+ String url = "http://localhost:7777/start-tracing/" + name;
+
+ StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
+ new Response.Listener<String>() {
+ @Override
+ public void onResponse(String response) {
+ Log.d("#YOLAND", "start tracing response: " + response);
+ startTracingResponse = true;
+ }
+ },
+ new Response.ErrorListener() {
+ @Override
+ public void onErrorResponse(VolleyError error) {
+ Log.d("#YOLAND", "start tracing error: " + error.getMessage());
+ }
+ });
+ stringRequest.setRetryPolicy(new DefaultRetryPolicy(
+ DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
+ mRequestQueue.add(stringRequest);
+ }
+
+ private void endTracing() throws InterruptedException {
+ // adhoc way of notifying the host side to end tracing
+ Log.d("#YOLAND", "end tracing");
+ endTracingResponse = false;
+ String url = "http://localhost:7777/end-tracing";
+ StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
+ new Response.Listener<String>() {
+ @Override
+ public void onResponse(String response) {
+ Log.d("#YOLAND", "end tracing response: " + response);
+ endTracingResponse = true;
+ }
+ },
+ new Response.ErrorListener() {
+ @Override
+ public void onErrorResponse(VolleyError error) {
+ Log.d("#YOLAND", "end tracing error: " + error.getMessage());
+ }
+ });
+ stringRequest.setRetryPolicy(new DefaultRetryPolicy(
+ DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
+ mRequestQueue.add(stringRequest);
+ }
+
+ // private void waitForNewEmail() {
+ // long start = SystemClock.elapsedRealtime();
+ // while (!mNewEmailThread.waitForExists(UI_TIMEOUT) && SystemClock.elapsedRealtime() -
+ // start < EMAIL_WAIT) {
+ // mDevice.swipe(mCenterX, mCenterY, mCenterX, mDevice.getDisplayHeight(), 10);
+ // }
+ // Assert.assertTrue("New email not found, wtf",
+ // mNewEmailThread.waitForExists(UI_TIMEOUT));
+ // }
+
+ private void waitForWebView() throws InterruptedException {
+ UiObject webviewContent =
+ mDevice.findObject(new UiSelector().descriptionMatches("^Test content:.*"));
+ if (!webviewContent.waitForExists(WEBVIEW_CONTENT_WAIT)) {
+ Log.d("#YOLAND", "WebView Content never came up!!!!");
+ throw new AssertionError("Webview content never came up");
+ }
+ Thread.sleep(1000);
+ }
+
+ private void openGmail() {
+ Intent i =
+ InstrumentationRegistry.getContext().getPackageManager().getLaunchIntentForPackage(
+ "com.google.android.gm");
+ i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ InstrumentationRegistry.getContext().startActivity(i);
+ }
+
+ private void openApp(String appName) throws UiObjectNotFoundException, RemoteException {
+ mDevice.pressHome();
+ openAppsMenu();
+ UiScrollable appMenu = new UiScrollable(new UiSelector().resourceIdMatches(
+ ".*(apps_customize_pane_content|apps_list_view)"));
+ appMenu.setAsHorizontalList();
+ appMenu.getChildByText(new UiSelector().className(android.widget.TextView.class), appName)
+ .click();
+ }
+
+ private void openAppsMenu() throws UiObjectNotFoundException {
+ if (Build.DEVICE.equals("sailfish")) {
+ // UiObject pageIndicator = mDevice.findObject(new
+ // UiSelector().resourceIdMatches(".*page_indicator"));
+ // Assert.assertTrue("Apps menu button was not found.",
+ // pageIndicator.waitForExists(UI_TIMEOUT));
+ // pageIndicator.swipeUp(10);
+ mDevice.swipe(mCenterX, mCenterY, mCenterX, 0, 10);
+ } else {
+ UiObject appsMenuButton = mDevice.findObject(new UiSelector().description("Apps"));
+ Assert.assertTrue(
+ "Apps menu button was not found.", appsMenuButton.waitForExists(UI_TIMEOUT));
+ appsMenuButton.click();
+ }
+ }
+
+ private void closeRecentActivity()
+ throws UiObjectNotFoundException, RemoteException, InterruptedException {
+ mDevice.pressRecentApps();
+ Thread.sleep(500);
+ mDevice.swipe(mCenterX, mCenterY, mDevice.getDisplayWidth(), mCenterY, 5);
+ mDevice.pressHome();
+ }
+}
« no previous file with comments | « android_webview/tools/automated_ui_tests/BUILD.gn ('k') | build/android/gmail_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698