Bug 1392274 - Add Navigate Back wdspec tests r?whimboo draft
authorDavid Burns <dburns@mozilla.com>
Tue, 12 Dec 2017 22:20:47 +0000
changeset 807270 bf026d3f0a701593778c7e09ca04a6e5f4ab17b9
parent 807269 c012121f69196fb766536f5b88e8da62b5964bee
child 807271 1b96ba2055e01589a0b1b1263f7cc80a5b99fa11
push id113061
push userbmo:dburns@mozilla.com
push dateWed, 13 Jun 2018 23:48:36 +0000
reviewerswhimboo
bugs1392274
milestone62.0a1
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
testing/web-platform/tests/webdriver/tests/back/back.py
testing/web-platform/tests/webdriver/tests/back/user_prompts.py
--- 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")