Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(407)

Side by Side Diff: chrome/test/webdriver/test/chromedriver_tests.py

Issue 8806030: Add commands to Chrome WebDriver for installing and manipulating extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ... Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698