Path: blob/trunk/py/test/selenium/webdriver/common/click_scrolling_tests.py
1865 views
# Licensed to the Software Freedom Conservancy (SFC) under one1# or more contributor license agreements. See the NOTICE file2# distributed with this work for additional information3# regarding copyright ownership. The SFC licenses this file4# to you under the Apache License, Version 2.0 (the5# "License"); you may not use this file except in compliance6# with the License. You may obtain a copy of the License at7#8# http://www.apache.org/licenses/LICENSE-2.09#10# Unless required by applicable law or agreed to in writing,11# software distributed under the License is distributed on an12# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY13# KIND, either express or implied. See the License for the14# specific language governing permissions and limitations15# under the License.1617import pytest1819from selenium.common.exceptions import MoveTargetOutOfBoundsException20from selenium.webdriver.common.by import By21from selenium.webdriver.support import expected_conditions as EC22from selenium.webdriver.support.ui import WebDriverWait232425def test_clicking_on_anchor_scrolls_page(driver, pages):26scrollScript = """var pageY;27if (typeof(window.pageYOffset) == 'number') {28pageY = window.pageYOffset;29} else {30pageY = document.documentElement.scrollTop;31}32return pageY;"""3334pages.load("macbeth.html")3536driver.find_element(By.PARTIAL_LINK_TEXT, "last speech").click()3738yOffset = driver.execute_script(scrollScript)3940# Focusing on to click, but not actually following,41# the link will scroll it in to view, which is a few pixels further than 042assert yOffset > 300434445def test_should_scroll_to_click_on_an_element_hidden_by_overflow(driver, pages):46pages.load("click_out_of_bounds_overflow.html")4748link = driver.find_element(By.ID, "link")49try:50link.click()51except MoveTargetOutOfBoundsException as e:52AssertionError("Should not be out of bounds: %s" % e.msg)535455def test_should_be_able_to_click_on_an_element_hidden_by_overflow(driver, pages):56pages.load("scroll.html")5758link = driver.find_element(By.ID, "line8")59# This used to throw a MoveTargetOutOfBoundsException - we don't expect it to60link.click()61assert "line8" == driver.find_element(By.ID, "clicked").text626364@pytest.mark.xfail_firefox65@pytest.mark.xfail_remote66def test_should_be_able_to_click_on_an_element_hidden_by_double_overflow(driver, pages):67pages.load("scrolling_tests/page_with_double_overflow_auto.html")6869driver.find_element(By.ID, "link").click()70WebDriverWait(driver, 3).until(EC.title_is("Clicked Successfully!"))717273def test_should_be_able_to_click_on_an_element_hidden_by_yoverflow(driver, pages):74pages.load("scrolling_tests/page_with_y_overflow_auto.html")7576driver.find_element(By.ID, "link").click()77WebDriverWait(driver, 3).until(EC.title_is("Clicked Successfully!"))787980def test_should_not_scroll_overflow_elements_which_are_visible(driver, pages):81pages.load("scroll2.html")82list = driver.find_element(By.TAG_NAME, "ul")83item = list.find_element(By.ID, "desired")84item.click()85yOffset = driver.execute_script("return arguments[0].scrollTop", list)86assert 0 == yOffset, "Should not have scrolled"878889@pytest.mark.xfail_firefox90@pytest.mark.xfail_remote91def test_should_not_scroll_if_already_scrolled_and_element_is_in_view(driver, pages):92pages.load("scroll3.html")93driver.find_element(By.ID, "button2").click()94scrollTop = get_scroll_top(driver)95driver.find_element(By.ID, "button1").click()96assert scrollTop == get_scroll_top(driver)979899def test_should_be_able_to_click_radio_button_scrolled_into_view(driver, pages):100pages.load("scroll4.html")101driver.find_element(By.ID, "radio").click()102# If we don't throw, we're good103104105@pytest.mark.xfail_safari106def test_should_scroll_overflow_elements_if_click_point_is_out_of_view_but_element_is_in_view(driver, pages):107pages.load("scroll5.html")108driver.find_element(By.ID, "inner").click()109assert "clicked" == driver.find_element(By.ID, "clicked").text110111112@pytest.mark.xfail_firefox(reason="https://github.com/w3c/webdriver/issues/408")113@pytest.mark.xfail_remote(reason="https://github.com/w3c/webdriver/issues/408")114@pytest.mark.xfail_safari115def test_should_be_able_to_click_element_in_aframe_that_is_out_of_view(driver, pages):116pages.load("scrolling_tests/page_with_frame_out_of_view.html")117driver.switch_to.frame(driver.find_element(By.NAME, "frame"))118element = driver.find_element(By.NAME, "checkbox")119element.click()120assert element.is_selected()121122123def test_should_be_able_to_click_element_that_is_out_of_view_in_aframe(driver, pages):124pages.load("scrolling_tests/page_with_scrolling_frame.html")125driver.switch_to.frame(driver.find_element(By.NAME, "scrolling_frame"))126element = driver.find_element(By.NAME, "scroll_checkbox")127element.click()128assert element.is_selected()129130131def test_should_not_be_able_to_click_element_that_is_out_of_view_in_anon_scrollable_frame(driver, pages):132pages.load("scrolling_tests/page_with_non_scrolling_frame.html")133driver.switch_to.frame("scrolling_frame")134element = driver.find_element(By.NAME, "scroll_checkbox")135element.click()136# TODO we should assert that the click was unsuccessful137138139@pytest.mark.xfail_safari140def test_should_be_able_to_click_element_that_is_out_of_view_in_aframe_that_is_out_of_view(driver, pages):141pages.load("scrolling_tests/page_with_scrolling_frame_out_of_view.html")142driver.switch_to.frame(driver.find_element(By.NAME, "scrolling_frame"))143element = driver.find_element(By.NAME, "scroll_checkbox")144element.click()145assert element.is_selected()146147148@pytest.mark.xfail_firefox149@pytest.mark.xfail_chrome150@pytest.mark.xfail_remote151def test_should_be_able_to_click_element_that_is_out_of_view_in_anested_frame(driver, pages):152pages.load("scrolling_tests/page_with_nested_scrolling_frames.html")153driver.switch_to.frame(driver.find_element(By.NAME, "scrolling_frame"))154driver.switch_to.frame(driver.find_element(By.NAME, "nested_scrolling_frame"))155element = driver.find_element(By.NAME, "scroll_checkbox")156element.click()157assert element.is_selected()158159160@pytest.mark.xfail_firefox161@pytest.mark.xfail_safari162@pytest.mark.xfail_chrome163@pytest.mark.xfail_remote164def test_should_be_able_to_click_element_that_is_out_of_view_in_anested_frame_that_is_out_of_view(driver, pages):165pages.load("scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html")166driver.switch_to.frame(driver.find_element(By.NAME, "scrolling_frame"))167driver.switch_to.frame(driver.find_element(By.NAME, "nested_scrolling_frame"))168element = driver.find_element(By.NAME, "scroll_checkbox")169element.click()170assert element.is_selected()171172173def test_should_not_scroll_when_getting_element_size(driver, pages):174pages.load("scroll3.html")175scrollTop = get_scroll_top(driver)176driver.find_element(By.ID, "button1").size177assert scrollTop == get_scroll_top(driver)178179180def get_scroll_top(driver):181return driver.execute_script("return document.body.scrollTop")182183184