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. |
11 """ | 11 """ |
12 | 12 |
13 import hashlib | 13 import hashlib |
14 import os | 14 import os |
15 import platform | 15 import platform |
16 import sys | 16 import sys |
17 import tempfile | |
17 import unittest | 18 import unittest |
18 import urllib | 19 import urllib |
19 import urllib2 | 20 import urllib2 |
20 import urlparse | 21 import urlparse |
21 | 22 |
22 from chromedriver_launcher import ChromeDriverLauncher | 23 from chromedriver_launcher import ChromeDriverLauncher |
23 import chromedriver_paths | 24 import chromedriver_paths |
24 from gtest_text_test_runner import GTestTextTestRunner | 25 from gtest_text_test_runner import GTestTextTestRunner |
25 | 26 |
26 sys.path += [chromedriver_paths.SRC_THIRD_PARTY] | 27 sys.path += [chromedriver_paths.SRC_THIRD_PARTY] |
27 sys.path += [chromedriver_paths.PYTHON_BINDINGS] | 28 sys.path += [chromedriver_paths.PYTHON_BINDINGS] |
28 | 29 |
29 try: | 30 try: |
30 import simplejson as json | 31 import simplejson as json |
31 except ImportError: | 32 except ImportError: |
32 import json | 33 import json |
33 | 34 |
35 from selenium.common.exceptions import WebDriverException | |
34 from selenium.webdriver.remote.command import Command | 36 from selenium.webdriver.remote.command import Command |
35 from selenium.webdriver.remote.webdriver import WebDriver | 37 from selenium.webdriver.remote.webdriver import WebDriver |
36 from selenium.webdriver.common.keys import Keys | 38 from selenium.webdriver.common.keys import Keys |
37 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities | 39 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities |
38 | 40 |
39 | 41 |
40 def DataDir(): | 42 def DataDir(): |
41 """Returns the path to the data dir chrome/test/data.""" | 43 """Returns the path to the data dir chrome/test/data.""" |
42 return os.path.normpath( | 44 return os.path.normpath( |
43 os.path.join(os.path.dirname(__file__), os.pardir, "data")) | 45 os.path.join(os.path.dirname(__file__), os.pardir, "data")) |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
171 self.assertEquals(9520, launcher.GetPort()) | 173 self.assertEquals(9520, launcher.GetPort()) |
172 driver = WebDriver(launcher.GetURL(), DesiredCapabilities.CHROME) | 174 driver = WebDriver(launcher.GetURL(), DesiredCapabilities.CHROME) |
173 driver.quit() | 175 driver.quit() |
174 launcher.Kill() | 176 launcher.Kill() |
175 | 177 |
176 | 178 |
177 class WebserverTest(unittest.TestCase): | 179 class WebserverTest(unittest.TestCase): |
178 """Tests the built-in ChromeDriver webserver.""" | 180 """Tests the built-in ChromeDriver webserver.""" |
179 | 181 |
180 def testShouldNotServeFilesByDefault(self): | 182 def testShouldNotServeFilesByDefault(self): |
181 launcher = ChromeDriverLauncher() | |
182 try: | 183 try: |
183 SendRequest(launcher.GetURL(), method='GET') | 184 SendRequest(launcher.GetURL(), method='GET') |
184 self.fail('Should have raised a urllib.HTTPError for returned 403') | 185 self.fail('Should have raised a urllib.HTTPError for returned 403') |
185 except urllib2.HTTPError, expected: | 186 except urllib2.HTTPError, expected: |
186 self.assertEquals(403, expected.code) | 187 self.assertEquals(403, expected.code) |
187 finally: | 188 finally: |
188 launcher.Kill() | 189 launcher.Kill() |
189 | 190 |
190 def testCanServeFiles(self): | 191 def testCanServeFiles(self): |
191 launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) | 192 launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
283 | 284 |
284 def tearDown(self): | 285 def tearDown(self): |
285 self._driver.quit() | 286 self._driver.quit() |
286 self._launcher.Kill() | 287 self._launcher.Kill() |
287 | 288 |
288 def testAddCookie(self): | 289 def testAddCookie(self): |
289 self._driver.get(self._launcher.GetURL() + '/test_page.html') | 290 self._driver.get(self._launcher.GetURL() + '/test_page.html') |
290 cookie_dict = None | 291 cookie_dict = None |
291 cookie_dict = self._driver.get_cookie("chromedriver_cookie_test") | 292 cookie_dict = self._driver.get_cookie("chromedriver_cookie_test") |
292 cookie_dict = {} | 293 cookie_dict = {} |
293 cookie_dict["name"]= "chromedriver_cookie_test" | 294 cookie_dict["name"] = "chromedriver_cookie_test" |
294 cookie_dict["value"] = "this is a test" | 295 cookie_dict["value"] = "this is a test" |
295 self._driver.add_cookie(cookie_dict) | 296 self._driver.add_cookie(cookie_dict) |
296 cookie_dict = self._driver.get_cookie("chromedriver_cookie_test") | 297 cookie_dict = self._driver.get_cookie("chromedriver_cookie_test") |
297 self.assertNotEqual(cookie_dict, None) | 298 self.assertNotEqual(cookie_dict, None) |
298 self.assertEqual(cookie_dict["value"], "this is a test") | 299 self.assertEqual(cookie_dict["value"], "this is a test") |
299 | 300 |
300 def testDeleteCookie(self): | 301 def testDeleteCookie(self): |
301 self.testAddCookie(); | 302 self.testAddCookie(); |
302 self._driver.delete_cookie("chromedriver_cookie_test") | 303 self._driver.delete_cookie("chromedriver_cookie_test") |
303 cookie_dict = self._driver.get_cookie("chromedriver_cookie_test") | 304 cookie_dict = self._driver.get_cookie("chromedriver_cookie_test") |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
614 'autofill-edit-credit-card-apply-button').click() | 615 'autofill-edit-credit-card-apply-button').click() |
615 # Refresh the page to ensure the UI is up-to-date. | 616 # Refresh the page to ensure the UI is up-to-date. |
616 driver.refresh() | 617 driver.refresh() |
617 list_entry = driver.find_element_by_class_name('autofill-list-item') | 618 list_entry = driver.find_element_by_class_name('autofill-list-item') |
618 self.assertTrue(list_entry.is_displayed) | 619 self.assertTrue(list_entry.is_displayed) |
619 self.assertEqual(list_entry.text, | 620 self.assertEqual(list_entry.text, |
620 creditcard_data['CREDIT_CARD_NAME'], | 621 creditcard_data['CREDIT_CARD_NAME'], |
621 'Saved CC line item not same as what was entered.') | 622 'Saved CC line item not same as what was entered.') |
622 | 623 |
623 | 624 |
625 class FileUploadControlTest(unittest.TestCase): | |
626 """Tests dealing with file upload control.""" | |
627 | |
628 def setUp(self): | |
629 self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) | |
630 self._driver = WebDriver(self._launcher.GetURL(), | |
631 DesiredCapabilities.CHROME) | |
632 | |
633 def tearDown(self): | |
634 self._driver.quit() | |
635 self._launcher.Kill() | |
636 | |
637 def testSetFilePathToFileUploadControl(self): | |
638 """Verify a file path is set to the file upload control.""" | |
639 self._driver.get(self._launcher.GetURL() + '/upload.html') | |
640 | |
641 file = tempfile.NamedTemporaryFile() | |
642 | |
643 fileupload_single = self._driver.find_element_by_name('fileupload_single') | |
644 multiple = fileupload_single.get_attribute('multiple') | |
645 self.assertEqual('false', multiple) | |
646 fileupload_single.send_keys(file.name) | |
647 path = fileupload_single.value | |
648 self.assertTrue(path.endswith(os.path.basename(file.name))) | |
649 | |
650 def testSetMultipleFilePathsToFileuploadControlWithoutMultipleWillFail(self): | |
651 """Verify setting file paths to the file upload control without 'multiple' | |
652 attribute will fail.""" | |
653 self._driver.get(self._launcher.GetURL() + '/upload.html') | |
654 | |
655 files = list() | |
kkania
2011/06/16 15:48:59
looks like this is never used; remove?
nodchip
2011/06/27 04:05:53
I think we need to hold file objects because the f
| |
656 filepaths = list() | |
kkania
2011/06/16 15:48:59
list() -> [], everywhere used
nodchip
2011/06/27 04:05:53
Done.
| |
657 for index in xrange(4): | |
658 file = tempfile.NamedTemporaryFile() | |
659 files.append(file) | |
660 filepath = file.name | |
661 filepaths.append(filepath) | |
662 | |
663 fileupload_single = self._driver.find_element_by_name('fileupload_single') | |
664 multiple = fileupload_single.get_attribute('multiple') | |
665 self.assertEqual('false', multiple) | |
666 self.assertRaises(WebDriverException, fileupload_single.send_keys, | |
667 filepaths[0], filepaths[1], filepaths[2], filepaths[3]) | |
668 path = fileupload_single.value | |
kkania
2011/06/16 15:48:59
value is supposed to be deprectated in the next re
nodchip
2011/06/27 04:05:53
Done.
| |
669 self.assertFalse(path) | |
670 | |
671 def testSetMultipleFilePathsToFileUploadControl(self): | |
672 """Verify multiple file paths are set to the file upload control.""" | |
673 self._driver.get(self._launcher.GetURL() + '/upload.html') | |
674 | |
675 files = list() | |
kkania
2011/06/16 15:48:59
looks like this is never used; remove?
nodchip
2011/06/27 04:05:53
Please see above.
| |
676 filepaths = list() | |
677 filenames = set() | |
678 for index in xrange(4): | |
679 file = tempfile.NamedTemporaryFile() | |
680 files.append(file) | |
681 filepath = file.name | |
682 filepaths.append(filepath) | |
683 filenames.add(os.path.basename(filepath)) | |
684 | |
685 fileupload_multi = self._driver.find_element_by_name('fileupload_multi') | |
686 multiple = fileupload_multi.get_attribute('multiple') | |
687 self.assertEqual('true', multiple) | |
688 fileupload_multi.send_keys(filepaths[0], filepaths[1], filepaths[2], | |
689 filepaths[3]) | |
690 path = fileupload_multi.value.replace('\\', '//') | |
kkania
2011/06/16 15:48:59
how about remove this and the next line (since it
nodchip
2011/06/27 04:05:53
Done.
| |
691 self.assertTrue(os.path.basename(path) in filenames) | |
692 | |
693 filesOnElement = self._driver.execute_script( | |
kkania
2011/06/16 15:48:59
files_on_element
nodchip
2011/06/27 04:05:53
Done.
| |
694 'return document.getElementById("fileupload_multi").files;') | |
695 self.assertTrue(filesOnElement) | |
696 self.assertEqual(4, len(filesOnElement)) | |
697 for f in filesOnElement: | |
698 name = f['name'] | |
699 self.assertTrue(name in filenames) | |
kkania
2011/06/16 15:48:59
remove name and use f['name'] directly
nodchip
2011/06/27 04:05:53
Done.
| |
700 | |
701 | |
624 if __name__ == '__main__': | 702 if __name__ == '__main__': |
625 unittest.main(module='chromedriver_tests', | 703 unittest.main(module='chromedriver_tests', |
626 testRunner=GTestTextTestRunner(verbosity=1)) | 704 testRunner=GTestTextTestRunner(verbosity=1)) |
OLD | NEW |