| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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)) |
| OLD | NEW |