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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import os 5 import os
6 6 import subprocess
7 import sys
8 import time
7 9
8 class ChromotingMixIn(object): 10 class ChromotingMixIn(object):
9 """MixIn for PyUITest that adds Chromoting-specific methods. 11 """MixIn for PyUITest that adds Chromoting-specific methods.
10 12
11 Prepend it as a base class of a test to enable Chromoting functionality. 13 Prepend it as a base class of a test to enable Chromoting functionality.
12 This is a separate class from PyUITest to avoid namespace collisions. 14 This is a separate class from PyUITest to avoid namespace collisions.
13 15
14 Example usage: 16 Example usage:
15 class ChromotingExample(chromoting.ChromotingMixIn, pyauto.PyUITest): 17 class ChromotingExample(chromoting.ChromotingMixIn, pyauto.PyUITest):
16 def testShare(self): 18 def testShare(self):
17 app = self.InstallApp(self.GetWebappPath()) 19 app = self.InstallApp(self.GetWebappPath())
18 self.LaunchApp(app) 20 self.LaunchApp(app)
19 self.Authenticate() 21 self.Authenticate()
20 self.assertTrue(self.Share()) 22 self.assertTrue(self.Share())
21 """ 23 """
22 24
23 def _ExecuteJavascript(self, command, tab_index, windex): 25 def _ExecuteJavascript(self, command, tab_index, windex):
24 """Helper that returns immediately after running a Javascript command.""" 26 """Helper that returns immediately after running a Javascript command.
25 return self.ExecuteJavascript( 27 """
28 self.ExecuteJavascript(
26 '%s; window.domAutomationController.send("done");' % command, 29 '%s; window.domAutomationController.send("done");' % command,
27 tab_index, windex) 30 tab_index, windex)
28 31
29 def _WaitForJavascriptCondition(self, condition, tab_index, windex): 32 def _WaitForJavascriptCondition(self, condition, tab_index, windex):
30 """Waits until the Javascript condition is true. 33 """Waits until the Javascript condition is true.
31 34
32 This is different from a naive self.WaitUntil(lambda: self.GetDOMValue()) 35 This is different from a naive self.WaitUntil(lambda: self.GetDOMValue())
33 because it uses Javascript to check the condition instead of Python. 36 because it uses Javascript to check the condition instead of Python.
37
38 Returns: True or False if condition not satisfied.
simonmorris 2012/07/30 22:44:24 It's not clear whether True means that the conditi
yihongg1 2012/08/03 00:40:06 Done.
34 """ 39 """
35 return self.WaitUntil(lambda: self.GetDOMValue( 40 return self.WaitUntil(lambda: self.GetDOMValue(
36 '(%s) ? "1" : ""' % condition, tab_index, windex)) 41 '(%s) ? "1" : ""' % condition, tab_index, windex))
37 42
38 def _ExecuteAndWaitForMode(self, command, mode, tab_index, windex): 43 def _ExecuteAndWaitForMode(self, command, mode, tab_index, windex):
39 self.assertTrue(self._ExecuteJavascript(command, tab_index, windex), 44 """ Executes JavaScript and wait for remoting app mode equal to the given mo de.
Nirnimesh 2012/07/31 20:15:10 80 chars
yihongg1 2012/08/03 00:40:06 Done.
40 'Javascript command did not return anything.') 45
46 Returns: True or False if app mode is not satisfied.
47 """
48 self._ExecuteJavascript(command, tab_index, windex)
41 return self._WaitForJavascriptCondition( 49 return self._WaitForJavascriptCondition(
42 'remoting.currentMode == remoting.AppMode.%s' % mode, 50 'remoting.currentMode == remoting.AppMode.%s' % mode,
43 tab_index, windex) 51 tab_index, windex)
44 52
45 def _ExecuteAndWaitForMajorMode(self, command, mode, tab_index, windex): 53 def _ExecuteAndWaitForMajorMode(self, command, mode, tab_index, windex):
46 self.assertTrue(self._ExecuteJavascript(command, tab_index, windex), 54 """ Executes JavaScript and wait for remoting app major mode equal to the gi ven mode.
Nirnimesh 2012/07/31 20:15:10 80 chars
yihongg1 2012/08/03 00:40:06 Done.
47 'Javascript command did not return anything.') 55
56 Returns: True or False if app mode is not satisfied.
57 """
58 self._ExecuteJavascript(command, tab_index, windex)
48 return self._WaitForJavascriptCondition( 59 return self._WaitForJavascriptCondition(
49 'remoting.getMajorMode() == remoting.AppMode.%s' % mode, 60 'remoting.getMajorMode() == remoting.AppMode.%s' % mode,
50 tab_index, windex) 61 tab_index, windex)
51 62
52 def GetWebappPath(self): 63 def GetWebappPath(self):
53 """Returns the path to the webapp. 64 """Returns the path to the webapp.
54 65
55 Expects the webapp to be in the same place as the pyautolib binaries. 66 Expects the webapp to be in the same place as the pyautolib binaries.
56 """ 67 """
57 return os.path.join(self.BrowserPath(), 'remoting', 'remoting.webapp') 68 return os.path.join(self.BrowserPath(), 'remoting', 'remoting.webapp')
58 69
59 def Authenticate(self, email=None, password=None, otp=None, 70 def GetHelperRunner(self):
60 tab_index=1, windex=0): 71 """Returns the python binary name that runs chromoting_helper.py."""
61 """Logs a user in for Chromoting and accepts permissions for the app. 72 if sys.platform.startswith('win'):
73 return "python"
74 else:
75 return "suid-python"
62 76
63 PyAuto tests start with a clean profile, so Chromoting tests should call 77 def InstallHostDaemon(self):
64 this for every run after launching the app. If email or password is omitted, 78 """Installs the host daemon."""
65 the user can type it into the browser window manually. 79 subprocess.call([self.GetHelperRunner(), "chrome/test/pyautolib/chromoting_h elper.py",
80 "install", self.BrowserPath()])
66 81
67 Raises: 82 def UninstallHostDaemon(self):
68 AssertionError if the authentication flow changes or 83 """Uninstalls the host daemon."""
69 the credentials are incorrect. 84 subprocess.call([self.GetHelperRunner(), "chrome/test/pyautolib/chromoting_h elper.py",
70 """ 85 "uninstall", self.BrowserPath()])
86
87 def ContinueAuth(self, tab_index=1, windex=0):
88 """Starts authentication."""
71 self.assertTrue( 89 self.assertTrue(
72 self._WaitForJavascriptCondition('window.remoting && remoting.oauth2', 90 self._WaitForJavascriptCondition('window.remoting && remoting.oauth2',
73 tab_index, windex), 91 tab_index, windex),
74 msg='Timed out while waiting for remoting app to finish loading.') 92 msg='Timed out while waiting for remoting app to finish loading.')
75 self._ExecuteJavascript('remoting.oauth2.doAuthRedirect();', 93 self._ExecuteJavascript('remoting.oauth2.doAuthRedirect();',
76 tab_index, windex) 94 tab_index, windex)
95
96 def LogIn(self, email=None, password=None, otp=None,
97 tab_index=1, windex=0):
98 """Logs a user in.
99
100 PyAuto tests start with a clean profile, so Chromoting tests should call
101 this for every run after launching the app. If email or password is omitted,
102 the user can type it into the browser window manually.
103 """
77 self.assertTrue( 104 self.assertTrue(
78 self._WaitForJavascriptCondition('document.getElementById("signIn")', 105 self._WaitForJavascriptCondition('document.getElementById("signIn")',
79 tab_index, windex), 106 tab_index, windex),
80 msg='Unable to redirect for authentication.') 107 msg='Unable to redirect for authentication.')
81 108
82 if email: 109 if email:
83 self._ExecuteJavascript('document.getElementById("Email").value = "%s";' 110 self._ExecuteJavascript('document.getElementById("Email").value = "%s";'
84 'document.getElementById("Passwd").focus();' 111 'document.getElementById("Passwd").focus();'
85 % email, tab_index, windex) 112 % email, tab_index, windex)
86 113
(...skipping 18 matching lines...) Expand all
105 self._WaitForJavascriptCondition( 132 self._WaitForJavascriptCondition(
106 'document.getElementById("skip") || ' 133 'document.getElementById("skip") || '
107 'document.getElementById("submit_approve_access")', 134 'document.getElementById("submit_approve_access")',
108 tab_index, windex), 135 tab_index, windex),
109 msg='No "skip adding account" or "approve access" link.') 136 msg='No "skip adding account" or "approve access" link.')
110 self._ExecuteJavascript( 137 self._ExecuteJavascript(
111 'if (document.getElementById("skip")) ' 138 'if (document.getElementById("skip")) '
112 '{ document.getElementById("skip").click(); }', 139 '{ document.getElementById("skip").click(); }',
113 tab_index, windex) 140 tab_index, windex)
114 141
142 def AllowAccess(self, tab_index=1, windex=0):
143 """Allows access to chromoting webapp."""
115 # Approve access. 144 # Approve access.
116 self.assertTrue( 145 self.assertTrue(
117 self._WaitForJavascriptCondition( 146 self._WaitForJavascriptCondition(
118 'document.getElementById("submit_approve_access")', 147 'document.getElementById("submit_approve_access")',
119 tab_index, windex), 148 tab_index, windex),
120 msg='Authentication failed. The username, password, or otp is invalid.') 149 msg='Did not go to permission page.')
121 self._ExecuteJavascript( 150 self._ExecuteJavascript(
122 'document.getElementById("submit_approve_access").click();', 151 'document.getElementById("submit_approve_access").click();',
123 tab_index, windex) 152 tab_index, windex)
124 153
125 # Wait for some things to be ready. 154 # Wait for some things to be ready.
126 self.assertTrue( 155 self.assertTrue(
127 self._WaitForJavascriptCondition( 156 self._WaitForJavascriptCondition(
128 'window.remoting && remoting.oauth2 && ' 157 'window.remoting && remoting.oauth2 && '
129 'remoting.oauth2.isAuthenticated()', 158 'remoting.oauth2.isAuthenticated()',
130 tab_index, windex), 159 tab_index, windex),
131 msg='OAuth2 authentication failed.') 160 msg='OAuth2 authentication failed.')
132 self.assertTrue( 161 self.assertTrue(
133 self._WaitForJavascriptCondition( 162 self._WaitForJavascriptCondition(
134 'window.localStorage.getItem("remoting-email")', 163 'window.localStorage.getItem("remoting-email")',
135 tab_index, windex), 164 tab_index, windex),
136 msg='Chromoting app did not reload after authentication.') 165 msg='Chromoting app did not reload after authentication.')
137 166
167 def DenyAccess(self, tab_index=1, windex=0):
168 """Deny and then allow access to chromoting webapp."""
169 self.assertTrue(
170 self._WaitForJavascriptCondition(
171 'document.getElementById("submit_deny_access")',
172 tab_index, windex),
173 msg='Did not go to permission page.')
174 self._ExecuteJavascript(
175 'document.getElementById("submit_deny_access").click();',
176 tab_index, windex)
177
178 def SignOut(self, tab_index=1, windex=0):
179 """Signs out from chromoting and signs back in."""
180 self._ExecuteAndWaitForMode(
181 'document.getElementById("sign-out").click();',
182 'UNAUTHENTICATED', tab_index, windex)
183
184 def Authenticate(self, tab_index=1, windex=0):
185 """Finishes authentication flow for user."""
186 self.ContinueAuth(tab_index, windex)
187 account = self.GetPrivateInfo()['test_chromoting_account']
188 self.host.LogIn(account['username'], account['password'], None, tab_index, w index)
189 self.host.AllowAccess(tab_index, windex)
190
191 def GetMe2MeStarted(self, tab_index=1, windex=0):
192 """Starts Me2Me. """
193 self._ExecuteJavascript(
194 'document.getElementById("get-started-me2me").click();',
195 tab_index, windex)
196
138 def Share(self, tab_index=1, windex=0): 197 def Share(self, tab_index=1, windex=0):
139 """Generates an access code and waits for incoming connections. 198 """Generates an access code and waits for incoming connections.
140 199
141 Returns: 200 Returns:
142 The access code on success; None otherwise. 201 The access code on success; None otherwise.
143 """ 202 """
144 self._ExecuteAndWaitForMode( 203 self._ExecuteAndWaitForMode(
145 'remoting.tryShare();', 204 'remoting.tryShare();',
146 'HOST_WAITING_FOR_CONNECTION', tab_index, windex) 205 'HOST_WAITING_FOR_CONNECTION', tab_index, windex)
147 return self.GetDOMValue( 206 return self.GetDOMValue(
148 'document.getElementById("access-code-display").innerText', 207 'document.getElementById("access-code-display").innerText',
149 tab_index, windex) 208 tab_index, windex)
150 209
210 def CancelShare(self, tab_index=1, windex=0):
211 """Stops sharing the desktop on the host side."""
212 self.assertTrue(
213 self._ExecuteAndWaitForMode(
214 'remoting.cancelShare();',
215 'HOST_SHARE_FINISHED', tab_index, windex),
216 msg='Stopping sharing from the host side failed')
217
218 def EnableConnectionsInstalled(self, pin_exercise=False, tab_index=1, windex=0 ):
219 """Enables the remote connections on the host side."""
220 subprocess.call([self.GetHelperRunner(), "chrome/test/pyautolib/chromoting_h elper.py", "enable"])
221
222 self.assertTrue(
223 self._ExecuteAndWaitForMode(
224 'document.getElementById("start-daemon").click();',
225 'HOST_SETUP_ASK_PIN', tab_index, windex),
226 msg='Cannot start host setup')
227 self.assertTrue(
228 self._WaitForJavascriptCondition(
229 'document.getElementById("ask-pin-form").hidden == false',
230 tab_index, windex),
231 msg='No ask pin dialog')
232
233 if pin_exercise:
234 # Cancels the pin prompt
235 self._ExecuteJavascript(
236 'document.getElementById("daemon-pin-cancel").click();',
237 tab_index, windex)
238
239 # Enables again
240 self.assertTrue(
241 self._ExecuteAndWaitForMode(
242 'document.getElementById("start-daemon").click();',
243 'HOST_SETUP_ASK_PIN', tab_index, windex),
244 msg='Cannot start host setup')
245
246 # Click ok without typing in pins
247 self._ExecuteJavascript(
248 'document.getElementById("daemon-pin-ok").click();',
249 tab_index, windex)
250 self.assertTrue(
251 self._WaitForJavascriptCondition(
252 'document.getElementById("daemon-pin-error-message")',
253 tab_index, windex),
254 msg='No pin error message')
255
256 # Mis-mtaching pins
simonmorris 2012/07/30 22:44:24 mtaching -> matching
yihongg1 2012/08/03 00:40:06 Done.
257 self._ExecuteJavascript(
258 'document.getElementById("daemon-pin-entry").value = "111111";',
259 tab_index, windex)
260 self._ExecuteJavascript(
261 'document.getElementById("daemon-pin-confirm").value = "123456";',
262 tab_index, windex)
263 self.assertTrue(
264 self._WaitForJavascriptCondition(
265 'document.getElementById("daemon-pin-error-message")',
266 tab_index, windex),
267 msg='No pin error message')
268
269 # Types in correct pins
270 self._ExecuteJavascript(
271 'document.getElementById("daemon-pin-entry").value = "111111";',
272 tab_index, windex)
273 self._ExecuteJavascript(
274 'document.getElementById("daemon-pin-confirm").value = "111111";',
275 tab_index, windex)
276 self.assertTrue(
277 self._ExecuteAndWaitForMode(
278 'document.getElementById("daemon-pin-ok").click();',
279 'HOST_SETUP_PROCESSING', tab_index, windex),
280 msg='Host setup was not started')
281
282 # Handles preference panes
283 self.assertTrue(
284 self._WaitForJavascriptCondition(
285 'remoting.currentMode == remoting.AppMode.HOST_SETUP_DONE',
286 tab_index, windex),
287 msg='Host setup was not done')
288
289 # Dismisses the host config done dialog
290 self.assertTrue(
291 self._WaitForJavascriptCondition(
292 'document.getElementById("host-setup-dialog").childNodes[5].hidden = = false',
293 tab_index, windex),
294 msg='No host setup done dialog')
295 self.assertTrue(
296 self._ExecuteAndWaitForMode(
297 'document.getElementById("host-config-done-dismiss").click();',
298 'HOME', tab_index, windex),
299 msg='Failed to dismiss host setup confirmation dialog')
300
301 def EnableConnectionsUninstalledAndCancel(self, tab_index=1, windex=0):
302 """Enables remote connections while host is not installed yet."""
303 self.assertTrue(
304 self._ExecuteAndWaitForMode(
305 'document.getElementById("start-daemon").click();',
306 'HOST_SETUP_INSTALL', tab_index, windex),
307 msg='Cannot start host install')
308 self.assertTrue(
309 self._ExecuteAndWaitForMode(
310 'document.getElementById("host-config-install-dismiss").click();',
311 'HOME', tab_index, windex),
312 msg='Failed to dismiss host install dialog')
313
314 def DisableConnections(self, tab_index=1, windex=0):
315 """Disables the remote connections on the host side."""
316 time.sleep(2)
317 subprocess.call([self.GetHelperRunner(), "chrome/test/pyautolib/chromoting_h elper.py", "disable"])
318
319 self._ExecuteJavascript(
320 'window.location.reload();',
321 tab_index, windex)
322 time.sleep(2)
323
324 self._ExecuteJavascript(
325 'document.getElementById("stop-daemon").click();',
326 tab_index, windex)
327 self.assertTrue(
328 self._ExecuteAndWaitForMode(
329 'document.getElementById("host-config-done-dismiss").click();',
330 'HOME', tab_index, windex),
331 msg='Failed to dismiss host setup confirmation dialog')
332
151 def Connect(self, access_code, tab_index=1, windex=0): 333 def Connect(self, access_code, tab_index=1, windex=0):
152 """Connects to a Chromoting host and starts the session. 334 """Connects to a Chromoting host and starts the session."""
153 335 self.assertTrue(
154 Returns: 336 self._ExecuteAndWaitForMode(
155 True on success; False otherwise. 337 'document.getElementById("access-code-entry").value = "%s";'
156 """ 338 'remoting.connectIt2Me();' % access_code,
157 return self._ExecuteAndWaitForMode( 339 'IN_SESSION', tab_index, windex),
158 'document.getElementById("access-code-entry").value = "%s";' 340 msg='Cannot connect it2me session')
159 'remoting.connectIt2Me();' % access_code, 341
160 'IN_SESSION', tab_index, windex) 342 def ChangePin(self, pin="222222", tab_index=1, windex=0):
161 343 """Changes pin for enabled host."""
162 def CancelShare(self, tab_index=1, windex=0): 344 subprocess.call([self.GetHelperRunner(), "chrome/test/pyautolib/chromoting_h elper.py", "changepin"])
163 """Stops sharing the desktop on the host side. 345
164 346 self.assertTrue(
165 Returns: 347 self._ExecuteAndWaitForMode(
166 True on success; False otherwise. 348 'document.getElementById("change-daemon-pin").click();',
167 """ 349 'HOST_SETUP_ASK_PIN', tab_index, windex),
168 return self._ExecuteAndWaitForMode( 350 msg='Cannot change daemon pin')
169 'remoting.cancelShare();', 351 self.assertTrue(
170 'HOST_SHARE_FINISHED', tab_index, windex) 352 self._WaitForJavascriptCondition(
353 'document.getElementById("ask-pin-form").hidden == false',
354 tab_index, windex),
355 msg='No ask pin dialog')
356
357 self._ExecuteJavascript(
358 'document.getElementById("daemon-pin-entry").value = "' + pin + '";',
359 tab_index, windex)
360 self._ExecuteJavascript(
361 'document.getElementById("daemon-pin-confirm").value = "' + pin + '";',
362 tab_index, windex)
363 self.assertTrue(
364 self._ExecuteAndWaitForMode(
365 'document.getElementById("daemon-pin-ok").click();',
366 'HOST_SETUP_PROCESSING', tab_index, windex),
367 msg='Host setup was not started')
368
369 # Handles preference panes
370 self.assertTrue(
371 self._WaitForJavascriptCondition(
372 'remoting.currentMode == remoting.AppMode.HOST_SETUP_DONE',
373 tab_index, windex),
374 msg='Host setup was not done')
375
376 # Dismisses the host config done dialog
377 self.assertTrue(
378 self._WaitForJavascriptCondition(
379 'document.getElementById("host-setup-dialog").childNodes[5].hidden = = false',
380 tab_index, windex),
381 msg='No host setup done dialog')
382 self.assertTrue(
383 self._ExecuteAndWaitForMode(
384 'document.getElementById("host-config-done-dismiss").click();',
385 'HOME', tab_index, windex),
386 msg='Failed to dismiss host setup confirmation dialog')
387
388 def ChangeName(self, new_name="Changed", tab_index=1, windex=0):
389 """Changes the host name."""
390 self._ExecuteJavascript(
391 'document.getElementById("this-host-rename").click();',
392 tab_index, windex)
393 self._ExecuteJavascript(
394 'document.getElementById("this-host-name").childNodes[0].value = "' + ne w_name + '";',
395 tab_index, windex)
396 self._ExecuteJavascript(
397 'document.getElementById("this-host-rename").click();',
398 tab_index, windex)
399
400 def ConnectMe2Me(self, pin="111111", mode="IN_SESSION", tab_index=1, windex=0) :
401 """Connects to a Chromoting host and starts the session."""
402 if sys.platform.startswith('win'):
403 time.sleep(10)
404 else:
405 time.sleep(2)
406 self._ExecuteJavascript(
407 'window.location.reload();',
408 tab_index, windex)
409 time.sleep(2)
410
411 self.assertTrue(
412 self._WaitForJavascriptCondition(
413 'document.getElementById("this-host-connect")',
414 tab_index, windex),
415 msg='This host did not appear')
416 self.assertTrue(
417 self._ExecuteAndWaitForMode(
418 'document.getElementById("this-host-name").click();',
419 'CLIENT_PIN_PROMPT', tab_index, windex),
420 msg='Client pin prompt did not show')
421 self._ExecuteJavascript(
422 'document.getElementById("pin-entry").value = "' + pin + '";',
423 tab_index, windex)
424 self.assertTrue(
425 self._ExecuteAndWaitForMode(
426 'document.getElementById("pin-form").childNodes[5].click();',
427 mode, tab_index, windex),
428 msg='Session was not started')
171 429
172 def Disconnect(self, tab_index=1, windex=0): 430 def Disconnect(self, tab_index=1, windex=0):
173 """Disconnects from the Chromoting session on the client side. 431 """Disconnects from the Chromoting it2me session on the client side."""
174 432 self.assertTrue(
175 Returns: 433 self._ExecuteAndWaitForMode(
176 True on success; False otherwise. 434 'remoting.disconnect();',
177 """ 435 'CLIENT_SESSION_FINISHED_IT2ME', tab_index, windex),
178 return self._ExecuteAndWaitForMode( 436 msg='Disconnecting it2me session from the client side failed')
179 'remoting.disconnect();', 437
180 'CLIENT_SESSION_FINISHED_IT2ME', tab_index, windex) 438 def DisconnectMe2Me(self, ok=True, tab_index=1, windex=0):
439 """Disconnects from the Chromoting me2me session on the client side."""
440 self.assertTrue(
441 self._ExecuteAndWaitForMode(
442 'remoting.disconnect();',
443 'CLIENT_SESSION_FINISHED_ME2ME', tab_index, windex),
444 msg='Disconnecting me2me session from the client side failed')
445
446 if ok:
447 self.assertTrue(
448 self._ExecuteAndWaitForMode(
449 'document.getElementById("client-finished-me2me-button").click();' ,
450 'HOME', tab_index, windex),
451 msg='Failed to dismiss session finished dialog')
452
453 def ReconnectMe2Me(self, pin="111111", tab_index=1, windex=0):
454 """Reconnects the me2me session."""
455 self._ExecuteJavascript(
456 'document.getElementById("client-reconnect-button").click();',
457 tab_index, windex)
458 time.sleep(2)
459 self._ExecuteJavascript(
460 'document.getElementById("pin-entry").value = "' + pin + '";',
461 tab_index, windex)
462 self.assertTrue(
463 self._ExecuteAndWaitForMode(
464 'document.getElementById("pin-form").childNodes[5].click();',
465 'IN_SESSION', tab_index, windex),
466 msg='Session was not started')
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698