blob: c2dc6485286efc1f65679772d515c31c0d584686 [file] [log] [blame]
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("""
<input type=text value=Federer
style="position: absolute; left: 0vh; top: 500vh">""")
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("""
<style>
body {{
margin: 0;
padding: 0;
}}
div {{
background: blue;
height: 200px;
/* make N pixels visible in the viewport */
margin-top: calc(100vh - {offset}px);
}}
</style>
<div></div>
<script>
window.clicks = [];
let target = document.querySelector("div");
target.addEventListener("click", function(e) {{ window.clicks.push([e.clientX, e.clientY]); }});
</script>
""".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)