Backed out 3 changesets (bug 1606794) as req by whimboo ( it`s not a fix for Firefox 72 ). a=backout
Backed out changeset b2b3f10527c3 (bug 1606794)
Backed out changeset 565340ce11e8 (bug 1606794)
Backed out changeset d73cb1b0011d (bug 1606794)
gecko-commit: f48c055e311507f89265e2088ac4a6959e64eb9c
gecko-integration-branch: central
gecko-reviewers: backout
diff --git a/tools/webdriver/webdriver/client.py b/tools/webdriver/webdriver/client.py
index cf4c5fd..0c5bbff 100644
--- a/tools/webdriver/webdriver/client.py
+++ b/tools/webdriver/webdriver/client.py
@@ -738,10 +738,6 @@
return self.send_element_command("GET", "selected")
@command
- def screenshot(self):
- return self.send_element_command("GET", "screenshot")
-
- @command
def attribute(self, name):
return self.send_element_command("GET", "attribute/%s" % name)
diff --git a/webdriver/tests/take_element_screenshot/__init__.py b/webdriver/tests/take_element_screenshot/__init__.py
index 9a82cc4..9de8792 100644
--- a/webdriver/tests/take_element_screenshot/__init__.py
+++ b/webdriver/tests/take_element_screenshot/__init__.py
@@ -1,10 +1,12 @@
-def element_dimensions(session, element):
- return tuple(session.execute_script("""
- const {devicePixelRatio} = window;
- let {width, height} = arguments[0].getBoundingClientRect();
+def element_rect(session, element):
+ return session.execute_script("""
+ let {devicePixelRatio} = window;
+ let {left, top, width, height} = arguments[0].getBoundingClientRect();
- return [
- Math.floor(width * devicePixelRatio),
- Math.floor(height * devicePixelRatio),
- ];
- """, args=(element,)))
+ return {
+ x: Math.floor((left + window.pageXOffset) * devicePixelRatio),
+ y: Math.floor((top + window.pageYOffset) * devicePixelRatio),
+ width: Math.floor(width * devicePixelRatio),
+ height: Math.floor(height * devicePixelRatio),
+ };
+ """, args=(element,))
diff --git a/webdriver/tests/take_element_screenshot/iframe.py b/webdriver/tests/take_element_screenshot/iframe.py
index 83f55de..242122f 100644
--- a/webdriver/tests/take_element_screenshot/iframe.py
+++ b/webdriver/tests/take_element_screenshot/iframe.py
@@ -4,58 +4,21 @@
from tests.support.image import png_dimensions
from tests.support.inline import iframe, inline
-from . import element_dimensions
+from . import element_rect
-DEFAULT_CONTENT = "<div id='content'>Lorem ipsum dolor sit amet.</div>"
-REFERENCE_CONTENT = "<div id='outer'>{}</div>".format(DEFAULT_CONTENT)
-REFERENCE_STYLE = """
+DEFAULT_CSS_STYLE = """
<style>
- #outer {
+ div, iframe {
display: block;
- margin: 0;
- border: 0;
- width: 200px;
- height: 200px;
- }
- #content {
- display: block;
- margin: 0;
- border: 0;
- width: 100px;
- height: 100px;
- background: green;
+ border: 1px solid blue;
+ width: 10em;
+ height: 10em;
}
</style>
"""
-OUTER_IFRAME_STYLE = """
- <style>
- iframe {
- display: block;
- margin: 0;
- border: 0;
- width: 200px;
- height: 200px;
- }
- </style>
-"""
-
-INNER_IFRAME_STYLE = """
- <style>
- body {
- margin: 0;
- }
- div {
- display: block;
- margin: 0;
- border: 0;
- width: 100px;
- height: 100px;
- background: green;
- }
- </style>
-"""
+DEFAULT_CONTENT = "<div>Lorem ipsum dolor sit amet.</div>"
def take_element_screenshot(session, element_id):
@@ -68,55 +31,24 @@
)
-def test_frame_element(session):
- # Create a reference element which looks exactly like the frame's content
- session.url = inline("{0}{1}".format(REFERENCE_STYLE, REFERENCE_CONTENT))
-
- # Capture the inner content as reference image
- ref_el = session.find.css("#content", all=False)
- ref_screenshot = ref_el.screenshot()
- ref_dimensions = element_dimensions(session, ref_el)
-
- assert png_dimensions(ref_screenshot) == ref_dimensions
-
- # Capture the frame's element
- iframe_content = "{0}{1}".format(INNER_IFRAME_STYLE, DEFAULT_CONTENT)
- session.url = inline("""{0}{1}""".format(OUTER_IFRAME_STYLE, iframe(iframe_content)))
-
- frame = session.find.css("iframe", all=False)
- session.switch_frame(frame)
- div = session.find.css("div", all=False)
- div_dimensions = element_dimensions(session, div)
- assert div_dimensions == ref_dimensions
-
- response = take_element_screenshot(session, div.id)
- div_screenshot = assert_success(response)
-
- assert png_dimensions(div_screenshot) == ref_dimensions
- assert div_screenshot == ref_screenshot
-
-
@pytest.mark.parametrize("domain", ["", "alt"], ids=["same_origin", "cross_origin"])
def test_source_origin(session, url, domain):
- # Create a reference element which looks exactly like the iframe
- session.url = inline("{0}{1}".format(REFERENCE_STYLE, REFERENCE_CONTENT))
+ session.url = inline("""{0}{1}""".format(DEFAULT_CSS_STYLE, DEFAULT_CONTENT))
+ element = session.find.css("div", all=False)
+ rect = element_rect(session, element)
- div = session.find.css("div", all=False)
- div_dimensions = element_dimensions(session, div)
-
- response = take_element_screenshot(session, div.id)
+ response = take_element_screenshot(session, element.id)
reference_screenshot = assert_success(response)
- assert png_dimensions(reference_screenshot) == div_dimensions
+ assert png_dimensions(reference_screenshot) == (rect["width"], rect["height"])
- iframe_content = "{0}{1}".format(INNER_IFRAME_STYLE, DEFAULT_CONTENT)
+ iframe_content = "<style>body {{ margin: 0; }}</style>{}".format(DEFAULT_CONTENT)
session.url = inline("""{0}{1}""".format(
- OUTER_IFRAME_STYLE, iframe(iframe_content, domain=domain)))
-
+ DEFAULT_CSS_STYLE, iframe(iframe_content, domain=domain)))
frame_element = session.find.css("iframe", all=False)
- frame_dimensions = element_dimensions(session, frame_element)
+ frame_rect = element_rect(session, frame_element)
response = take_element_screenshot(session, frame_element.id)
screenshot = assert_success(response)
- assert png_dimensions(screenshot) == frame_dimensions
+ assert png_dimensions(screenshot) == (frame_rect["width"], frame_rect["height"])
assert screenshot == reference_screenshot
diff --git a/webdriver/tests/take_element_screenshot/screenshot.py b/webdriver/tests/take_element_screenshot/screenshot.py
index 50d33a2..fd460b6 100644
--- a/webdriver/tests/take_element_screenshot/screenshot.py
+++ b/webdriver/tests/take_element_screenshot/screenshot.py
@@ -2,7 +2,7 @@
from tests.support.image import png_dimensions
from tests.support.inline import inline
-from . import element_dimensions
+from . import element_rect
def take_element_screenshot(session, element_id):
@@ -32,8 +32,9 @@
def test_format_and_dimensions(session):
session.url = inline("<input>")
element = session.find.css("input", all=False)
+ rect = element_rect(session, element)
response = take_element_screenshot(session, element.id)
screenshot = assert_success(response)
- assert png_dimensions(screenshot) == element_dimensions(session, element)
+ assert png_dimensions(screenshot) == (rect["width"], rect["height"])
diff --git a/webdriver/tests/take_screenshot/__init__.py b/webdriver/tests/take_screenshot/__init__.py
index f3001d9..c07f8d1 100644
--- a/webdriver/tests/take_screenshot/__init__.py
+++ b/webdriver/tests/take_screenshot/__init__.py
@@ -1,18 +1,6 @@
-def element_dimensions(session, element):
- return tuple(session.execute_script("""
- const {devicePixelRatio} = window;
- let {width, height} = arguments[0].getBoundingClientRect();
-
- return [
- Math.floor(width * devicePixelRatio),
- Math.floor(height * devicePixelRatio),
- ];
- """, args=(element,)))
-
-
def viewport_dimensions(session):
return tuple(session.execute_script("""
- const {devicePixelRatio, innerHeight, innerWidth} = window;
+ let {devicePixelRatio, innerHeight, innerWidth} = window;
return [
Math.floor(innerWidth * devicePixelRatio),
diff --git a/webdriver/tests/take_screenshot/iframe.py b/webdriver/tests/take_screenshot/iframe.py
index 6186cf3..4cf8ad0 100644
--- a/webdriver/tests/take_screenshot/iframe.py
+++ b/webdriver/tests/take_screenshot/iframe.py
@@ -4,58 +4,21 @@
from tests.support.image import png_dimensions
from tests.support.inline import iframe, inline
-from . import element_dimensions, viewport_dimensions
+from . import viewport_dimensions
-DEFAULT_CONTENT = "<div id='content'>Lorem ipsum dolor sit amet.</div>"
-REFERENCE_CONTENT = "<div id='outer'>{}</div>".format(DEFAULT_CONTENT)
-REFERENCE_STYLE = """
+DEFAULT_CSS_STYLE = """
<style>
- #outer {
+ div, iframe {
display: block;
- margin: 0;
- border: 0;
- width: 200px;
- height: 200px;
- }
- #content {
- display: block;
- margin: 0;
- border: 0;
- width: 100px;
- height: 100px;
- background: green;
+ border: 1px solid blue;
+ width: 10em;
+ height: 10em;
}
</style>
"""
-OUTER_IFRAME_STYLE = """
- <style>
- iframe {
- display: block;
- margin: 0;
- border: 0;
- width: 200px;
- height: 200px;
- }
- </style>
-"""
-
-INNER_IFRAME_STYLE = """
- <style>
- body {
- margin: 0;
- }
- div {
- display: block;
- margin: 0;
- border: 0;
- width: 100px;
- height: 100px;
- background: green;
- }
- </style>
-"""
+DEFAULT_CONTENT = "<div>Lorem ipsum dolor sit amet.</div>"
def take_screenshot(session):
@@ -63,45 +26,17 @@
"GET", "session/{session_id}/screenshot".format(**vars(session)))
-def test_frame_content(session):
- # Create a reference element which looks exactly like the frame's content
- session.url = inline("{0}{1}".format(REFERENCE_STYLE, REFERENCE_CONTENT))
-
- # Capture the inner content as reference image
- ref_el = session.find.css("div", all=False)
- ref_screenshot = ref_el.screenshot()
- ref_dimensions = element_dimensions(session, ref_el)
-
- assert ref_dimensions != viewport_dimensions
- assert png_dimensions(ref_screenshot) == ref_dimensions
-
- # Capture the frame's content
- iframe_content = "{0}{1}".format(INNER_IFRAME_STYLE, DEFAULT_CONTENT)
- session.url = inline("""{0}{1}""".format(OUTER_IFRAME_STYLE, iframe(iframe_content)))
-
- frame = session.find.css("iframe", all=False)
- session.switch_frame(frame)
- frame_dimensions = viewport_dimensions(session)
- assert frame_dimensions == ref_dimensions
-
- response = take_screenshot(session)
- frame_screenshot = assert_success(response)
-
- assert png_dimensions(frame_screenshot) == ref_dimensions
- assert frame_screenshot == ref_screenshot
-
-
@pytest.mark.parametrize("domain", ["", "alt"], ids=["same_origin", "cross_origin"])
-def test_source_origin(session, domain):
- session.url = inline("{0}{1}".format(REFERENCE_STYLE, REFERENCE_CONTENT))
+def test_source_origin(session, url, domain):
+ session.url = inline("""{0}{1}""".format(DEFAULT_CSS_STYLE, DEFAULT_CONTENT))
response = take_screenshot(session)
reference_screenshot = assert_success(response)
assert png_dimensions(reference_screenshot) == viewport_dimensions(session)
- iframe_content = "{0}{1}".format(INNER_IFRAME_STYLE, DEFAULT_CONTENT)
+ iframe_content = "<style>body {{ margin: 0; }}</style>{}".format(DEFAULT_CONTENT)
session.url = inline("""{0}{1}""".format(
- OUTER_IFRAME_STYLE, iframe(iframe_content, domain=domain)))
+ DEFAULT_CSS_STYLE, iframe(iframe_content, domain=domain)))
response = take_screenshot(session)
screenshot = assert_success(response)