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

Side by Side Diff: chrome/test/chromedriver/test/run_py_tests.py

Issue 1196663005: [chromedriver] When launching a Chrome App, automatically switch to the new window. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """End to end tests for ChromeDriver.""" 6 """End to end tests for ChromeDriver."""
7 7
8 import base64 8 import base64
9 import json 9 import json
10 import math 10 import math
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 driver = chromedriver.ChromeDriver(server_url, 230 driver = chromedriver.ChromeDriver(server_url,
231 chrome_binary=_CHROME_BINARY, 231 chrome_binary=_CHROME_BINARY,
232 android_package=android_package, 232 android_package=android_package,
233 android_activity=android_activity, 233 android_activity=android_activity,
234 android_process=android_process, 234 android_process=android_process,
235 download_dir=download_dir, 235 download_dir=download_dir,
236 **kwargs) 236 **kwargs)
237 self._drivers += [driver] 237 self._drivers += [driver]
238 return driver 238 return driver
239 239
240 def WaitForNewWindow(self, driver, old_handles):
241 """Wait for at least one new window to show up in 20 seconds.
242
243 Args:
244 old_handles: Handles to all old windows before the new window is added.
245
246 Returns:
247 Handle to a new window. None if timeout.
248 """
249 deadline = time.time() + 20
250 while time.time() < deadline:
251 new_handles = driver.GetWindowHandles()
252 if len(new_handles) > len(old_handles):
253 for index, old_handle in enumerate(old_handles):
254 self.assertEquals(old_handle, new_handles[index])
255 return new_handles[len(old_handles)]
256 time.sleep(0.01)
257 return None
258
240 259
241 class ChromeDriverTest(ChromeDriverBaseTest): 260 class ChromeDriverTest(ChromeDriverBaseTest):
242 """End to end tests for ChromeDriver.""" 261 """End to end tests for ChromeDriver."""
243 262
244 @staticmethod 263 @staticmethod
245 def GlobalSetUp(): 264 def GlobalSetUp():
246 ChromeDriverTest._http_server = webserver.WebServer( 265 ChromeDriverTest._http_server = webserver.WebServer(
247 chrome_paths.GetTestData()) 266 chrome_paths.GetTestData())
248 ChromeDriverTest._sync_server = webserver.SyncWebServer() 267 ChromeDriverTest._sync_server = webserver.SyncWebServer()
249 if _ANDROID_PACKAGE_KEY: 268 if _ANDROID_PACKAGE_KEY:
(...skipping 19 matching lines...) Expand all
269 288
270 def testStartStop(self): 289 def testStartStop(self):
271 pass 290 pass
272 291
273 def testLoadUrl(self): 292 def testLoadUrl(self):
274 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/empty.html')) 293 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/empty.html'))
275 294
276 def testGetCurrentWindowHandle(self): 295 def testGetCurrentWindowHandle(self):
277 self._driver.GetCurrentWindowHandle() 296 self._driver.GetCurrentWindowHandle()
278 297
279 def _WaitForNewWindow(self, old_handles):
280 """Wait for at least one new window to show up in 20 seconds.
281
282 Args:
283 old_handles: Handles to all old windows before the new window is added.
284
285 Returns:
286 Handle to a new window. None if timeout.
287 """
288 deadline = time.time() + 20
289 while time.time() < deadline:
290 new_handles = self._driver.GetWindowHandles()
291 if len(new_handles) > len(old_handles):
292 for index, old_handle in enumerate(old_handles):
293 self.assertEquals(old_handle, new_handles[index])
294 return new_handles[len(old_handles)]
295 time.sleep(0.01)
296 return None
297
298 def testCloseWindow(self): 298 def testCloseWindow(self):
299 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/page_test.html')) 299 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/page_test.html'))
300 old_handles = self._driver.GetWindowHandles() 300 old_handles = self._driver.GetWindowHandles()
301 self._driver.FindElement('id', 'link').Click() 301 self._driver.FindElement('id', 'link').Click()
302 new_window_handle = self._WaitForNewWindow(old_handles) 302 new_window_handle = self.WaitForNewWindow(driver, old_handles)
303 self.assertNotEqual(None, new_window_handle) 303 self.assertNotEqual(None, new_window_handle)
304 self._driver.SwitchToWindow(new_window_handle) 304 self._driver.SwitchToWindow(new_window_handle)
305 self.assertEquals(new_window_handle, self._driver.GetCurrentWindowHandle()) 305 self.assertEquals(new_window_handle, self._driver.GetCurrentWindowHandle())
306 self.assertRaises(chromedriver.NoSuchElement, 306 self.assertRaises(chromedriver.NoSuchElement,
307 self._driver.FindElement, 'id', 'link') 307 self._driver.FindElement, 'id', 'link')
308 self._driver.CloseWindow() 308 self._driver.CloseWindow()
309 self.assertRaises(chromedriver.NoSuchWindow, 309 self.assertRaises(chromedriver.NoSuchWindow,
310 self._driver.GetCurrentWindowHandle) 310 self._driver.GetCurrentWindowHandle)
311 new_handles = self._driver.GetWindowHandles() 311 new_handles = self._driver.GetWindowHandles()
312 for old_handle in old_handles: 312 for old_handle in old_handles:
313 self.assertTrue(old_handle in new_handles) 313 self.assertTrue(old_handle in new_handles)
314 for handle in new_handles: 314 for handle in new_handles:
315 self._driver.SwitchToWindow(handle) 315 self._driver.SwitchToWindow(handle)
316 self.assertEquals(handle, self._driver.GetCurrentWindowHandle()) 316 self.assertEquals(handle, self._driver.GetCurrentWindowHandle())
317 self._driver.CloseWindow() 317 self._driver.CloseWindow()
318 318
319 def testGetWindowHandles(self): 319 def testGetWindowHandles(self):
320 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/page_test.html')) 320 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/page_test.html'))
321 old_handles = self._driver.GetWindowHandles() 321 old_handles = self._driver.GetWindowHandles()
322 self._driver.FindElement('id', 'link').Click() 322 self._driver.FindElement('id', 'link').Click()
323 self.assertNotEqual(None, self._WaitForNewWindow(old_handles)) 323 self.assertNotEqual(None, WaitForNewWindow(driver, old_handles))
324 324
325 def testSwitchToWindow(self): 325 def testSwitchToWindow(self):
326 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/page_test.html')) 326 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/page_test.html'))
327 self.assertEquals( 327 self.assertEquals(
328 1, self._driver.ExecuteScript('window.name = "oldWindow"; return 1;')) 328 1, self._driver.ExecuteScript('window.name = "oldWindow"; return 1;'))
329 window1_handle = self._driver.GetCurrentWindowHandle() 329 window1_handle = self._driver.GetCurrentWindowHandle()
330 old_handles = self._driver.GetWindowHandles() 330 old_handles = self._driver.GetWindowHandles()
331 self._driver.FindElement('id', 'link').Click() 331 self._driver.FindElement('id', 'link').Click()
332 new_window_handle = self._WaitForNewWindow(old_handles) 332 new_window_handle = WaitForNewWindow(driver, old_handles)
333 self.assertNotEqual(None, new_window_handle) 333 self.assertNotEqual(None, new_window_handle)
334 self._driver.SwitchToWindow(new_window_handle) 334 self._driver.SwitchToWindow(new_window_handle)
335 self.assertEquals(new_window_handle, self._driver.GetCurrentWindowHandle()) 335 self.assertEquals(new_window_handle, self._driver.GetCurrentWindowHandle())
336 self.assertRaises(chromedriver.NoSuchElement, 336 self.assertRaises(chromedriver.NoSuchElement,
337 self._driver.FindElement, 'id', 'link') 337 self._driver.FindElement, 'id', 'link')
338 self._driver.SwitchToWindow('oldWindow') 338 self._driver.SwitchToWindow('oldWindow')
339 self.assertEquals(window1_handle, self._driver.GetCurrentWindowHandle()) 339 self.assertEquals(window1_handle, self._driver.GetCurrentWindowHandle())
340 340
341 def testEvaluateScript(self): 341 def testEvaluateScript(self):
342 self.assertEquals(1, self._driver.ExecuteScript('return 1')) 342 self.assertEquals(1, self._driver.ExecuteScript('return 1'))
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 '/newwindow', 637 '/newwindow',
638 """ 638 """
639 <html> 639 <html>
640 <body> 640 <body>
641 <a href='%s' target='_blank'>new window/tab</a> 641 <a href='%s' target='_blank'>new window/tab</a>
642 </body> 642 </body>
643 </html>""" % self._sync_server.GetUrl()) 643 </html>""" % self._sync_server.GetUrl())
644 self._driver.Load(self._http_server.GetUrl() + '/newwindow') 644 self._driver.Load(self._http_server.GetUrl() + '/newwindow')
645 old_windows = self._driver.GetWindowHandles() 645 old_windows = self._driver.GetWindowHandles()
646 self._driver.FindElement('tagName', 'a').Click() 646 self._driver.FindElement('tagName', 'a').Click()
647 new_window = self._WaitForNewWindow(old_windows) 647 new_window = self.WaitForNewWindow(driver, old_windows)
648 self.assertNotEqual(None, new_window) 648 self.assertNotEqual(None, new_window)
649 649
650 self.assertFalse(self._driver.IsLoading()) 650 self.assertFalse(self._driver.IsLoading())
651 self._driver.SwitchToWindow(new_window) 651 self._driver.SwitchToWindow(new_window)
652 self.assertTrue(self._driver.IsLoading()) 652 self.assertTrue(self._driver.IsLoading())
653 self._sync_server.RespondWithContent('<html>new window</html>') 653 self._sync_server.RespondWithContent('<html>new window</html>')
654 self._driver.ExecuteScript('return 1') # Shouldn't hang. 654 self._driver.ExecuteScript('return 1') # Shouldn't hang.
655 655
656 def testPopups(self): 656 def testPopups(self):
657 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/empty.html')) 657 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/empty.html'))
658 old_handles = self._driver.GetWindowHandles() 658 old_handles = self._driver.GetWindowHandles()
659 self._driver.ExecuteScript('window.open("about:blank")') 659 self._driver.ExecuteScript('window.open("about:blank")')
660 new_window_handle = self._WaitForNewWindow(old_handles) 660 new_window_handle = WaitForNewWindow(driver, old_handles)
661 self.assertNotEqual(None, new_window_handle) 661 self.assertNotEqual(None, new_window_handle)
662 662
663 def testNoSuchFrame(self): 663 def testNoSuchFrame(self):
664 self.assertRaises(chromedriver.NoSuchFrame, 664 self.assertRaises(chromedriver.NoSuchFrame,
665 self._driver.SwitchToFrame, 'nosuchframe') 665 self._driver.SwitchToFrame, 'nosuchframe')
666 self.assertRaises(chromedriver.NoSuchFrame, 666 self.assertRaises(chromedriver.NoSuchFrame,
667 self._driver.SwitchToFrame, 667 self._driver.SwitchToFrame,
668 self._driver.FindElement('tagName', 'body')) 668 self._driver.FindElement('tagName', 'body'))
669 669
670 def testWindowPosition(self): 670 def testWindowPosition(self):
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 self._driver.SwitchToFrame(frame) 1078 self._driver.SwitchToFrame(frame)
1079 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/inner.html')) 1079 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/inner.html'))
1080 self._driver.GoBack() 1080 self._driver.GoBack()
1081 p = self._driver.FindElement('tag name', 'p') 1081 p = self._driver.FindElement('tag name', 'p')
1082 self.assertEquals('Two', p.GetText()) 1082 self.assertEquals('Two', p.GetText())
1083 1083
1084 def testCanSwitchToPrintPreviewDialog(self): 1084 def testCanSwitchToPrintPreviewDialog(self):
1085 old_handles = self._driver.GetWindowHandles() 1085 old_handles = self._driver.GetWindowHandles()
1086 self.assertEquals(1, len(old_handles)) 1086 self.assertEquals(1, len(old_handles))
1087 self._driver.ExecuteScript('setTimeout(function(){window.print();}, 0);') 1087 self._driver.ExecuteScript('setTimeout(function(){window.print();}, 0);')
1088 new_window_handle = self._WaitForNewWindow(old_handles) 1088 new_window_handle = WaitForNewWindow(driver, old_handles)
1089 self.assertNotEqual(None, new_window_handle) 1089 self.assertNotEqual(None, new_window_handle)
1090 self._driver.SwitchToWindow(new_window_handle) 1090 self._driver.SwitchToWindow(new_window_handle)
1091 self.assertEquals('chrome://print/', self._driver.GetCurrentUrl()) 1091 self.assertEquals('chrome://print/', self._driver.GetCurrentUrl())
1092 1092
1093 1093
1094 class ChromeDriverAndroidTest(ChromeDriverBaseTest): 1094 class ChromeDriverAndroidTest(ChromeDriverBaseTest):
1095 """End to end tests for Android-specific tests.""" 1095 """End to end tests for Android-specific tests."""
1096 1096
1097 def testLatestAndroidAppInstalled(self): 1097 def testLatestAndroidAppInstalled(self):
1098 if ('stable' not in _ANDROID_PACKAGE_KEY and 1098 if ('stable' not in _ANDROID_PACKAGE_KEY and
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
1232 1232
1233 thread = threading.Thread(target=RunServer) 1233 thread = threading.Thread(target=RunServer)
1234 thread.daemon = True 1234 thread.daemon = True
1235 thread.start() 1235 thread.start()
1236 crx = os.path.join(_TEST_DATA_DIR, 'ext_slow_loader.crx') 1236 crx = os.path.join(_TEST_DATA_DIR, 'ext_slow_loader.crx')
1237 driver = self.CreateDriver( 1237 driver = self.CreateDriver(
1238 chrome_switches=['user-agent=' + server.GetUrl()], 1238 chrome_switches=['user-agent=' + server.GetUrl()],
1239 chrome_extensions=[self._PackExtension(crx)]) 1239 chrome_extensions=[self._PackExtension(crx)])
1240 self.assertTrue(did_load_event.is_set()) 1240 self.assertTrue(did_load_event.is_set())
1241 1241
1242 def testCanLaunchApp(self):
1243 app_path = os.path.join(_TEST_DATA_DIR, 'test_app')
1244 driver = self.CreateDriver(chrome_switches=['load-extension=%s' % app_path])
1245 old_handles = driver.GetWindowHandles()
1246 self.assertEqual(1, len(old_handles))
1247 driver.LaunchApp('gegjcdcfeiojglhifpmibkadodekakpc')
1248 new_window_handle = self.WaitForNewWindow(driver, old_handles)
1249 current_window_handle = driver.GetCurrentWindowHandle()
1250 self.assertEqual(new_window_handle, current_window_handle,
1251 "focus should switch to the window that the app launches in")
1252 body_element = driver.FindElement('tag name', 'body')
1253 self.assertEqual('It works!', body_element.GetText())
1254
1242 1255
1243 class ChromeLogPathCapabilityTest(ChromeDriverBaseTest): 1256 class ChromeLogPathCapabilityTest(ChromeDriverBaseTest):
1244 """Tests that chromedriver properly processes chromeOptions.logPath.""" 1257 """Tests that chromedriver properly processes chromeOptions.logPath."""
1245 1258
1246 LOG_MESSAGE = 'Welcome to ChromeLogPathCapabilityTest!' 1259 LOG_MESSAGE = 'Welcome to ChromeLogPathCapabilityTest!'
1247 1260
1248 def testChromeLogPath(self): 1261 def testChromeLogPath(self):
1249 """Checks that user can specify the path of the chrome log. 1262 """Checks that user can specify the path of the chrome log.
1250 1263
1251 Verifies that a log message is written into the specified log file. 1264 Verifies that a log message is written into the specified log file.
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
1613 1626
1614 all_tests_suite = unittest.defaultTestLoader.loadTestsFromModule( 1627 all_tests_suite = unittest.defaultTestLoader.loadTestsFromModule(
1615 sys.modules[__name__]) 1628 sys.modules[__name__])
1616 tests = unittest_util.FilterTestSuite(all_tests_suite, options.filter) 1629 tests = unittest_util.FilterTestSuite(all_tests_suite, options.filter)
1617 ChromeDriverTest.GlobalSetUp() 1630 ChromeDriverTest.GlobalSetUp()
1618 MobileEmulationCapabilityTest.GlobalSetUp() 1631 MobileEmulationCapabilityTest.GlobalSetUp()
1619 result = unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run(tests) 1632 result = unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run(tests)
1620 ChromeDriverTest.GlobalTearDown() 1633 ChromeDriverTest.GlobalTearDown()
1621 MobileEmulationCapabilityTest.GlobalTearDown() 1634 MobileEmulationCapabilityTest.GlobalTearDown()
1622 sys.exit(len(result.failures) + len(result.errors)) 1635 sys.exit(len(result.failures) + len(result.errors))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698