Bug 1392274 - Add Navigate Back wdspec tests r?whimboo
These are the wdspec tests for testing the back command in
https://w3c.github.io/webdriver/webdriver-spec.html#back
MozReview-Commit-ID: Hhz2ocpvxbS
--- a/testing/web-platform/tests/webdriver/tests/back/back.py
+++ b/testing/web-platform/tests/webdriver/tests/back/back.py
@@ -1,16 +1,160 @@
from tests.support.inline import inline
-from tests.support.asserts import assert_success
+from tests.support.fixtures import create_dialog
+from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
+
+alert_doc = inline("<script>window.alert()</script>")
+push_state_doc = inline("""
+
+<title>Navigation by manipulating the browser history</title>
+<script type="text/javascript">
+function forward() {
+ var stateObj = { foo: "bar" };
+ history.pushState(stateObj, "", "/common/blank.html");
+}
+</script>
+<p>Navigate <a onclick="javascript:forward();" id="forward">forward</a></p>
+
+""")
def back(session):
- return session.transport.send(
- "POST", "session/{session_id}/back".format(**vars(session)))
+ return session.transport.send("POST", "session/%s/back" % session.session_id)
+
+
+# 9.3 Back
+def test_no_browsing_context(session, create_window):
+ # 9.3 step 1
+ session.window_handle = create_window()
+ session.close()
+
+ result = back(session)
+
+ assert_error(result, "no such window")
+
+
+def test_alert_prompt(session):
+ # 9.3 step 2
+ session.url = alert_doc
+
+ result = back(session)
+
+ assert_error(result, "unexpected alert open")
+
+
+def test_prompt_accept(new_session):
+ _, session = new_session(
+ {"alwaysMatch": {"unhandledPromptBehavior": "accept"}})
+ session.url = inline("<title>WD doc title</title>")
+
+ # step 2
+ create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+ result = back(session)
+
+ assert result.status == 200
+ assert_dialog_handled(session, "dismiss #1")
+
+ create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+ result = back(session)
+
+ assert result.status == 200
+ assert_dialog_handled(session, "dismiss #2")
+
+ create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+ result = back(session)
+
+ assert_success(result)
+ assert_dialog_handled(session, "dismiss #3")
-def test_null_response_value(session):
- session.url = inline("<div>")
- session.url = inline("<p>")
+def test_prompt_dismiss(new_session):
+ _, session = new_session(
+ {"alwaysMatch": {"unhandledPromptBehavior": "dismiss"}})
+ session.url = inline("<title>WD doc title</title>")
+
+ # step 2
+ create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+ result = back(session)
+
+ assert result.status == 200
+ assert_dialog_handled(session, "dismiss #1")
+
+ create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+ result = back(session)
+
+ assert result.status == 200
+ assert_dialog_handled(session, "dismiss #2")
+
+ create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+ result = back(session)
+
+ assert_success(result)
+ assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_missing_value(session, create_dialog):
+
+ # step 2
+ session.url = inline("<title>WD doc title</title>")
+ create_dialog("alert", text="dismiss #1", result_var="dismiss1")
+
+ result = back(session)
+
+ assert_error(result, "unexpected alert open")
+ assert_dialog_handled(session, "dismiss #1")
+
+ create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
+
+ result = back(session)
+
+ assert_error(result, "unexpected alert open")
+ assert_dialog_handled(session, "dismiss #2")
+
+ create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
+
+ result = back(session)
+
+ assert_error(result, "unexpected alert open")
+ assert_dialog_handled(session, "dismiss #3")
+
+
+def test_no_history(session):
+ response = back(session)
+ assert_success(response)
+
+
+def test_data_urls(session):
+ session.url = inline("<title>page 1</title>")
+ session.url = inline("<title>page 2</title>")
+ session.url = inline("<title>page 3</title>")
+
+ title = session.title
+ assert title == "page 3"
response = back(session)
- value = assert_success(response)
- assert value is None
+ assert_success(response)
+
+ title = session.title
+ assert title == "page 2"
+
+ response = back(session)
+ assert_success(response)
+
+ title = session.title
+ assert title == "page 1"
+
+
+def test_history_pushstate(session):
+
+ session.url = push_state_doc
+ session.find.css("#forward")[0].click()
+
+ # History has been injected but the page hasn't changed
+ title = session.title
+ assert title == "Navigation by manipulating the browser history"
+
+ response = back(session)
+ assert_success(response)
+
+ # Check we are just navigating history and not the pages
+ title = session.title
+ assert title == "Navigation by manipulating the browser history"
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/back/user_prompts.py
@@ -0,0 +1,90 @@
+from tests.support.inline import inline
+from tests.support.fixtures import create_dialog
+from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
+
+alert_doc = inline("<script>window.alert()</script>")
+
+
+def test_alert_prompt(session):
+ # 9.3 step 2
+ session.url = alert_doc
+
+ result = back(session)
+
+ assert_error(result, "unexpected alert open")
+
+
+def test_prompt_accept(new_session):
+ _, session = new_session(
+ {"alwaysMatch": {"unhandledPromptBehavior": "accept"}})
+ session.url = inline("<title>WD doc title</title>")
+
+ # step 2
+ create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+ result = back(session)
+
+ assert result.status == 200
+ assert_dialog_handled(session, "dismiss #1")
+
+ create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+ result = back(session)
+
+ assert result.status == 200
+ assert_dialog_handled(session, "dismiss #2")
+
+ create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+ result = back(session)
+
+ assert_success(result)
+ assert_dialog_handled(session, "dismiss #3")
+
+
+def test_prompt_dismiss(new_session):
+ _, session = new_session(
+ {"alwaysMatch": {"unhandledPromptBehavior": "dismiss"}})
+ session.url = inline("<title>WD doc title</title>")
+
+ # step 2
+ create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+ result = back(session)
+
+ assert result.status == 200
+ assert_dialog_handled(session, "dismiss #1")
+
+ create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+ result = back(session)
+
+ assert result.status == 200
+ assert_dialog_handled(session, "dismiss #2")
+
+ create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+ result = back(session)
+
+ assert_success(result)
+ assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_missing_value(session, create_dialog):
+
+ # step 2
+ session.url = inline("<title>WD doc title</title>")
+ create_dialog("alert", text="dismiss #1", result_var="dismiss1")
+
+ result = back(session)
+
+ assert_error(result, "unexpected alert open")
+ assert_dialog_handled(session, "dismiss #1")
+
+ create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
+
+ result = back(session)
+
+ assert_error(result, "unexpected alert open")
+ assert_dialog_handled(session, "dismiss #2")
+
+ create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
+
+ result = back(session)
+
+ assert_error(result, "unexpected alert open")
+ assert_dialog_handled(session, "dismiss #3")