Index: chrome/test/webdriver/chromedriver_tests.py |
diff --git a/chrome/test/webdriver/chromedriver_tests.py b/chrome/test/webdriver/chromedriver_tests.py |
deleted file mode 100755 |
index 5cf704d55676a8ecdb4ecae027bf78e86cdb9c57..0000000000000000000000000000000000000000 |
--- a/chrome/test/webdriver/chromedriver_tests.py |
+++ /dev/null |
@@ -1,727 +0,0 @@ |
-#!/usr/bin/python |
- |
-# Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-"""Tests for ChromeDriver. |
- |
-If your test is testing a specific part of the WebDriver API, consider adding |
-it to the appropriate place in the WebDriver tree instead. |
-""" |
- |
-import hashlib |
-import os |
-import platform |
-import sys |
-import tempfile |
-import unittest |
-import urllib |
-import urllib2 |
-import urlparse |
- |
-from chromedriver_launcher import ChromeDriverLauncher |
-import chromedriver_paths |
-from gtest_text_test_runner import GTestTextTestRunner |
- |
-sys.path += [chromedriver_paths.SRC_THIRD_PARTY] |
-sys.path += [chromedriver_paths.PYTHON_BINDINGS] |
- |
-try: |
- import simplejson as json |
-except ImportError: |
- import json |
- |
-from selenium.common.exceptions import WebDriverException |
-from selenium.webdriver.remote.command import Command |
-from selenium.webdriver.remote.webdriver import WebDriver |
-from selenium.webdriver.common.keys import Keys |
-from selenium.webdriver.common.desired_capabilities import DesiredCapabilities |
- |
- |
-def DataDir(): |
- """Returns the path to the data dir chrome/test/data.""" |
- return os.path.normpath( |
- os.path.join(os.path.dirname(__file__), os.pardir, "data")) |
- |
- |
-def GetFileURLForPath(path): |
- """Get file:// url for the given path. |
- Also quotes the url using urllib.quote(). |
- """ |
- abs_path = os.path.abspath(path) |
- if sys.platform == 'win32': |
- # Don't quote the ':' in drive letter ( say, C: ) on win. |
- # Also, replace '\' with '/' as expected in a file:/// url. |
- drive, rest = os.path.splitdrive(abs_path) |
- quoted_path = drive.upper() + urllib.quote((rest.replace('\\', '/'))) |
- return 'file:///' + quoted_path |
- else: |
- quoted_path = urllib.quote(abs_path) |
- return 'file://' + quoted_path |
- |
- |
-def IsWindows(): |
- return sys.platform == 'cygwin' or sys.platform.startswith('win') |
- |
- |
-def IsLinux(): |
- return sys.platform.startswith('linux') |
- |
- |
-def IsMac(): |
- return sys.platform.startswith('darwin') |
- |
- |
-class Request(urllib2.Request): |
- """Extends urllib2.Request to support all HTTP request types.""" |
- |
- def __init__(self, url, method=None, data=None): |
- """Initialise a new HTTP request. |
- |
- Arguments: |
- url: The full URL to send the request to. |
- method: The HTTP request method to use; defaults to 'GET'. |
- data: The data to send with the request as a string. Defaults to |
- None and is ignored if |method| is not 'POST' or 'PUT'. |
- """ |
- if method is None: |
- method = data is not None and 'POST' or 'GET' |
- elif method not in ('POST', 'PUT'): |
- data = None |
- self.method = method |
- urllib2.Request.__init__(self, url, data=data) |
- |
- def get_method(self): |
- """Returns the HTTP method used by this request.""" |
- return self.method |
- |
- |
-def SendRequest(url, method=None, data=None): |
- """Sends a HTTP request to the WebDriver server. |
- |
- Return values and exceptions raised are the same as those of |
- |urllib2.urlopen|. |
- |
- Arguments: |
- url: The full URL to send the request to. |
- method: The HTTP request method to use; defaults to 'GET'. |
- data: The data to send with the request as a string. Defaults to |
- None and is ignored if |method| is not 'POST' or 'PUT'. |
- |
- Returns: |
- A file-like object. |
- """ |
- request = Request(url, method=method, data=data) |
- request.add_header('Accept', 'application/json') |
- opener = urllib2.build_opener(urllib2.HTTPRedirectHandler()) |
- return opener.open(request) |
- |
- |
-class BasicTest(unittest.TestCase): |
- """Basic ChromeDriver tests.""" |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher() |
- |
- def tearDown(self): |
- self._launcher.Kill() |
- |
- def testShouldReturn403WhenSentAnUnknownCommandURL(self): |
- request_url = self._launcher.GetURL() + '/foo' |
- try: |
- SendRequest(request_url, method='GET') |
- self.fail('Should have raised a urllib.HTTPError for returned 403') |
- except urllib2.HTTPError, expected: |
- self.assertEquals(403, expected.code) |
- |
- def testShouldReturnHTTP405WhenSendingANonPostToTheSessionURL(self): |
- request_url = self._launcher.GetURL() + '/session' |
- try: |
- SendRequest(request_url, method='GET') |
- self.fail('Should have raised a urllib.HTTPError for returned 405') |
- except urllib2.HTTPError, expected: |
- self.assertEquals(405, expected.code) |
- self.assertEquals('POST', expected.hdrs['Allow']) |
- |
- def testShouldGetA404WhenAttemptingToDeleteAnUnknownSession(self): |
- request_url = self._launcher.GetURL() + '/session/unkown_session_id' |
- try: |
- SendRequest(request_url, method='DELETE') |
- self.fail('Should have raised a urllib.HTTPError for returned 404') |
- except urllib2.HTTPError, expected: |
- self.assertEquals(404, expected.code) |
- |
- def testShouldReturn204ForFaviconRequests(self): |
- request_url = self._launcher.GetURL() + '/favicon.ico' |
- # In python2.5, a 204 status code causes an exception. |
- if sys.version_info[0:2] == (2, 5): |
- try: |
- SendRequest(request_url, method='GET') |
- self.fail('Should have raised a urllib.HTTPError for returned 204') |
- except urllib2.HTTPError, expected: |
- self.assertEquals(204, expected.code) |
- else: |
- response = SendRequest(request_url, method='GET') |
- try: |
- self.assertEquals(204, response.code) |
- finally: |
- response.close() |
- |
- def testCanStartChromeDriverOnSpecificPort(self): |
- launcher = ChromeDriverLauncher(port=9520) |
- self.assertEquals(9520, launcher.GetPort()) |
- driver = WebDriver(launcher.GetURL(), DesiredCapabilities.CHROME) |
- driver.quit() |
- launcher.Kill() |
- |
- |
-class WebserverTest(unittest.TestCase): |
- """Tests the built-in ChromeDriver webserver.""" |
- |
- def testShouldNotServeFilesByDefault(self): |
- launcher = ChromeDriverLauncher() |
- try: |
- SendRequest(launcher.GetURL(), method='GET') |
- self.fail('Should have raised a urllib.HTTPError for returned 403') |
- except urllib2.HTTPError, expected: |
- self.assertEquals(403, expected.code) |
- finally: |
- launcher.Kill() |
- |
- def testCanServeFiles(self): |
- launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
- request_url = launcher.GetURL() + '/' + os.path.basename(__file__) |
- SendRequest(request_url, method='GET') |
- launcher.Kill() |
- |
- |
-class NativeInputTest(unittest.TestCase): |
- """Native input ChromeDriver tests.""" |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
- self._capabilities = DesiredCapabilities.CHROME |
- self._capabilities['chrome.nativeEvents'] = True |
- |
- def tearDown(self): |
- self._launcher.Kill() |
- |
- def testCanStartWithNativeEvents(self): |
- driver = WebDriver(self._launcher.GetURL(), self._capabilities) |
- self.assertTrue(driver.capabilities.has_key('chrome.nativeEvents')) |
- self.assertTrue(driver.capabilities['chrome.nativeEvents']) |
- |
- # Flaky on windows. See crbug.com/80295. |
- def DISABLED_testSendKeysNative(self): |
- driver = WebDriver(self._launcher.GetURL(), self._capabilities) |
- driver.get(self._launcher.GetURL() + '/test_page.html') |
- # Find the text input. |
- q = driver.find_element_by_name('key_input_test') |
- # Send some keys. |
- q.send_keys('tokyo') |
- self.assertEqual(q.text, 'tokyo') |
- |
- # Needs to run on a machine with an IME installed. |
- def DISABLED_testSendKeysNativeProcessedByIME(self): |
- driver = WebDriver(self._launcher.GetURL(), self.capabilities) |
- driver.get(self._launcher.GetURL() + '/test_page.html') |
- q = driver.find_element_by_name('key_input_test') |
- # Send key combination to turn IME on. |
- q.send_keys(Keys.F7) |
- q.send_keys('toukyou') |
- # Now turning it off. |
- q.send_keys(Keys.F7) |
- self.assertEqual(q.value, "\xe6\x9d\xb1\xe4\xba\xac") |
- |
- |
-class DesiredCapabilitiesTest(unittest.TestCase): |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
- |
- def tearDown(self): |
- self._launcher.Kill() |
- |
- def testCustomSwitches(self): |
- switches = ['enable-file-cookie', 'homepage=about:memory'] |
- capabilities = {'chrome.switches': switches} |
- |
- driver = WebDriver(self._launcher.GetURL(), capabilities) |
- url = driver.current_url |
- self.assertTrue('memory' in url, |
- 'URL does not contain with "memory":' + url) |
- driver.get('about:version') |
- self.assertNotEqual(-1, driver.page_source.find('enable-file-cookie')) |
- |
- def testBinary(self): |
- binary_path = ChromeDriverLauncher.LocateExe() |
- self.assertNotEquals(None, binary_path) |
- if IsWindows(): |
- chrome_name = 'chrome.exe' |
- elif IsMac(): |
- chrome_name = 'Google Chrome.app/Contents/MacOS/Google Chrome' |
- if not os.path.exists(os.path.join(binary_path, chrome_name)): |
- chrome_name = 'Chromium.app/Contents/MacOS/Chromium' |
- elif IsLinux(): |
- chrome_name = 'chrome' |
- else: |
- self.fail('Unrecognized platform: ' + sys.platform) |
- binary_path = os.path.join(os.path.dirname(binary_path), chrome_name) |
- self.assertTrue(os.path.exists(binary_path), |
- 'Binary not found: ' + binary_path) |
- capabilities = {'chrome.binary': binary_path} |
- |
- driver = WebDriver(self._launcher.GetURL(), capabilities) |
- |
- |
-class CookieTest(unittest.TestCase): |
- """Cookie test for the json webdriver protocol""" |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
- self._driver = WebDriver(self._launcher.GetURL(), |
- DesiredCapabilities.CHROME) |
- |
- def tearDown(self): |
- self._driver.quit() |
- self._launcher.Kill() |
- |
- def testAddCookie(self): |
- self._driver.get(self._launcher.GetURL() + '/test_page.html') |
- cookie_dict = None |
- cookie_dict = self._driver.get_cookie("chromedriver_cookie_test") |
- cookie_dict = {} |
- cookie_dict["name"] = "chromedriver_cookie_test" |
- cookie_dict["value"] = "this is a test" |
- self._driver.add_cookie(cookie_dict) |
- cookie_dict = self._driver.get_cookie("chromedriver_cookie_test") |
- self.assertNotEqual(cookie_dict, None) |
- self.assertEqual(cookie_dict["value"], "this is a test") |
- |
- def testDeleteCookie(self): |
- self.testAddCookie(); |
- self._driver.delete_cookie("chromedriver_cookie_test") |
- cookie_dict = self._driver.get_cookie("chromedriver_cookie_test") |
- self.assertEqual(cookie_dict, None) |
- |
- |
-class ScreenshotTest(unittest.TestCase): |
- """Tests to verify screenshot retrieval""" |
- |
- REDBOX = "automation_proxy_snapshot/set_size.html" |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher() |
- self._driver = WebDriver(self._launcher.GetURL(), {}) |
- |
- def tearDown(self): |
- self._driver.quit() |
- self._launcher.Kill() |
- |
- def testScreenCaptureAgainstReference(self): |
- # Create a red square of 2000x2000 pixels. |
- url = GetFileURLForPath(os.path.join(DataDir(), |
- self.REDBOX)) |
- url += "?2000,2000" |
- self._driver.get(url) |
- s = self._driver.get_screenshot_as_base64(); |
- self._driver.get_screenshot_as_file("/tmp/foo.png") |
- h = hashlib.md5(s).hexdigest() |
- # Compare the PNG created to the reference hash. |
- self.assertEquals(h, '12c0ade27e3875da3d8866f52d2fa84f') |
- |
- |
-class SessionTest(unittest.TestCase): |
- """Tests dealing with WebDriver sessions.""" |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher() |
- |
- def tearDown(self): |
- self._launcher.Kill() |
- |
- def testCreatingSessionShouldRedirectToCorrectURL(self): |
- request_url = self._launcher.GetURL() + '/session' |
- response = SendRequest(request_url, method='POST', |
- data='{"desiredCapabilities": {}}') |
- self.assertEquals(200, response.code) |
- self.session_url = response.geturl() # TODO(jleyba): verify this URL? |
- |
- data = json.loads(response.read()) |
- self.assertTrue(isinstance(data, dict)) |
- self.assertEquals(0, data['status']) |
- |
- url_parts = urlparse.urlparse(self.session_url)[2].split('/') |
- self.assertEquals(3, len(url_parts)) |
- self.assertEquals('', url_parts[0]) |
- self.assertEquals('session', url_parts[1]) |
- self.assertEquals(data['sessionId'], url_parts[2]) |
- |
- def testShouldBeGivenCapabilitiesWhenStartingASession(self): |
- driver = WebDriver(self._launcher.GetURL(), {}) |
- capabilities = driver.capabilities |
- |
- self.assertEquals('chrome', capabilities['browserName']) |
- self.assertTrue(capabilities['javascriptEnabled']) |
- self.assertTrue(capabilities['takesScreenshot']) |
- self.assertTrue(capabilities['cssSelectorsEnabled']) |
- |
- # Value depends on what version the server is starting. |
- self.assertTrue('version' in capabilities) |
- self.assertTrue( |
- isinstance(capabilities['version'], unicode), |
- 'Expected a %s, but was %s' % (unicode, |
- type(capabilities['version']))) |
- |
- system = platform.system() |
- if system == 'Linux': |
- self.assertEquals('linux', capabilities['platform'].lower()) |
- elif system == 'Windows': |
- self.assertEquals('windows', capabilities['platform'].lower()) |
- elif system == 'Darwin': |
- self.assertEquals('mac', capabilities['platform'].lower()) |
- else: |
- # No python on ChromeOS, so we won't have a platform value, but |
- # the server will know and return the value accordingly. |
- self.assertEquals('chromeos', capabilities['platform'].lower()) |
- driver.quit() |
- |
- def testSessionCreationDeletion(self): |
- driver = WebDriver(self._launcher.GetURL(), DesiredCapabilities.CHROME) |
- driver.quit() |
- |
- def testMultipleSessionCreationDeletion(self): |
- for i in range(10): |
- driver = WebDriver(self._launcher.GetURL(), DesiredCapabilities.CHROME) |
- driver.quit() |
- |
- def testSessionCommandsAfterSessionDeletionReturn404(self): |
- driver = WebDriver(self._launcher.GetURL(), DesiredCapabilities.CHROME) |
- session_id = driver.session_id |
- driver.quit() |
- try: |
- response = SendRequest(self._launcher.GetURL() + '/session/' + session_id, |
- method='GET') |
- self.fail('Should have thrown 404 exception') |
- except urllib2.HTTPError, expected: |
- self.assertEquals(404, expected.code) |
- |
- def testMultipleConcurrentSessions(self): |
- drivers = [] |
- for i in range(10): |
- drivers += [WebDriver(self._launcher.GetURL(), |
- DesiredCapabilities.CHROME)] |
- for driver in drivers: |
- driver.quit() |
- |
- |
-class MouseTest(unittest.TestCase): |
- """Mouse command tests for the json webdriver protocol""" |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
- self._driver = WebDriver(self._launcher.GetURL(), |
- DesiredCapabilities.CHROME) |
- |
- def tearDown(self): |
- self._driver.quit() |
- self._launcher.Kill() |
- |
- def testClickElementThatNeedsContainerScrolling(self): |
- self._driver.get(self._launcher.GetURL() + '/test_page.html') |
- self._driver.find_element_by_name('hidden_scroll').click() |
- self.assertTrue(self._driver.execute_script('return window.success')) |
- |
- def testClickElementThatNeedsIframeScrolling(self): |
- self._driver.get(self._launcher.GetURL() + '/test_page.html') |
- self._driver.switch_to_frame('iframe') |
- self._driver.find_element_by_name('hidden_scroll').click() |
- self.assertTrue(self._driver.execute_script('return window.success')) |
- |
- def testClickElementThatNeedsPageScrolling(self): |
- self._driver.get(self._launcher.GetURL() + '/test_page.html') |
- self._driver.find_element_by_name('far_away').click() |
- self.assertTrue(self._driver.execute_script('return window.success')) |
- |
- # TODO(kkania): Move this test to the webdriver repo. |
- def testClickDoesSelectOption(self): |
- self._driver.get(self._launcher.GetURL() + '/test_page.html') |
- option = self._driver.find_element_by_name('option') |
- self.assertFalse(option.is_selected()) |
- option.click() |
- self.assertTrue(option.is_selected()) |
- |
- def testClickDoesUseFirstClientRect(self): |
- self._driver.get(self._launcher.GetURL() + '/test_page.html') |
- self._driver.find_element_by_name('wrapped').click() |
- self.assertTrue(self._driver.execute_script('return window.success')) |
- |
- |
-class TypingTest(unittest.TestCase): |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
- self._driver = WebDriver(self._launcher.GetURL(), {}) |
- self._driver.get(self._launcher.GetURL() + '/test_page.html') |
- |
- def tearDown(self): |
- self._driver.quit() |
- self._launcher.Kill() |
- |
- # See http://crbug.com/85243. |
- def testCanSendKeysToDescendantOfEditingHost(self): |
- self._driver.find_element_by_name('editable_child').send_keys('moo') |
- text = self._driver.find_element_by_name('editable').text |
- self.assertEquals('mooeditable', text) |
- |
- |
-class UrlBaseTest(unittest.TestCase): |
- """Tests that the server can be configured for a different URL base.""" |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher(url_base='/wd/hub') |
- |
- def tearDown(self): |
- self._launcher.Kill() |
- |
- def testCreatingSessionShouldRedirectToCorrectURL(self): |
- request_url = self._launcher.GetURL() + '/session' |
- response = SendRequest(request_url, method='POST', |
- data='{"desiredCapabilities":{}}') |
- self.assertEquals(200, response.code) |
- self.session_url = response.geturl() # TODO(jleyba): verify this URL? |
- |
- data = json.loads(response.read()) |
- self.assertTrue(isinstance(data, dict)) |
- self.assertEquals(0, data['status']) |
- |
- url_parts = urlparse.urlparse(self.session_url)[2].split('/') |
- self.assertEquals(5, len(url_parts)) |
- self.assertEquals('', url_parts[0]) |
- self.assertEquals('wd', url_parts[1]) |
- self.assertEquals('hub', url_parts[2]) |
- self.assertEquals('session', url_parts[3]) |
- self.assertEquals(data['sessionId'], url_parts[4]) |
- |
- |
-# TODO(jleyba): Port this to WebDriver's own python test suite. |
-class ElementEqualityTest(unittest.TestCase): |
- """Tests that the server properly checks element equality.""" |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
- self._driver = WebDriver(self._launcher.GetURL(), {}) |
- |
- def tearDown(self): |
- self._driver.quit() |
- self._launcher.Kill() |
- |
- def testElementEquality(self): |
- self._driver.get(self._launcher.GetURL() + '/test_page.html') |
- body1 = self._driver.find_element_by_tag_name('body') |
- body2 = self._driver.execute_script('return document.body') |
- |
- # TODO(jleyba): WebDriver's python bindings should expose a proper API |
- # for this. |
- result = body1._execute(Command.ELEMENT_EQUALS, { |
- 'other': body2.id |
- }) |
- self.assertTrue(result['value']) |
- |
- |
-class LoggingTest(unittest.TestCase): |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
- |
- def tearDown(self): |
- self._launcher.Kill() |
- |
- def testNoVerboseLogging(self): |
- self._driver = WebDriver(self._launcher.GetURL(), {}) |
- self._driver.execute_script('console.log("HI")') |
- request_url = self._launcher.GetURL() + '/log' |
- req = SendRequest(request_url, method='GET') |
- log = req.read() |
- self.assertTrue(':INFO:' not in log, ':INFO: in log: ' + log) |
- |
- def testVerboseLogging(self): |
- self._driver = WebDriver(self._launcher.GetURL(), {'chrome.verbose': True}) |
- self._driver.execute_script('console.log("HI")') |
- request_url = self._launcher.GetURL() + '/log' |
- req = SendRequest(request_url, method='GET') |
- log = req.read() |
- self.assertTrue(':INFO:' in log, ':INFO: not in log: ' + log) |
- |
- |
-"""Chrome functional test section. All implementation tests of ChromeDriver |
-should go above. |
- |
-TODO(dyu): Move these tests out of here when pyauto has these capabilities. |
-""" |
- |
- |
-def GetPathForDataFile(relative_path): |
- """Returns the path for a test data file residing in this directory.""" |
- return os.path.join(os.path.dirname(__file__), relative_path) |
- |
- |
-class AutofillTest(unittest.TestCase): |
- AUTOFILL_EDIT_ADDRESS = 'chrome://settings/autofillEditAddress' |
- AUTOFILL_EDIT_CC = 'chrome://settings/autofillEditCreditCard' |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher() |
- |
- def tearDown(self): |
- self._launcher.Kill() |
- |
- def NewDriver(self): |
- return WebDriver(self._launcher.GetURL(), {}) |
- |
- def _SelectOptionXpath(self, value): |
- """Returns an xpath query used to select an item from a dropdown list. |
- |
- Args: |
- value: Option selected for the drop-down list field. |
- """ |
- return '//option[@value="%s"]' % value |
- |
- def testPostalCodeAndStateLabelsBasedOnCountry(self): |
- """Verify postal code and state labels based on selected country.""" |
- import simplejson |
- test_data = simplejson.loads( |
- open(GetPathForDataFile('state_zip_labels.txt')).read()) |
- |
- driver = self.NewDriver() |
- driver.get(self.AUTOFILL_EDIT_ADDRESS) |
- # Initial check of State and ZIP labels. |
- state_label = driver.find_element_by_id('state-label').text |
- self.assertEqual('State', state_label) |
- zip_label = driver.find_element_by_id('postal-code-label').text |
- self.assertEqual('ZIP code', zip_label) |
- |
- for country_code in test_data: |
- query = self._SelectOptionXpath(country_code) |
- driver.find_element_by_id('country').find_element_by_xpath(query).select() |
- # Compare postal labels. |
- actual_postal_label = driver.find_element_by_id( |
- 'postal-code-label').text |
- expected_postal_label = test_data[country_code]['postalCodeLabel'] |
- self.assertEqual( |
- actual_postal_label, expected_postal_label, |
- 'Postal code label does not match Country "%s"' % country_code) |
- # Compare state labels. |
- actual_state_label = driver.find_element_by_id('state-label').text |
- expected_state_label = test_data[country_code]['stateLabel'] |
- self.assertEqual( |
- actual_state_label, expected_state_label, |
- 'State label does not match Country "%s"' % country_code) |
- |
- def testDisplayLineItemForEntriesWithNoCCNum(self): |
- """Verify Autofill creates a line item for CC entries with no CC number.""" |
- creditcard_data = {'CREDIT_CARD_NAME': 'Jane Doe', |
- 'CREDIT_CARD_EXP_MONTH': '12', |
- 'CREDIT_CARD_EXP_4_DIGIT_YEAR': '2014'} |
- |
- driver = self.NewDriver() |
- driver.get(self.AUTOFILL_EDIT_CC) |
- driver.find_element_by_id('name-on-card').send_keys( |
- creditcard_data['CREDIT_CARD_NAME']) |
- query_month = self._SelectOptionXpath( |
- creditcard_data['CREDIT_CARD_EXP_MONTH']) |
- query_year = self._SelectOptionXpath( |
- creditcard_data['CREDIT_CARD_EXP_4_DIGIT_YEAR']) |
- driver.find_element_by_id('expiration-month').find_element_by_xpath( |
- query_month).select() |
- driver.find_element_by_id('expiration-year').find_element_by_xpath( |
- query_year).select() |
- driver.find_element_by_id( |
- 'autofill-edit-credit-card-apply-button').click() |
- # Refresh the page to ensure the UI is up-to-date. |
- driver.refresh() |
- list_entry = driver.find_element_by_class_name('autofill-list-item') |
- self.assertTrue(list_entry.is_displayed) |
- self.assertEqual(list_entry.text, |
- creditcard_data['CREDIT_CARD_NAME'], |
- 'Saved CC line item not same as what was entered.') |
- |
- |
-class FileUploadControlTest(unittest.TestCase): |
- """Tests dealing with file upload control.""" |
- |
- def setUp(self): |
- self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__)) |
- self._driver = WebDriver(self._launcher.GetURL(), |
- DesiredCapabilities.CHROME) |
- |
- def tearDown(self): |
- self._driver.quit() |
- self._launcher.Kill() |
- |
- def testSetFilePathToFileUploadControl(self): |
- """Verify a file path is set to the file upload control.""" |
- self._driver.get(self._launcher.GetURL() + '/upload.html') |
- |
- file = tempfile.NamedTemporaryFile() |
- |
- fileupload_single = self._driver.find_element_by_name('fileupload_single') |
- multiple = fileupload_single.get_attribute('multiple') |
- self.assertEqual('false', multiple) |
- fileupload_single.send_keys(file.name) |
- path = fileupload_single.value |
- self.assertTrue(path.endswith(os.path.basename(file.name))) |
- |
- def testSetMultipleFilePathsToFileuploadControlWithoutMultipleWillFail(self): |
- """Verify setting file paths to the file upload control without 'multiple' |
- attribute will fail.""" |
- self._driver.get(self._launcher.GetURL() + '/upload.html') |
- |
- files = [] |
- filepaths = [] |
- for index in xrange(4): |
- file = tempfile.NamedTemporaryFile() |
- # We need to hold the file objects because the files will be deleted on |
- # GC. |
- files.append(file) |
- filepath = file.name |
- filepaths.append(filepath) |
- |
- fileupload_single = self._driver.find_element_by_name('fileupload_single') |
- multiple = fileupload_single.get_attribute('multiple') |
- self.assertEqual('false', multiple) |
- self.assertRaises(WebDriverException, fileupload_single.send_keys, |
- filepaths[0], filepaths[1], filepaths[2], filepaths[3]) |
- |
- def testSetMultipleFilePathsToFileUploadControl(self): |
- """Verify multiple file paths are set to the file upload control.""" |
- self._driver.get(self._launcher.GetURL() + '/upload.html') |
- |
- files = [] |
- filepaths = [] |
- filenames = set() |
- for index in xrange(4): |
- file = tempfile.NamedTemporaryFile() |
- files.append(file) |
- filepath = file.name |
- filepaths.append(filepath) |
- filenames.add(os.path.basename(filepath)) |
- |
- fileupload_multi = self._driver.find_element_by_name('fileupload_multi') |
- multiple = fileupload_multi.get_attribute('multiple') |
- self.assertEqual('true', multiple) |
- fileupload_multi.send_keys(filepaths[0], filepaths[1], filepaths[2], |
- filepaths[3]) |
- |
- files_on_element = self._driver.execute_script( |
- 'return document.getElementById("fileupload_multi").files;') |
- self.assertTrue(files_on_element) |
- self.assertEqual(4, len(files_on_element)) |
- for f in files_on_element: |
- self.assertTrue(f['name'] in filenames) |
- |
- |
-if __name__ == '__main__': |
- unittest.main(module='chromedriver_tests', |
- testRunner=GTestTextTestRunner(verbosity=1)) |