diff options
Diffstat (limited to 'testing/marionette/harness/marionette_harness/tests/unit/test_click_scrolling.py')
-rw-r--r-- | testing/marionette/harness/marionette_harness/tests/unit/test_click_scrolling.py | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/testing/marionette/harness/marionette_harness/tests/unit/test_click_scrolling.py b/testing/marionette/harness/marionette_harness/tests/unit/test_click_scrolling.py new file mode 100644 index 000000000..437c15e70 --- /dev/null +++ b/testing/marionette/harness/marionette_harness/tests/unit/test_click_scrolling.py @@ -0,0 +1,117 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# 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.by import By +from marionette_driver.errors import MoveTargetOutOfBoundsException + +from marionette_harness import MarionetteTestCase, skip, skip_if_mobile + + +class TestClickScrolling(MarionetteTestCase): + + + def test_clicking_on_anchor_scrolls_page(self): + scrollScript = """ + var pageY; + if (typeof(window.pageYOffset) == 'number') { + pageY = window.pageYOffset; + } else { + pageY = document.documentElement.scrollTop; + } + return pageY;""" + + test_html = self.marionette.absolute_url("macbeth.html") + self.marionette.navigate(test_html) + + self.marionette.find_element(By.PARTIAL_LINK_TEXT, "last speech").click() + y_offset = self.marionette.execute_script(scrollScript) + + # Focusing on to click, but not actually following, + # the link will scroll it in to view, which is a few + # pixels further than 0 + + self.assertTrue(y_offset > 300) + + def test_should_scroll_to_click_on_an_element_hidden_by_overflow(self): + test_html = self.marionette.absolute_url("click_out_of_bounds_overflow.html") + self.marionette.navigate(test_html) + + link = self.marionette.find_element(By.ID, "link") + try: + link.click() + except MoveTargetOutOfBoundsException: + self.fail("Should not be out of bounds") + + @skip("Bug 1200197 - Cannot interact with elements hidden inside overflow:scroll") + def test_should_be_able_to_click_on_an_element_hidden_by_overflow(self): + test_html = self.marionette.absolute_url("scroll.html") + self.marionette.navigate(test_html) + + link = self.marionette.find_element(By.ID, "line8") + link.click() + self.assertEqual("line8", self.marionette.find_element(By.ID, "clicked").text) + + def test_should_not_scroll_overflow_elements_which_are_visible(self): + test_html = self.marionette.absolute_url("scroll2.html") + self.marionette.navigate(test_html) + + list_el = self.marionette.find_element(By.TAG_NAME, "ul") + item = list_el.find_element(By.ID, "desired") + item.click() + y_offset = self.marionette.execute_script("return arguments[0].scrollTop;", script_args=[list_el]) + self.assertEqual(0, y_offset) + + def test_should_not_scroll_if_already_scrolled_and_element_is_in_view(self): + test_html = self.marionette.absolute_url("scroll3.html") + self.marionette.navigate(test_html) + + button1 = self.marionette.find_element(By.ID, "button1") + button2 = self.marionette.find_element(By.ID, "button2") + + button2.click() + scroll_top = self.marionette.execute_script("return document.body.scrollTop;") + button1.click() + + self.assertEqual(scroll_top, self.marionette.execute_script("return document.body.scrollTop;")) + + def test_should_be_able_to_click_radio_button_scrolled_into_view(self): + test_html = self.marionette.absolute_url("scroll4.html") + self.marionette.navigate(test_html) + + # If we dont throw we are good + self.marionette.find_element(By.ID, "radio").click() + + def test_should_scroll_elements_if_click_point_is_out_of_view_but_element_is_in_view(self): + test_html = self.marionette.absolute_url("element_outside_viewport.html") + + for s in ["top", "bottom"]: + self.marionette.navigate(test_html) + scroll_y = self.marionette.execute_script("return window.scrollY;") + self.marionette.find_element(By.ID, "{}-70".format(s)).click() + self.assertNotEqual(scroll_y, self.marionette.execute_script("return window.scrollY;")) + + for s in ["left", "right"]: + self.marionette.navigate(test_html) + scroll_x = self.marionette.execute_script("return window.scrollX;") + self.marionette.find_element(By.ID, "{}-70".format(s)).click() + self.assertNotEqual(scroll_x, self.marionette.execute_script("return window.scrollX;")) + + @skip_if_mobile("Bug 1293855 - Lists differ: [70, 70] != [70, 120]") + def test_should_not_scroll_elements_if_click_point_is_in_view(self): + test_html = self.marionette.absolute_url("element_outside_viewport.html") + + for s in ["top", "right", "bottom", "left"]: + for p in ["50", "30"]: + self.marionette.navigate(test_html) + scroll = self.marionette.execute_script("return [window.scrollX, window.scrollY];") + self.marionette.find_element(By.ID, "{0}-{1}".format(s, p)).click() + self.assertEqual(scroll, self.marionette.execute_script("return [window.scrollX, window.scrollY];")) + + @skip("Bug 1003687") + def test_should_scroll_overflow_elements_if_click_point_is_out_of_view_but_element_is_in_view(self): + test_html = self.marionette.absolute_url("scroll5.html") + self.marionette.navigate(test_html) + + self.marionette.find_element(By.ID, "inner").click() + self.assertEqual("clicked", self.marionette.find_element(By.ID, "clicked").text) |