OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 | 2 |
3 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 3 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 """Tests for ChromeDriver. | 7 """Tests for ChromeDriver. |
8 | 8 |
9 If your test is testing a specific part of the WebDriver API, consider adding | 9 If your test is testing a specific part of the WebDriver API, consider adding |
10 it to the appropriate place in the WebDriver tree instead. | 10 it to the appropriate place in the WebDriver tree instead. |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 # Don't quote the ':' in drive letter ( say, C: ) on win. | 52 # Don't quote the ':' in drive letter ( say, C: ) on win. |
53 # Also, replace '\' with '/' as expected in a file:/// url. | 53 # Also, replace '\' with '/' as expected in a file:/// url. |
54 drive, rest = os.path.splitdrive(abs_path) | 54 drive, rest = os.path.splitdrive(abs_path) |
55 quoted_path = drive.upper() + urllib.quote((rest.replace('\\', '/'))) | 55 quoted_path = drive.upper() + urllib.quote((rest.replace('\\', '/'))) |
56 return 'file:///' + quoted_path | 56 return 'file:///' + quoted_path |
57 else: | 57 else: |
58 quoted_path = urllib.quote(abs_path) | 58 quoted_path = urllib.quote(abs_path) |
59 return 'file://' + quoted_path | 59 return 'file://' + quoted_path |
60 | 60 |
61 | 61 |
| 62 def IsWindows(): |
| 63 return sys.platform == 'cygwin' or sys.platform.startswith('win') |
| 64 |
| 65 |
| 66 def IsLinux(): |
| 67 return sys.platform.startswith('linux') |
| 68 |
| 69 |
| 70 def IsMac(): |
| 71 return sys.platform.startswith('darwin') |
| 72 |
| 73 |
62 class Request(urllib2.Request): | 74 class Request(urllib2.Request): |
63 """Extends urllib2.Request to support all HTTP request types.""" | 75 """Extends urllib2.Request to support all HTTP request types.""" |
64 | 76 |
65 def __init__(self, url, method=None, data=None): | 77 def __init__(self, url, method=None, data=None): |
66 """Initialise a new HTTP request. | 78 """Initialise a new HTTP request. |
67 | 79 |
68 Arguments: | 80 Arguments: |
69 url: The full URL to send the request to. | 81 url: The full URL to send the request to. |
70 method: The HTTP request method to use; defaults to 'GET'. | 82 method: The HTTP request method to use; defaults to 'GET'. |
71 data: The data to send with the request as a string. Defaults to | 83 data: The data to send with the request as a string. Defaults to |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 SendRequest(request_url, method='GET') | 193 SendRequest(request_url, method='GET') |
182 launcher.Kill() | 194 launcher.Kill() |
183 | 195 |
184 | 196 |
185 class NativeInputTest(unittest.TestCase): | 197 class NativeInputTest(unittest.TestCase): |
186 """Native input ChromeDriver tests.""" | 198 """Native input ChromeDriver tests.""" |
187 | 199 |
188 def setUp(self): | 200 def setUp(self): |
189 self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) | 201 self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
190 self._capabilities = DesiredCapabilities.CHROME | 202 self._capabilities = DesiredCapabilities.CHROME |
191 self._capabilities["chrome"] = { "nativeEvents" : True } | 203 self._capabilities['chrome.nativeEvents'] = True |
192 | 204 |
193 def tearDown(self): | 205 def tearDown(self): |
194 self._launcher.Kill() | 206 self._launcher.Kill() |
195 | 207 |
196 def testCanStartsWithNativeEvents(self): | 208 def testCanStartWithNativeEvents(self): |
197 driver = WebDriver(self._launcher.GetURL(), self._capabilities) | 209 driver = WebDriver(self._launcher.GetURL(), self._capabilities) |
198 self.assertTrue(driver.capabilities["chrome"].has_key("nativeEvents")) | 210 self.assertTrue(driver.capabilities.has_key('chrome.nativeEvents')) |
199 self.assertTrue(driver.capabilities["chrome"]["nativeEvents"]) | 211 self.assertTrue(driver.capabilities['chrome.nativeEvents']) |
200 | 212 |
201 # Flaky on windows. See crbug.com/80295. | 213 # Flaky on windows. See crbug.com/80295. |
202 def DISABLED_testSendKeysNative(self): | 214 def DISABLED_testSendKeysNative(self): |
203 driver = WebDriver(self._launcher.GetURL(), self._capabilities) | 215 driver = WebDriver(self._launcher.GetURL(), self._capabilities) |
204 driver.get(self._launcher.GetURL() + '/test_page.html') | 216 driver.get(self._launcher.GetURL() + '/test_page.html') |
205 # Find the text input. | 217 # Find the text input. |
206 q = driver.find_element_by_name("key_input_test") | 218 q = driver.find_element_by_name('key_input_test') |
207 # Send some keys. | 219 # Send some keys. |
208 q.send_keys("tokyo") | 220 q.send_keys('tokyo') |
209 #TODO(timothe): change to .text when beta 4 wrappers are out. | 221 self.assertEqual(q.text, 'tokyo') |
210 self.assertEqual(q.value, "tokyo") | |
211 | 222 |
212 # Needs to run on a machine with an IME installed. | 223 # Needs to run on a machine with an IME installed. |
213 def DISABLED_testSendKeysNativeProcessedByIME(self): | 224 def DISABLED_testSendKeysNativeProcessedByIME(self): |
214 driver = WebDriver(self._launcher.GetURL(), self.capabilities) | 225 driver = WebDriver(self._launcher.GetURL(), self.capabilities) |
215 driver.get(self._launcher.GetURL() + '/test_page.html') | 226 driver.get(self._launcher.GetURL() + '/test_page.html') |
216 q = driver.find_element_by_name("key_input_test") | 227 q = driver.find_element_by_name('key_input_test') |
217 # Send key combination to turn IME on. | 228 # Send key combination to turn IME on. |
218 q.send_keys(Keys.F7) | 229 q.send_keys(Keys.F7) |
219 q.send_keys("toukyou") | 230 q.send_keys('toukyou') |
220 # Now turning it off. | 231 # Now turning it off. |
221 q.send_keys(Keys.F7) | 232 q.send_keys(Keys.F7) |
222 self.assertEqual(q.value, "\xe6\x9d\xb1\xe4\xba\xac") | 233 self.assertEqual(q.value, "\xe6\x9d\xb1\xe4\xba\xac") |
223 | 234 |
224 | 235 |
225 class CommandLineOptionsTest(unittest.TestCase): | 236 class DesiredCapabilitiesTest(unittest.TestCase): |
226 """ Tests ability to add command line flags when startinfg chrome.""" | |
227 | 237 |
228 def setUp(self): | 238 def setUp(self): |
229 self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) | 239 self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
230 self._driver = None | |
231 | 240 |
232 def tearDown(self): | 241 def tearDown(self): |
233 self._driver.quit() | |
234 self._launcher.Kill() | 242 self._launcher.Kill() |
235 | 243 |
236 def sendFlag(self): | 244 def testCustomSwitches(self): |
237 flags = {"enable-file-cookie" : ""} | 245 switches = ['enable-file-cookie', 'homepage=about:memory'] |
238 args = {} | 246 capabilities = {'chrome.switches': switches} |
239 args.update(DesiredCapabilities.CHROME) | 247 |
240 args.update({"chrome" : {"customSwitches":flags}}) | 248 driver = WebDriver(self._launcher.GetURL(), capabilities) |
241 # make sure enable cookie is not already enabled | 249 url = driver.current_url |
242 self.__driver = WebDriver(self._launcher.GetURL(), | 250 self.assertTrue('memory' in url, |
243 DesiredCapabilities.CHROME) | 251 'URL does not contain with "memory":' + url) |
244 self.__driver.get("about:version") | 252 driver.get('about:version') |
245 s = self.__driver.get_page_source() | 253 self.assertNotEqual(-1, driver.page_source.find('enable-file-cookie')) |
246 self.assertEqual(-1, s.find("enable-file-cookie")) | 254 |
247 self.__driver.close() | 255 def testBinary(self): |
248 # relaunch with added flags | 256 binary_path = ChromeDriverLauncher.LocateExe() |
249 self.__driver = WebDriver(self._launcher.GetURL(), args) | 257 self.assertNotEquals(None, binary_path) |
250 self.__driver.get("about:version") | 258 if IsWindows(): |
251 s = self.__driver.get_page_source() | 259 chrome_name = 'chrome.exe' |
252 self.assertNotEqual(-1, s.find("enable-file-cookie")) | 260 elif IsMac(): |
| 261 chrome_name = 'Google Chrome.app/Contents/MacOS/Google Chrome' |
| 262 if not os.path.exists(os.path.join(binary_path, chrome_name)): |
| 263 chrome_name = 'Chromium.app/Contents/MacOS/Chromium' |
| 264 elif IsLinux(): |
| 265 chrome_name = 'chrome' |
| 266 else: |
| 267 self.fail('Unrecognized platform: ' + sys.platform) |
| 268 binary_path = os.path.join(os.path.dirname(binary_path), chrome_name) |
| 269 self.assertTrue(os.path.exists(binary_path), |
| 270 'Binary not found: ' + binary_path) |
| 271 capabilities = {'chrome.binary': binary_path} |
| 272 |
| 273 driver = WebDriver(self._launcher.GetURL(), capabilities) |
253 | 274 |
254 | 275 |
255 class CookieTest(unittest.TestCase): | 276 class CookieTest(unittest.TestCase): |
256 """Cookie test for the json webdriver protocol""" | 277 """Cookie test for the json webdriver protocol""" |
257 | 278 |
258 def setUp(self): | 279 def setUp(self): |
259 self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) | 280 self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
260 self._driver = WebDriver(self._launcher.GetURL(), | 281 self._driver = WebDriver(self._launcher.GetURL(), |
261 DesiredCapabilities.CHROME) | 282 DesiredCapabilities.CHROME) |
262 | 283 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 """Tests dealing with WebDriver sessions.""" | 334 """Tests dealing with WebDriver sessions.""" |
314 | 335 |
315 def setUp(self): | 336 def setUp(self): |
316 self._launcher = ChromeDriverLauncher() | 337 self._launcher = ChromeDriverLauncher() |
317 | 338 |
318 def tearDown(self): | 339 def tearDown(self): |
319 self._launcher.Kill() | 340 self._launcher.Kill() |
320 | 341 |
321 def testCreatingSessionShouldRedirectToCorrectURL(self): | 342 def testCreatingSessionShouldRedirectToCorrectURL(self): |
322 request_url = self._launcher.GetURL() + '/session' | 343 request_url = self._launcher.GetURL() + '/session' |
323 response = SendRequest(request_url, method='POST', data='{}') | 344 response = SendRequest(request_url, method='POST', |
| 345 data='{"desiredCapabilities": {}}') |
324 self.assertEquals(200, response.code) | 346 self.assertEquals(200, response.code) |
325 self.session_url = response.geturl() # TODO(jleyba): verify this URL? | 347 self.session_url = response.geturl() # TODO(jleyba): verify this URL? |
326 | 348 |
327 data = json.loads(response.read()) | 349 data = json.loads(response.read()) |
328 self.assertTrue(isinstance(data, dict)) | 350 self.assertTrue(isinstance(data, dict)) |
329 self.assertEquals(0, data['status']) | 351 self.assertEquals(0, data['status']) |
330 | 352 |
331 url_parts = urlparse.urlparse(self.session_url)[2].split('/') | 353 url_parts = urlparse.urlparse(self.session_url)[2].split('/') |
332 self.assertEquals(3, len(url_parts)) | 354 self.assertEquals(3, len(url_parts)) |
333 self.assertEquals('', url_parts[0]) | 355 self.assertEquals('', url_parts[0]) |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 """Tests that the server can be configured for a different URL base.""" | 453 """Tests that the server can be configured for a different URL base.""" |
432 | 454 |
433 def setUp(self): | 455 def setUp(self): |
434 self._launcher = ChromeDriverLauncher(url_base='/wd/hub') | 456 self._launcher = ChromeDriverLauncher(url_base='/wd/hub') |
435 | 457 |
436 def tearDown(self): | 458 def tearDown(self): |
437 self._launcher.Kill() | 459 self._launcher.Kill() |
438 | 460 |
439 def testCreatingSessionShouldRedirectToCorrectURL(self): | 461 def testCreatingSessionShouldRedirectToCorrectURL(self): |
440 request_url = self._launcher.GetURL() + '/session' | 462 request_url = self._launcher.GetURL() + '/session' |
441 response = SendRequest(request_url, method='POST', data='{}') | 463 response = SendRequest(request_url, method='POST', |
| 464 data='{"desiredCapabilities":{}}') |
442 self.assertEquals(200, response.code) | 465 self.assertEquals(200, response.code) |
443 self.session_url = response.geturl() # TODO(jleyba): verify this URL? | 466 self.session_url = response.geturl() # TODO(jleyba): verify this URL? |
444 | 467 |
445 data = json.loads(response.read()) | 468 data = json.loads(response.read()) |
446 self.assertTrue(isinstance(data, dict)) | 469 self.assertTrue(isinstance(data, dict)) |
447 self.assertEquals(0, data['status']) | 470 self.assertEquals(0, data['status']) |
448 | 471 |
449 url_parts = urlparse.urlparse(self.session_url)[2].split('/') | 472 url_parts = urlparse.urlparse(self.session_url)[2].split('/') |
450 self.assertEquals(5, len(url_parts)) | 473 self.assertEquals(5, len(url_parts)) |
451 self.assertEquals('', url_parts[0]) | 474 self.assertEquals('', url_parts[0]) |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
569 list_entry = driver.find_element_by_class_name('autofill-list-item') | 592 list_entry = driver.find_element_by_class_name('autofill-list-item') |
570 self.assertTrue(list_entry.is_displayed) | 593 self.assertTrue(list_entry.is_displayed) |
571 self.assertEqual(list_entry.text, | 594 self.assertEqual(list_entry.text, |
572 creditcard_data['CREDIT_CARD_NAME'], | 595 creditcard_data['CREDIT_CARD_NAME'], |
573 'Saved CC line item not same as what was entered.') | 596 'Saved CC line item not same as what was entered.') |
574 | 597 |
575 | 598 |
576 if __name__ == '__main__': | 599 if __name__ == '__main__': |
577 unittest.main(module='chromedriver_tests', | 600 unittest.main(module='chromedriver_tests', |
578 testRunner=GTestTextTestRunner(verbosity=1)) | 601 testRunner=GTestTextTestRunner(verbosity=1)) |
OLD | NEW |