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

Unified Diff: chrome/test/pyautolib/chromoting.py

Issue 10821015: Initial checkin of the me2me pyauto automation: (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 8 years, 4 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 | « chrome/test/functional/chromoting_basic.py ('k') | chrome/test/pyautolib/chromoting_cert.p12 » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/pyautolib/chromoting.py
===================================================================
--- chrome/test/pyautolib/chromoting.py (revision 150103)
+++ chrome/test/pyautolib/chromoting.py (working copy)
@@ -1,187 +0,0 @@
-# Copyright (c) 2012 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.
-
-import os
-
-
-class ChromotingMixIn(object):
- """MixIn for PyUITest that adds Chromoting-specific methods.
-
- Prepend it as a base class of a test to enable Chromoting functionality.
- This is a separate class from PyUITest to avoid namespace collisions.
-
- Example usage:
- class ChromotingExample(chromoting.ChromotingMixIn, pyauto.PyUITest):
- def testShare(self):
- app = self.InstallApp(self.GetWebappPath())
- self.LaunchApp(app)
- self.Authenticate()
- self.assertTrue(self.Share())
- """
-
- def _ExecuteJavascript(self, command, tab_index, windex):
- """Helper that returns immediately after running a Javascript command."""
- return self.ExecuteJavascript(
- '%s; window.domAutomationController.send("done");' % command,
- tab_index, windex)
-
- def _WaitForJavascriptCondition(self, condition, tab_index, windex):
- """Waits until the Javascript condition is true.
-
- This is different from a naive self.WaitUntil(lambda: self.GetDOMValue())
- because it uses Javascript to check the condition instead of Python.
- """
- return self.WaitUntil(lambda: self.GetDOMValue(
- '(%s) ? "1" : ""' % condition, tab_index, windex))
-
- def _ExecuteAndWaitForMode(self, command, mode, tab_index, windex):
- self.assertTrue(self._ExecuteJavascript(command, tab_index, windex),
- 'Javascript command did not return anything.')
- return self._WaitForJavascriptCondition(
- 'remoting.currentMode == remoting.AppMode.%s' % mode,
- tab_index, windex)
-
- def _ExecuteAndWaitForMajorMode(self, command, mode, tab_index, windex):
- self.assertTrue(self._ExecuteJavascript(command, tab_index, windex),
- 'Javascript command did not return anything.')
- return self._WaitForJavascriptCondition(
- 'remoting.getMajorMode() == remoting.AppMode.%s' % mode,
- tab_index, windex)
-
- def GetWebappPath(self):
- """Returns the path to the webapp.
-
- Expects the webapp to be in the same place as the pyautolib binaries.
- """
- return os.path.join(self.BrowserPath(), 'remoting', 'remoting.webapp')
-
- def Authenticate(self, email=None, password=None, otp=None,
- tab_index=1, windex=0):
- """Logs a user in for Chromoting and accepts permissions for the app.
-
- PyAuto tests start with a clean profile, so Chromoting tests should call
- this for every run after launching the app. If email or password is omitted,
- the user can type it into the browser window manually.
-
- Raises:
- AssertionError if the authentication flow changes or
- the credentials are incorrect.
- """
- self.assertTrue(
- self._WaitForJavascriptCondition('window.remoting && remoting.oauth2',
- tab_index, windex),
- msg='Timed out while waiting for remoting app to finish loading.')
- self._ExecuteJavascript('remoting.oauth2.doAuthRedirect();',
- tab_index, windex)
- self.assertTrue(
- self._WaitForJavascriptCondition('document.getElementById("signIn")',
- tab_index, windex),
- msg='Unable to redirect for authentication.')
-
- if email:
- self._ExecuteJavascript('document.getElementById("Email").value = "%s";'
- 'document.getElementById("Passwd").focus();'
- % email, tab_index, windex)
-
- if password:
- self._ExecuteJavascript('document.getElementById("Passwd").value = "%s";'
- 'document.getElementById("signIn").click();'
- % password, tab_index, windex)
-
- if otp:
- self.assertTrue(
- self._WaitForJavascriptCondition(
- 'document.getElementById("smsVerifyPin")',
- tab_index, windex),
- msg='Invalid username or password.')
- self._ExecuteJavascript('document.getElementById("smsUserPin").value = '
- '"%s";'
- 'document.getElementById("smsVerifyPin").click();'
- % otp, tab_index, windex)
-
- # If the account adder screen appears, then skip it.
- self.assertTrue(
- self._WaitForJavascriptCondition(
- 'document.getElementById("skip") || '
- 'document.getElementById("submit_approve_access")',
- tab_index, windex),
- msg='No "skip adding account" or "approve access" link.')
- self._ExecuteJavascript(
- 'if (document.getElementById("skip")) '
- '{ document.getElementById("skip").click(); }',
- tab_index, windex)
-
- # Approve access.
- self.assertTrue(
- self._WaitForJavascriptCondition(
- 'document.getElementById("submit_approve_access")',
- tab_index, windex),
- msg='Authentication failed. The username, password, or otp is invalid.')
- self._ExecuteJavascript(
- 'document.getElementById("submit_approve_access").click();',
- tab_index, windex)
-
- # Wait for some things to be ready.
- self.assertTrue(
- self._WaitForJavascriptCondition(
- 'window.remoting && remoting.oauth2 && '
- 'remoting.oauth2.isAuthenticated()',
- tab_index, windex),
- msg='OAuth2 authentication failed.')
- self.assertTrue(
- self._WaitForJavascriptCondition(
- 'window.localStorage.getItem("remoting-email")',
- tab_index, windex),
- msg='Chromoting app did not reload after authentication.')
-
- def Share(self, tab_index=1, windex=0):
- """Generates an access code and waits for incoming connections.
-
- Returns:
- The access code on success; None otherwise.
- """
- self._ExecuteAndWaitForMode(
- 'remoting.tryShare();',
- 'HOST_WAITING_FOR_CONNECTION', tab_index, windex)
- return self.GetDOMValue(
- 'document.getElementById("access-code-display").innerText',
- tab_index, windex)
-
- def Connect(self, access_code, wait_for_frame, tab_index=1, windex=0):
- """Connects to a Chromoting host and starts the session.
-
- Returns:
- True on success; False otherwise.
- """
- if not self._ExecuteAndWaitForMode(
- 'document.getElementById("access-code-entry").value = "%s";'
- 'remoting.connectIt2Me();' % access_code,
- 'IN_SESSION', tab_index, windex):
- return False
-
- if wait_for_frame and not self._WaitForJavascriptCondition(
- 'remoting.clientSession && remoting.clientSession.hasReceivedFrame()',
- tab_index, windex):
- return False
- return True
-
- def CancelShare(self, tab_index=1, windex=0):
- """Stops sharing the desktop on the host side.
-
- Returns:
- True on success; False otherwise.
- """
- return self._ExecuteAndWaitForMode(
- 'remoting.cancelShare();',
- 'HOST_SHARE_FINISHED', tab_index, windex)
-
- def Disconnect(self, tab_index=1, windex=0):
- """Disconnects from the Chromoting session on the client side.
-
- Returns:
- True on success; False otherwise.
- """
- return self._ExecuteAndWaitForMode(
- 'remoting.disconnect();',
- 'CLIENT_SESSION_FINISHED_IT2ME', tab_index, windex)
« no previous file with comments | « chrome/test/functional/chromoting_basic.py ('k') | chrome/test/pyautolib/chromoting_cert.p12 » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698