| 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 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 # https://bugs.chromium.org/p/chromedriver/issues/detail?id=1503 | 172 # https://bugs.chromium.org/p/chromedriver/issues/detail?id=1503 |
| 173 'ChromeDriverTest.testShadowDomHover', | 173 'ChromeDriverTest.testShadowDomHover', |
| 174 'ChromeDriverTest.testMouseMoveTo', | 174 'ChromeDriverTest.testMouseMoveTo', |
| 175 'ChromeDriverTest.testHoverOverElement', | 175 'ChromeDriverTest.testHoverOverElement', |
| 176 # https://bugs.chromium.org/p/chromedriver/issues/detail?id=1478 | 176 # https://bugs.chromium.org/p/chromedriver/issues/detail?id=1478 |
| 177 'ChromeDriverTest.testShouldHandleNewWindowLoadingProperly', | 177 'ChromeDriverTest.testShouldHandleNewWindowLoadingProperly', |
| 178 ] | 178 ] |
| 179 ) | 179 ) |
| 180 _ANDROID_NEGATIVE_FILTER['chromedriver_webview_shell'] = ( | 180 _ANDROID_NEGATIVE_FILTER['chromedriver_webview_shell'] = ( |
| 181 _ANDROID_NEGATIVE_FILTER['chrome'] + [ | 181 _ANDROID_NEGATIVE_FILTER['chrome'] + [ |
| 182 'PerformanceLoggerTest.testPerformanceLogger', | 182 'ChromeLoggingCapabilityTest.testPerformanceLogger', |
| 183 'ChromeDriverTest.testShadowDom*', | 183 'ChromeDriverTest.testShadowDom*', |
| 184 # WebView doesn't support emulating network conditions. | 184 # WebView doesn't support emulating network conditions. |
| 185 'ChromeDriverTest.testEmulateNetworkConditions', | 185 'ChromeDriverTest.testEmulateNetworkConditions', |
| 186 'ChromeDriverTest.testEmulateNetworkConditionsNameSpeed', | 186 'ChromeDriverTest.testEmulateNetworkConditionsNameSpeed', |
| 187 'ChromeDriverTest.testEmulateNetworkConditionsOffline', | 187 'ChromeDriverTest.testEmulateNetworkConditionsOffline', |
| 188 'ChromeDriverTest.testEmulateNetworkConditionsSpeed', | 188 'ChromeDriverTest.testEmulateNetworkConditionsSpeed', |
| 189 'ChromeDriverTest.testEmulateNetworkConditionsName', | 189 'ChromeDriverTest.testEmulateNetworkConditionsName', |
| 190 # The WebView shell that we test against (on KitKat) does not yet | 190 # The WebView shell that we test against (on KitKat) does not yet |
| 191 # support Synthetic Gesture DevTools commands. | 191 # support Synthetic Gesture DevTools commands. |
| 192 # TODO(samuong): reenable when it does. | 192 # TODO(samuong): reenable when it does. |
| (...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1034 def testEmulateNetworkConditionsOffline(self): | 1034 def testEmulateNetworkConditionsOffline(self): |
| 1035 # A workaround for crbug.com/177511; when setting offline, the throughputs | 1035 # A workaround for crbug.com/177511; when setting offline, the throughputs |
| 1036 # must be 0. | 1036 # must be 0. |
| 1037 self._driver.SetNetworkConditions(0, 0, 0, offline=True) | 1037 self._driver.SetNetworkConditions(0, 0, 0, offline=True) |
| 1038 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/page_test.html')) | 1038 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/page_test.html')) |
| 1039 # The "X is not available" title is set after the page load event fires, so | 1039 # The "X is not available" title is set after the page load event fires, so |
| 1040 # we have to explicitly wait for this to change. We can't rely on the | 1040 # we have to explicitly wait for this to change. We can't rely on the |
| 1041 # navigation tracker to block the call to Load() above. | 1041 # navigation tracker to block the call to Load() above. |
| 1042 self.WaitForCondition(lambda: 'is not available' in self._driver.GetTitle()) | 1042 self.WaitForCondition(lambda: 'is not available' in self._driver.GetTitle()) |
| 1043 | 1043 |
| 1044 def testSendCommand(self): |
| 1045 #Sends a custom command to the DevTools debugger |
| 1046 params = {} |
| 1047 res = self._driver.SendCommandAndGetResult('CSS.enable', params) |
| 1048 self.assertEqual({}, res) |
| 1049 |
| 1050 def testSendCommandNoParams(self): |
| 1051 #Sends a custom command to the DevTools debugger |
| 1052 self.assertRaisesRegexp( |
| 1053 chromedriver.UnknownError, "params not passed", |
| 1054 self._driver.SendCommandAndGetResult, 'CSS.enable', None) |
| 1055 |
| 1056 def testSendCommandAndGetResult(self): |
| 1057 #Sends a custom command to the DevTools debugger and gets the result |
| 1058 self._driver.Load(self.GetHttpUrlForFile('/chromedriver/page_test.html')) |
| 1059 params = {} |
| 1060 document = self._driver.SendCommandAndGetResult('DOM.getDocument', params) |
| 1061 self.assertTrue('root' in document) |
| 1062 |
| 1044 def testShadowDomFindElementWithSlashDeep(self): | 1063 def testShadowDomFindElementWithSlashDeep(self): |
| 1045 """Checks that chromedriver can find elements in a shadow DOM using /deep/ | 1064 """Checks that chromedriver can find elements in a shadow DOM using /deep/ |
| 1046 css selectors.""" | 1065 css selectors.""" |
| 1047 self._driver.Load(self.GetHttpUrlForFile( | 1066 self._driver.Load(self.GetHttpUrlForFile( |
| 1048 '/chromedriver/shadow_dom_test.html')) | 1067 '/chromedriver/shadow_dom_test.html')) |
| 1049 self.assertTrue(self._driver.FindElement("css", "* /deep/ #olderTextBox")) | 1068 self.assertTrue(self._driver.FindElement("css", "* /deep/ #olderTextBox")) |
| 1050 | 1069 |
| 1051 def testShadowDomFindChildElement(self): | 1070 def testShadowDomFindChildElement(self): |
| 1052 """Checks that chromedriver can find child elements from a shadow DOM | 1071 """Checks that chromedriver can find child elements from a shadow DOM |
| 1053 element.""" | 1072 element.""" |
| (...skipping 1120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2174 driver.Load( | 2193 driver.Load( |
| 2175 ChromeDriverTest._http_server.GetUrl() + '/chromedriver/empty.html') | 2194 ChromeDriverTest._http_server.GetUrl() + '/chromedriver/empty.html') |
| 2176 driver.AddCookie({'name': 'secret_code', 'value': 'bosco'}) | 2195 driver.AddCookie({'name': 'secret_code', 'value': 'bosco'}) |
| 2177 driver.Quit() | 2196 driver.Quit() |
| 2178 finally: | 2197 finally: |
| 2179 chromedriver_server.Kill() | 2198 chromedriver_server.Kill() |
| 2180 with open(tmp_log_path, 'r') as f: | 2199 with open(tmp_log_path, 'r') as f: |
| 2181 self.assertNotIn('bosco', f.read()) | 2200 self.assertNotIn('bosco', f.read()) |
| 2182 | 2201 |
| 2183 | 2202 |
| 2184 class PerformanceLoggerTest(ChromeDriverBaseTest): | 2203 class ChromeLoggingCapabilityTest(ChromeDriverBaseTest): |
| 2185 """Tests chromedriver tracing support and Inspector event collection.""" | 2204 """Tests chromedriver tracing support and Inspector event collection.""" |
| 2186 | 2205 |
| 2187 def testPerformanceLogger(self): | 2206 def testPerformanceLogger(self): |
| 2188 driver = self.CreateDriver( | 2207 driver = self.CreateDriver( |
| 2189 experimental_options={'perfLoggingPrefs': { | 2208 experimental_options={'perfLoggingPrefs': { |
| 2190 'traceCategories': 'webkit.console,blink.console' | 2209 'traceCategories': 'webkit.console,blink.console' |
| 2191 }}, logging_prefs={'performance':'ALL'}) | 2210 }}, logging_prefs={'performance':'ALL'}) |
| 2192 driver.Load( | 2211 driver.Load( |
| 2193 ChromeDriverTest._http_server.GetUrl() + '/chromedriver/empty.html') | 2212 ChromeDriverTest._http_server.GetUrl() + '/chromedriver/empty.html') |
| 2194 # Mark the timeline; later we will verify the marks appear in the trace. | 2213 # Mark the timeline; later we will verify the marks appear in the trace. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2211 cat = devtools_message['params'].get('cat', '') | 2230 cat = devtools_message['params'].get('cat', '') |
| 2212 # Depending on Chrome version, the events may occur for the webkit.console | 2231 # Depending on Chrome version, the events may occur for the webkit.console |
| 2213 # or blink.console category. They will only occur for one of them. | 2232 # or blink.console category. They will only occur for one of them. |
| 2214 if (cat == 'blink.console' or cat == 'webkit.console'): | 2233 if (cat == 'blink.console' or cat == 'webkit.console'): |
| 2215 self.assertTrue(devtools_message['params']['name'] == 'foobar') | 2234 self.assertTrue(devtools_message['params']['name'] == 'foobar') |
| 2216 marked_timeline_events.append(devtools_message) | 2235 marked_timeline_events.append(devtools_message) |
| 2217 self.assertEquals(2, len(marked_timeline_events)) | 2236 self.assertEquals(2, len(marked_timeline_events)) |
| 2218 self.assertEquals({'Network', 'Page', 'Tracing'}, | 2237 self.assertEquals({'Network', 'Page', 'Tracing'}, |
| 2219 set(seen_log_domains.keys())) | 2238 set(seen_log_domains.keys())) |
| 2220 | 2239 |
| 2240 def testDevToolsEventsLogger(self): |
| 2241 event = 'Page.loadEventFired' |
| 2242 driver = self.CreateDriver( |
| 2243 devtools_events_to_log=[event], logging_prefs={'devtools':'ALL'}) |
| 2244 driver.Load('about:blank') |
| 2245 logs = driver.GetLog('devtools') |
| 2246 print logs |
| 2247 for entry in logs: |
| 2248 devtools_message = json.loads(entry['message']) |
| 2249 method = devtools_message['method'] |
| 2250 self.assertTrue('params' in devtools_message) |
| 2251 self.assertEquals(event, method) |
| 2221 | 2252 |
| 2222 class SessionHandlingTest(ChromeDriverBaseTest): | 2253 class SessionHandlingTest(ChromeDriverBaseTest): |
| 2223 """Tests for session operations.""" | 2254 """Tests for session operations.""" |
| 2224 def testQuitASessionMoreThanOnce(self): | 2255 def testQuitASessionMoreThanOnce(self): |
| 2225 driver = self.CreateDriver() | 2256 driver = self.CreateDriver() |
| 2226 driver.Quit() | 2257 driver.Quit() |
| 2227 driver.Quit() | 2258 driver.Quit() |
| 2228 | 2259 |
| 2229 def testGetSessions(self): | 2260 def testGetSessions(self): |
| 2230 driver = self.CreateDriver() | 2261 driver = self.CreateDriver() |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2406 | 2437 |
| 2407 all_tests_suite = unittest.defaultTestLoader.loadTestsFromModule( | 2438 all_tests_suite = unittest.defaultTestLoader.loadTestsFromModule( |
| 2408 sys.modules[__name__]) | 2439 sys.modules[__name__]) |
| 2409 tests = unittest_util.FilterTestSuite(all_tests_suite, options.filter) | 2440 tests = unittest_util.FilterTestSuite(all_tests_suite, options.filter) |
| 2410 ChromeDriverTest.GlobalSetUp() | 2441 ChromeDriverTest.GlobalSetUp() |
| 2411 MobileEmulationCapabilityTest.GlobalSetUp() | 2442 MobileEmulationCapabilityTest.GlobalSetUp() |
| 2412 result = unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run(tests) | 2443 result = unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run(tests) |
| 2413 ChromeDriverTest.GlobalTearDown() | 2444 ChromeDriverTest.GlobalTearDown() |
| 2414 MobileEmulationCapabilityTest.GlobalTearDown() | 2445 MobileEmulationCapabilityTest.GlobalTearDown() |
| 2415 sys.exit(len(result.failures) + len(result.errors)) | 2446 sys.exit(len(result.failures) + len(result.errors)) |
| OLD | NEW |