summaryrefslogtreecommitdiffstats
path: root/testing/marionette/harness/marionette_harness/tests/unit/test_switch_window_content.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/marionette/harness/marionette_harness/tests/unit/test_switch_window_content.py')
-rw-r--r--testing/marionette/harness/marionette_harness/tests/unit/test_switch_window_content.py171
1 files changed, 171 insertions, 0 deletions
diff --git a/testing/marionette/harness/marionette_harness/tests/unit/test_switch_window_content.py b/testing/marionette/harness/marionette_harness/tests/unit/test_switch_window_content.py
new file mode 100644
index 000000000..fbab1898f
--- /dev/null
+++ b/testing/marionette/harness/marionette_harness/tests/unit/test_switch_window_content.py
@@ -0,0 +1,171 @@
+# This Source Code Form is subject to the terms of the Mozilla ublic
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from marionette_driver import Actions, By, Wait
+from marionette_driver.keys import Keys
+
+from marionette_harness import MarionetteTestCase, skip_if_mobile, WindowManagerMixin
+
+
+class TestSwitchToWindowContent(WindowManagerMixin, MarionetteTestCase):
+
+ def setUp(self):
+ super(TestSwitchToWindowContent, self).setUp()
+
+ if self.marionette.session_capabilities["platformName"] == "darwin":
+ self.mod_key = Keys.META
+ else:
+ self.mod_key = Keys.CONTROL
+
+ self.empty_page = self.marionette.absolute_url("empty.html")
+ self.test_page = self.marionette.absolute_url("windowHandles.html")
+
+ self.selected_tab_index = self.get_selected_tab_index()
+
+ with self.marionette.using_context("content"):
+ self.marionette.navigate(self.test_page)
+
+ def tearDown(self):
+ self.close_all_tabs()
+
+ super(TestSwitchToWindowContent, self).tearDown()
+
+ def get_selected_tab_index(self):
+ with self.marionette.using_context("chrome"):
+ return self.marionette.execute_script("""
+ Components.utils.import("resource://gre/modules/AppConstants.jsm");
+
+ let win = null;
+
+ if (AppConstants.MOZ_APP_NAME == "fennec") {
+ Components.utils.import("resource://gre/modules/Services.jsm");
+ win = Services.wm.getMostRecentWindow("navigator:browser");
+ } else {
+ Components.utils.import("resource:///modules/RecentWindow.jsm");
+ win = RecentWindow.getMostRecentBrowserWindow();
+ }
+
+ let tabBrowser = null;
+
+ // Fennec
+ if (win.BrowserApp) {
+ tabBrowser = win.BrowserApp;
+
+ // Firefox
+ } else if (win.gBrowser) {
+ tabBrowser = win.gBrowser;
+
+ } else {
+ return null;
+ }
+
+ for (let i = 0; i < tabBrowser.tabs.length; i++) {
+ if (tabBrowser.tabs[i] == tabBrowser.selectedTab) {
+ return i;
+ }
+ }
+ """)
+
+ def open_tab_in_background(self):
+ with self.marionette.using_context("content"):
+ link = self.marionette.find_element(By.ID, "new-tab")
+
+ action = Actions(self.marionette)
+ action.key_down(self.mod_key).click(link).perform()
+
+ def open_tab_in_foreground(self):
+ with self.marionette.using_context("content"):
+ link = self.marionette.find_element(By.ID, "new-tab")
+ link.click()
+
+ def test_switch_tabs_with_focus_change(self):
+ new_tab = self.open_tab(self.open_tab_in_foreground)
+ self.assertEqual(self.marionette.current_window_handle, self.start_tab)
+ self.assertNotEqual(self.get_selected_tab_index(), self.selected_tab_index)
+ with self.marionette.using_context("content"):
+ self.assertEqual(self.marionette.get_url(), self.test_page)
+
+ self.marionette.switch_to_window(new_tab)
+ self.assertEqual(self.marionette.current_window_handle, new_tab)
+ self.assertNotEqual(self.get_selected_tab_index(), self.selected_tab_index)
+
+ with self.marionette.using_context("content"):
+ Wait(self.marionette).until(
+ lambda _: self.marionette.get_url() == self.empty_page,
+ message="{} has been loaded in the newly opened tab.".format(self.empty_page))
+
+ self.marionette.switch_to_window(self.start_tab, focus=True)
+ self.assertEqual(self.marionette.current_window_handle, self.start_tab)
+ self.assertEqual(self.get_selected_tab_index(), self.selected_tab_index)
+ with self.marionette.using_context("content"):
+ self.assertEqual(self.marionette.get_url(), self.test_page)
+
+ self.marionette.switch_to_window(new_tab)
+ self.marionette.close()
+ self.marionette.switch_to_window(self.start_tab)
+
+ self.assertEqual(self.marionette.current_window_handle, self.start_tab)
+ self.assertEqual(self.get_selected_tab_index(), self.selected_tab_index)
+ with self.marionette.using_context("content"):
+ self.assertEqual(self.marionette.get_url(), self.test_page)
+
+ def test_switch_tabs_without_focus_change(self):
+ new_tab = self.open_tab(self.open_tab_in_foreground)
+ self.assertEqual(self.marionette.current_window_handle, self.start_tab)
+ self.assertNotEqual(self.get_selected_tab_index(), self.selected_tab_index)
+ with self.marionette.using_context("content"):
+ self.assertEqual(self.marionette.get_url(), self.test_page)
+
+ # Switch to new tab first because it is already selected
+ self.marionette.switch_to_window(new_tab)
+ self.assertEqual(self.marionette.current_window_handle, new_tab)
+
+ self.marionette.switch_to_window(self.start_tab, focus=False)
+ self.assertEqual(self.marionette.current_window_handle, self.start_tab)
+ self.assertNotEqual(self.get_selected_tab_index(), self.selected_tab_index)
+
+ with self.marionette.using_context("content"):
+ self.assertEqual(self.marionette.get_url(), self.test_page)
+
+ self.marionette.switch_to_window(new_tab)
+ self.marionette.close()
+
+ self.marionette.switch_to_window(self.start_tab)
+ self.assertEqual(self.marionette.current_window_handle, self.start_tab)
+ self.assertEqual(self.get_selected_tab_index(), self.selected_tab_index)
+ with self.marionette.using_context("content"):
+ self.assertEqual(self.marionette.get_url(), self.test_page)
+
+ def test_switch_from_content_to_chrome_window_should_not_change_selected_tab(self):
+ new_tab = self.open_tab(self.open_tab_in_foreground)
+
+ self.marionette.switch_to_window(new_tab)
+ self.assertEqual(self.marionette.current_window_handle, new_tab)
+ new_tab_index = self.get_selected_tab_index()
+
+ self.marionette.switch_to_window(self.start_window)
+ self.assertEqual(self.marionette.current_window_handle, new_tab)
+ self.assertEqual(self.get_selected_tab_index(), new_tab_index)
+
+ @skip_if_mobile("New windows not supported in Fennec")
+ def test_switch_to_new_private_browsing_window_has_to_register_browsers(self):
+ # Test that tabs (browsers) are correctly registered for a newly opened
+ # private browsing window. This has to also happen without explicitely
+ # switching to the tab itself before using any commands in content scope.
+ #
+ # Note: Not sure why this only affects private browsing windows only.
+
+ def open_private_browsing_window():
+ with self.marionette.using_context("content"):
+ self.marionette.navigate("about:privatebrowsing")
+ button = self.marionette.find_element(By.ID, "startPrivateBrowsing")
+ button.click()
+
+ new_window = self.open_window(open_private_browsing_window)
+ self.marionette.switch_to_window(new_window)
+ self.assertEqual(self.marionette.current_chrome_window_handle, new_window)
+ self.assertNotEqual(self.marionette.current_window_handle, self.start_tab)
+
+ with self.marionette.using_context("content"):
+ self.marionette.execute_script(" return true; ")