Skip to content

Commit

Permalink
[wdspec] Assert for expected screenshot dimensions.
Browse files Browse the repository at this point in the history
Depends on D10627

Differential Revision: https://phabricator.services.mozilla.com/D10628

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1503804
gecko-commit: 076d32d1343fa0203bbf58209a45c73f2c878d97
gecko-integration-branch: autoland
gecko-reviewers: ato
  • Loading branch information
whimboo authored and moz-wptsync-bot committed Nov 5, 2018
1 parent ba41afb commit 1d98d96
Show file tree
Hide file tree
Showing 11 changed files with 72 additions and 42 deletions.
11 changes: 1 addition & 10 deletions webdriver/tests/get_element_rect/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1 @@
def retrieve_element_rect(session, element):
return session.execute_script("""
let rect = arguments[0].getBoundingClientRect();
return {
x: rect.left + window.pageXOffset,
y: rect.top + window.pageYOffset,
width: rect.width,
height: rect.height,
};
""", args=(element,))

5 changes: 2 additions & 3 deletions webdriver/tests/get_element_rect/get.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from tests.support.asserts import assert_error, assert_success
from tests.support.helpers import element_rect
from tests.support.inline import inline

from . import retrieve_element_rect


def get_element_rect(session, element_id):
return session.transport.send(
Expand Down Expand Up @@ -38,4 +37,4 @@ def test_basic(session):
element = session.find.css("input", all=False)

result = get_element_rect(session, element.id)
assert_success(result, retrieve_element_rect(session, element))
assert_success(result, element_rect(session, element))
5 changes: 2 additions & 3 deletions webdriver/tests/get_element_rect/user_prompts.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
import pytest

from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
from tests.support.helpers import element_rect
from tests.support.inline import inline

from . import retrieve_element_rect


def get_element_rect(session, element_id):
return session.transport.send(
Expand All @@ -27,7 +26,7 @@ def check_user_prompt_closed_without_exception(dialog_type, retval):
create_dialog(dialog_type, text=dialog_type)

response = get_element_rect(session, element.id)
assert_success(response, retrieve_element_rect(session, element))
assert_success(response, element_rect(session, element))

assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)

Expand Down
1 change: 1 addition & 0 deletions webdriver/tests/support/asserts.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import base64
import imghdr
import struct

from webdriver import Element, NoSuchAlertException, WebDriverException

Expand Down
1 change: 0 additions & 1 deletion webdriver/tests/support/fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,4 +231,3 @@ def closed_window(session, create_window):
yield new_handle

session.window_handle = original_handle

43 changes: 28 additions & 15 deletions webdriver/tests/support/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,34 @@ def clear_all_cookies(session):
session.transport.send("DELETE", "session/%s/cookie" % session.session_id)


def document_dimensions(session):
return tuple(session.execute_script("""
let {width, height} = document.documentElement.getBoundingClientRect();
return [width, height];
"""))


def document_hidden(session):
"""Polls for the document to become hidden."""
def hidden(session):
return session.execute_script("return document.hidden")
return Poll(session, timeout=3, raises=None).until(hidden)


def element_rect(session, element):
return session.execute_script("""
let element = arguments[0];
let {height, left, top, width} = element.getBoundingClientRect();
return {
x: left + window.pageXOffset,
y: top + window.pageYOffset,
width: width,
height: height,
};
""", args=(element,))


def is_element_in_viewport(session, element):
"""Check if element is outside of the viewport"""
return session.execute_script("""
Expand All @@ -121,13 +149,6 @@ def is_element_in_viewport(session, element):
""", args=(element,))


def document_hidden(session):
"""Polls for the document to become hidden."""
def hidden(session):
return session.execute_script("return document.hidden")
return Poll(session, timeout=3, raises=None).until(hidden)


def is_fullscreen(session):
# At the time of writing, WebKit does not conform to the
# Fullscreen API specification.
Expand All @@ -137,11 +158,3 @@ def is_fullscreen(session):
return session.execute_script("""
return !!(window.fullScreen || document.webkitIsFullScreen)
""")


def document_dimensions(session):
return tuple(session.execute_script("""
let {devicePixelRatio} = window;
let {width, height} = document.documentElement.getBoundingClientRect();
return [width * devicePixelRatio, height * devicePixelRatio];
"""))
1 change: 1 addition & 0 deletions webdriver/tests/support/image.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import base64
import math
import struct

from tests.support.asserts import assert_png
Expand Down
12 changes: 12 additions & 0 deletions webdriver/tests/take_element_screenshot/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
def element_rect(session, element):
return session.execute_script("""
let {devicePixelRatio} = window;
let rect = arguments[0].getBoundingClientRect();
return {
x: Math.floor((rect.left + window.pageXOffset) * devicePixelRatio),
y: Math.floor((rect.top + window.pageYOffset) * devicePixelRatio),
width: Math.floor(rect.width * devicePixelRatio),
height: Math.floor(rect.height * devicePixelRatio),
};
""", args=(element,))
23 changes: 14 additions & 9 deletions webdriver/tests/take_element_screenshot/screenshot.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from tests.support.asserts import assert_error, assert_png, assert_success
from tests.support.image import png_dimensions
from tests.support.inline import inline

from . import element_rect


def take_element_screenshot(session, element_id):
return session.transport.send(
Expand All @@ -17,20 +20,22 @@ def test_no_browsing_context(session, closed_window):
assert_error(response, "no such window")


def test_screenshot(session):
def test_stale(session):
session.url = inline("<input>")
element = session.find.css("input", all=False)
session.refresh()

response = take_element_screenshot(session, element.id)
value = assert_success(response)

assert_png(value)
result = take_element_screenshot(session, element.id)
assert_error(result, "stale element reference")


def test_stale(session):
def test_format_and_dimensions(session):
session.url = inline("<input>")
element = session.find.css("input", all=False)
session.refresh()
rect = element_rect(session, element)

result = take_element_screenshot(session, element.id)
assert_error(result, "stale element reference")
response = take_element_screenshot(session, element.id)
value = assert_success(response)

assert_png(value)
assert png_dimensions(value) == (rect["width"], rect["height"])
6 changes: 6 additions & 0 deletions webdriver/tests/take_screenshot/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
def document_dimensions(session):
return tuple(session.execute_script("""
let {devicePixelRatio} = window;
let {width, height} = document.documentElement.getBoundingClientRect();
return [Math.floor(width * devicePixelRatio), Math.floor(height * devicePixelRatio)];
"""))
6 changes: 5 additions & 1 deletion webdriver/tests/take_screenshot/screenshot.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from tests.support.asserts import assert_error, assert_png, assert_success
from tests.support.image import png_dimensions
from tests.support.inline import inline

from . import document_dimensions


def take_screenshot(session):
return session.transport.send(
Expand All @@ -12,10 +15,11 @@ def test_no_browsing_context(session, closed_window):
assert_error(response, "no such window")


def test_screenshot(session):
def test_format_and_dimensions(session):
session.url = inline("<input>")

response = take_screenshot(session)
value = assert_success(response)

assert_png(value)
assert png_dimensions(value) == document_dimensions(session)

0 comments on commit 1d98d96

Please sign in to comment.