From 29c3aa8a47faa56d55569b37a8033e1cc3b11c0c Mon Sep 17 00:00:00 2001 From: Andreas Tolfsen Date: Wed, 31 Oct 2018 19:17:50 +0000 Subject: [PATCH] webdriver: poll for document.hidden 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 --- webdriver/tests/maximize_window/maximize.py | 4 ++-- webdriver/tests/minimize_window/minimize.py | 24 +++++++++---------- .../tests/minimize_window/user_prompts.py | 22 ++++++----------- webdriver/tests/set_window_rect/set.py | 6 ++--- webdriver/tests/support/helpers.py | 9 +++++++ 5 files changed, 32 insertions(+), 33 deletions(-) diff --git a/webdriver/tests/maximize_window/maximize.py b/webdriver/tests/maximize_window/maximize.py index 6d315925ea1c6f..b3ed7a680a9f32 100644 --- a/webdriver/tests/maximize_window/maximize.py +++ b/webdriver/tests/maximize_window/maximize.py @@ -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): @@ -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) diff --git a/webdriver/tests/minimize_window/minimize.py b/webdriver/tests/minimize_window/minimize.py index 827a5297dbb6fb..279511caf0afca 100644 --- a/webdriver/tests/minimize_window/minimize.py +++ b/webdriver/tests/minimize_window/minimize.py @@ -1,5 +1,7 @@ +# 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): @@ -7,10 +9,6 @@ def minimize(session): "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") @@ -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) @@ -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) diff --git a/webdriver/tests/minimize_window/user_prompts.py b/webdriver/tests/minimize_window/user_prompts.py index 1551e3af626689..19059b3c395ecd 100644 --- a/webdriver/tests/minimize_window/user_prompts.py +++ b/webdriver/tests/minimize_window/user_prompts.py @@ -3,6 +3,7 @@ import pytest from tests.support.asserts import assert_dialog_handled, assert_error, assert_success +from tests.support.helpers import document_hidden def minimize(session): @@ -10,23 +11,17 @@ def minimize(session): "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 @@ -34,16 +29,14 @@ def check_user_prompt_closed_without_exception(dialog_type, retval): @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 @@ -51,8 +44,7 @@ def check_user_prompt_closed_with_exception(dialog_type, retval): @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) @@ -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 diff --git a/webdriver/tests/set_window_rect/set.py b/webdriver/tests/set_window_rect/set.py index f2c1e0f962d6d4..c6eae2886e9e0a 100644 --- a/webdriver/tests/set_window_rect/set.py +++ b/webdriver/tests/set_window_rect/set.py @@ -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): @@ -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): diff --git a/webdriver/tests/support/helpers.py b/webdriver/tests/support/helpers.py index 54390e438be9e0..dd733809fd5a11 100644 --- a/webdriver/tests/support/helpers.py +++ b/webdriver/tests/support/helpers.py @@ -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): @@ -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.