OLD | NEW |
1 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Tests for ChromeDriver. | 5 """Tests for ChromeDriver. |
6 | 6 |
7 If your test is testing a specific part of the WebDriver API, consider adding | 7 If your test is testing a specific part of the WebDriver API, consider adding |
8 it to the appropriate place in the WebDriver tree instead. | 8 it to the appropriate place in the WebDriver tree instead. |
9 """ | 9 """ |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... |
30 from chromedriver_test import ChromeDriverTest | 30 from chromedriver_test import ChromeDriverTest |
31 import test_paths | 31 import test_paths |
32 import util | 32 import util |
33 | 33 |
34 try: | 34 try: |
35 import simplejson as json | 35 import simplejson as json |
36 except ImportError: | 36 except ImportError: |
37 import json | 37 import json |
38 | 38 |
39 from selenium.common.exceptions import WebDriverException | 39 from selenium.common.exceptions import WebDriverException |
| 40 from selenium.webdriver.common.keys import Keys |
| 41 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities |
40 from selenium.webdriver.remote.command import Command | 42 from selenium.webdriver.remote.command import Command |
41 from selenium.webdriver.remote.webdriver import WebDriver | 43 from selenium.webdriver.remote.webdriver import WebDriver |
42 from selenium.webdriver.common.keys import Keys | 44 from selenium.webdriver.support.ui import WebDriverWait |
43 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities | |
44 | 45 |
45 | 46 |
46 class Request(urllib2.Request): | 47 class Request(urllib2.Request): |
47 """Extends urllib2.Request to support all HTTP request types.""" | 48 """Extends urllib2.Request to support all HTTP request types.""" |
48 | 49 |
49 def __init__(self, url, method=None, data=None): | 50 def __init__(self, url, method=None, data=None): |
50 """Initialise a new HTTP request. | 51 """Initialise a new HTTP request. |
51 | 52 |
52 Arguments: | 53 Arguments: |
53 url: The full URL to send the request to. | 54 url: The full URL to send the request to. |
(...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
744 driver = self.GetNewDriver({'chrome.switches': ['disable-popup-blocking']}) | 745 driver = self.GetNewDriver({'chrome.switches': ['disable-popup-blocking']}) |
745 driver.get(self.GetTestDataUrl() + '/test_page.html') | 746 driver.get(self.GetTestDataUrl() + '/test_page.html') |
746 driver.execute_script('window.open("about:blank")') | 747 driver.execute_script('window.open("about:blank")') |
747 driver.close() | 748 driver.close() |
748 self.assertRaises(WebDriverException, driver.close) | 749 self.assertRaises(WebDriverException, driver.close) |
749 | 750 |
750 def testSwitchFromClosedWindow(self): | 751 def testSwitchFromClosedWindow(self): |
751 driver = self.GetNewDriver({'chrome.switches': ['disable-popup-blocking']}) | 752 driver = self.GetNewDriver({'chrome.switches': ['disable-popup-blocking']}) |
752 driver.get(self.GetTestDataUrl() + '/test_page.html') | 753 driver.get(self.GetTestDataUrl() + '/test_page.html') |
753 driver.execute_script('window.open("about:blank")') | 754 driver.execute_script('window.open("about:blank")') |
| 755 old_window = driver.current_window_handle |
754 driver.close() | 756 driver.close() |
| 757 WebDriverWait(driver, 10).until( |
| 758 lambda x: old_window not in driver.window_handles) |
755 driver.switch_to_window(driver.window_handles[0]) | 759 driver.switch_to_window(driver.window_handles[0]) |
756 self.assertEquals('about:blank', driver.current_url) | 760 self.assertEquals('about:blank', driver.current_url) |
757 | 761 |
758 def testSwitchToWindowWhileInSubframe(self): | 762 def testSwitchToWindowWhileInSubframe(self): |
759 driver = self.GetNewDriver({'chrome.switches': ['disable-popup-blocking']}) | 763 driver = self.GetNewDriver({'chrome.switches': ['disable-popup-blocking']}) |
760 driver.get(self.GetTestDataUrl() + '/test_page.html') | 764 driver.get(self.GetTestDataUrl() + '/test_page.html') |
761 driver.execute_script('window.open("about:blank")') | 765 driver.execute_script('window.open("about:blank")') |
762 driver.switch_to_frame(0) | 766 driver.switch_to_frame(0) |
763 driver.switch_to_window(driver.window_handles[1]) | 767 driver.switch_to_window(driver.window_handles[1]) |
764 self.assertEquals('about:blank', driver.current_url) | 768 self.assertEquals('about:blank', driver.current_url) |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
815 self.assertRaises(WebDriverException, driver.back) | 819 self.assertRaises(WebDriverException, driver.back) |
816 self.assertRaises(WebDriverException, driver.forward) | 820 self.assertRaises(WebDriverException, driver.forward) |
817 self.assertRaises(WebDriverException, driver.get_screenshot_as_base64) | 821 self.assertRaises(WebDriverException, driver.get_screenshot_as_base64) |
818 | 822 |
819 def testCanHandleAlertInSubframe(self): | 823 def testCanHandleAlertInSubframe(self): |
820 driver = self.GetNewDriver() | 824 driver = self.GetNewDriver() |
821 driver.get(self.GetTestDataUrl() + '/alerts.html') | 825 driver.get(self.GetTestDataUrl() + '/alerts.html') |
822 driver.switch_to_frame('subframe') | 826 driver.switch_to_frame('subframe') |
823 driver.execute_async_script('arguments[0](); window.alert("ok")') | 827 driver.execute_async_script('arguments[0](); window.alert("ok")') |
824 driver.switch_to_alert().accept() | 828 driver.switch_to_alert().accept() |
| 829 |
| 830 class ExtensionTest(ChromeDriverTest): |
| 831 |
| 832 INFOBAR_BROWSER_ACTION_EXTENSION = test_paths.TEST_DATA_PATH + \ |
| 833 '/infobar_browser_action_extension' |
| 834 PAGE_ACTION_EXTENSION = test_paths.TEST_DATA_PATH + \ |
| 835 '/page_action_extension' |
| 836 |
| 837 def testExtensionInstallAndUninstall(self): |
| 838 driver = self.GetNewDriver() |
| 839 self.assertEquals(0, len(driver.get_installed_extensions())) |
| 840 ext = driver.install_extension(self.PAGE_ACTION_EXTENSION) |
| 841 extensions = driver.get_installed_extensions() |
| 842 self.assertEquals(1, len(extensions)) |
| 843 self.assertEquals(ext.id, extensions[0].id) |
| 844 ext.uninstall() |
| 845 self.assertEquals(0, len(driver.get_installed_extensions())) |
| 846 |
| 847 def testExtensionInfo(self): |
| 848 driver = self.GetNewDriver() |
| 849 ext = driver.install_extension(self.PAGE_ACTION_EXTENSION) |
| 850 self.assertEquals('Page action extension', ext.get_name()) |
| 851 self.assertEquals('1.0', ext.get_version()) |
| 852 self.assertEquals(32, len(ext.id)) |
| 853 self.assertTrue(ext.is_enabled()) |
| 854 ext.set_enabled(True) |
| 855 ext.set_enabled(False) |
| 856 self.assertFalse(ext.is_enabled()) |
| 857 ext.set_enabled(True) |
| 858 self.assertTrue(ext.is_enabled()) |
| 859 |
| 860 def _testExtensionView(self, driver, view_handle, extension): |
| 861 """Tests that the given view supports basic WebDriver functionality.""" |
| 862 driver.switch_to_window(view_handle) |
| 863 self.assertTrue(driver.execute_script('return true')) |
| 864 checkbox = driver.find_element_by_id('checkbox') |
| 865 checkbox.click() |
| 866 self.assertTrue(checkbox.is_selected()) |
| 867 textfield = driver.find_element_by_id('textfield') |
| 868 textfield.send_keys('test') |
| 869 self.assertEquals('test', textfield.get_attribute('value')) |
| 870 self.assertEquals('test', driver.title) |
| 871 self.assertTrue(driver.current_url.endswith('view_checks.html')) |
| 872 self.assertTrue('shouldBeInPageSource' in driver.page_source) |
| 873 driver.close() |
| 874 def is_view_closed(driver): |
| 875 return len(filter(lambda view: view['handle'] == view_handle, |
| 876 extension._get_views())) == 0 |
| 877 WebDriverWait(driver, 10).until(is_view_closed) |
| 878 |
| 879 def testInfobarView(self): |
| 880 driver = self.GetNewDriver({'chrome.switches': |
| 881 ['enable-experimental-extension-apis']}) |
| 882 ext = driver.install_extension(self.INFOBAR_BROWSER_ACTION_EXTENSION) |
| 883 driver.switch_to_window(ext.get_bg_page_handle()) |
| 884 driver.set_script_timeout(10) |
| 885 driver.execute_async_script('waitForInfobar(arguments[0])') |
| 886 self._testExtensionView(driver, ext.get_infobar_handles()[0], ext) |
| 887 |
| 888 def testBrowserActionPopupView(self): |
| 889 driver = self.GetNewDriver({'chrome.switches': |
| 890 ['enable-experimental-extension-apis']}) |
| 891 ext = driver.install_extension(self.INFOBAR_BROWSER_ACTION_EXTENSION) |
| 892 ext.click_browser_action() |
| 893 self._testExtensionView(driver, ext.get_popup_handle(), ext) |
| 894 |
| 895 def testPageActionPopupView(self): |
| 896 driver = self.GetNewDriver() |
| 897 ext = driver.install_extension(self.PAGE_ACTION_EXTENSION) |
| 898 def is_page_action_visible(driver): |
| 899 return ext.is_page_action_visible() |
| 900 WebDriverWait(driver, 10).until(is_page_action_visible) |
| 901 ext.click_page_action() |
| 902 self._testExtensionView(driver, ext.get_popup_handle(), ext) |
OLD | NEW |