import pytest from tests.support.asserts import assert_error, assert_success from tests.support.helpers import center_point def element_click(session, element): return session.transport.send( "POST", "session/{session_id}/element/{element_id}/click".format( session_id=session.session_id, element_id=element.id)) def assert_one_click(session): """Asserts there has only been one click, and returns that.""" clicks = session.execute_script("return window.clicks") assert len(clicks) == 1 return tuple(clicks[0]) def test_scroll_into_view(session, inline): session.url = inline(""" """) element = session.find.css("input", all=False) response = element_click(session, element) assert_success(response) # Check if element clicked is scrolled into view assert session.execute_script(""" let input = arguments[0]; rect = input.getBoundingClientRect(); return rect["top"] >= 0 && rect["left"] >= 0 && (rect["top"] + rect["height"]) <= window.innerHeight && (rect["left"] + rect["width"]) <= window.innerWidth; """, args=(element,)) is True @pytest.mark.parametrize("offset", range(9, 0, -1)) def test_partially_visible_does_not_scroll(session, offset, inline): session.url = inline("""
""".format(offset=offset)) target = session.find.css("div", all=False) assert session.execute_script("return window.scrollY || document.documentElement.scrollTop") == 0 response = element_click(session, target) assert_success(response) assert session.execute_script("return window.scrollY || document.documentElement.scrollTop") == 0 click_point = assert_one_click(session) assert click_point == center_point(target)