Skip to content

Commit

Permalink
webdriver: poll for document.hidden
Browse files Browse the repository at this point in the history
For the time being we need to poll for document.hidden to become
true because certain driver implementations, such as geckodriver,
occasionally does not wait until the DOM property is propagated to
the child process.

Depends on D8408

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

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1492499
gecko-commit: bfe0c0f39dd340c80c0d418cf20b1eac89d65b35
gecko-integration-branch: autoland
gecko-reviewers: automatedtester
  • Loading branch information
andreastt authored and jgraham committed Nov 1, 2018
1 parent b0859af commit 29c3aa8
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 33 deletions.
4 changes: 2 additions & 2 deletions webdriver/tests/maximize_window/maximize.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from tests.support.asserts import assert_error, assert_success
from tests.support.helpers import is_fullscreen
from tests.support.helpers import document_hidden, is_fullscreen


def maximize(session):
Expand All @@ -23,7 +23,7 @@ def test_fully_exit_fullscreen(session):

def test_restore_the_window(session):
session.window.minimize()
assert session.execute_script("return document.hidden") is True
assert document_hidden(session)

response = maximize(session)
assert_success(response)
Expand Down
24 changes: 11 additions & 13 deletions webdriver/tests/minimize_window/minimize.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
# META: timeout=long

from tests.support.asserts import assert_error, assert_success
from tests.support.helpers import is_fullscreen
from tests.support.helpers import document_hidden, is_fullscreen


def minimize(session):
return session.transport.send(
"POST", "session/{session_id}/window/minimize".format(**vars(session)))


def is_minimized(session):
return session.execute_script("return document.hidden")


def test_no_browsing_context(session, closed_window):
response = minimize(session)
assert_error(response, "no such window")
Expand All @@ -23,19 +21,19 @@ def test_fully_exit_fullscreen(session):
response = minimize(session)
assert_success(response)
assert not is_fullscreen(session)
assert is_minimized(session)
assert document_hidden(session)


def test_minimize(session):
assert not is_minimized(session)
assert not document_hidden(session)

response = minimize(session)
assert_success(response)
assert is_minimized(session)
assert document_hidden(session)


def test_payload(session):
assert not is_minimized(session)
assert not document_hidden(session)

response = minimize(session)
value = assert_success(response)
Expand All @@ -51,16 +49,16 @@ def test_payload(session):
assert isinstance(value["x"], int)
assert isinstance(value["y"], int)

assert is_minimized(session)
assert document_hidden(session)


def test_minimize_twice_is_idempotent(session):
assert not is_minimized(session)
assert not document_hidden(session)

first_response = minimize(session)
assert_success(first_response)
assert is_minimized(session)
assert document_hidden(session)

second_response = minimize(session)
assert_success(second_response)
assert is_minimized(session)
assert document_hidden(session)
22 changes: 7 additions & 15 deletions webdriver/tests/minimize_window/user_prompts.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,56 +3,48 @@
import pytest

from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
from tests.support.helpers import document_hidden


def minimize(session):
return session.transport.send(
"POST", "session/{session_id}/window/minimize".format(**vars(session)))


def is_minimized(session):
return session.execute_script("return document.hidden")


@pytest.fixture
def check_user_prompt_closed_without_exception(session, create_dialog):
def check_user_prompt_closed_without_exception(dialog_type, retval):
assert not is_minimized(session)

assert not document_hidden(session)
create_dialog(dialog_type, text=dialog_type)

response = minimize(session)
assert_success(response)

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

assert is_minimized(session)
assert document_hidden(session)

return check_user_prompt_closed_without_exception


@pytest.fixture
def check_user_prompt_closed_with_exception(session, create_dialog):
def check_user_prompt_closed_with_exception(dialog_type, retval):
assert not is_minimized(session)

assert not document_hidden(session)
create_dialog(dialog_type, text=dialog_type)

response = minimize(session)
assert_error(response, "unexpected alert open")

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

assert not is_minimized(session)
assert not document_hidden(session)

return check_user_prompt_closed_with_exception


@pytest.fixture
def check_user_prompt_not_closed_but_exception(session, create_dialog):
def check_user_prompt_not_closed_but_exception(dialog_type):
assert not is_minimized(session)

assert not document_hidden(session)
create_dialog(dialog_type, text=dialog_type)

response = minimize(session)
Expand All @@ -61,7 +53,7 @@ def check_user_prompt_not_closed_but_exception(dialog_type):
assert session.alert.text == dialog_type
session.alert.dismiss()

assert not is_minimized(session)
assert not document_hidden(session)

return check_user_prompt_not_closed_but_exception

Expand Down
6 changes: 3 additions & 3 deletions webdriver/tests/set_window_rect/set.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from webdriver.transport import Response

from tests.support.asserts import assert_error, assert_success
from tests.support.helpers import is_fullscreen
from tests.support.helpers import document_hidden, is_fullscreen


def set_window_rect(session, rect):
Expand Down Expand Up @@ -144,14 +144,14 @@ def test_fully_exit_fullscreen(session):

def test_restore_from_minimized(session):
session.window.minimize()
assert session.execute_script("return document.hidden") is True
assert document_hidden(session)

response = set_window_rect(session, {"width": 450, "height": 450})
value = assert_success(response)
assert value["width"] == 450
assert value["height"] == 450

assert session.execute_script("return document.hidden") is False
assert not document_hidden(session)


def test_restore_from_maximized(session):
Expand Down
9 changes: 9 additions & 0 deletions webdriver/tests/support/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import webdriver

from tests.support import defaults
from tests.support.sync import Poll


def ignore_exceptions(f):
def inner(*args, **kwargs):
Expand Down Expand Up @@ -119,6 +121,13 @@ 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 Down

0 comments on commit 29c3aa8

Please sign in to comment.