diff options
Diffstat (limited to 'testing/web-platform/tests/webdriver/navigation.py')
-rw-r--r-- | testing/web-platform/tests/webdriver/navigation.py | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webdriver/navigation.py b/testing/web-platform/tests/webdriver/navigation.py new file mode 100644 index 000000000..74f4ef9f7 --- /dev/null +++ b/testing/web-platform/tests/webdriver/navigation.py @@ -0,0 +1,109 @@ +import json +import pytest +import types +import urllib + +import webdriver + + +def inline(doc): + return "data:text/html;charset=utf-8,%s" % urllib.quote(doc) + + +alert_doc = inline("<script>window.alert()</script>") +frame_doc = inline("<p>frame") +one_frame_doc = inline("<iframe src='%s'></iframe>" % frame_doc) +two_frames_doc = inline("<iframe src='%s'></iframe>" % one_frame_doc) + + +@pytest.fixture +def new_window(session): + """Open new window and return the window handle.""" + windows_before = session.window_handles + name = session.execute_script("window.open()") + assert len(session.window_handles) == len(windows_before) + 1 + new_windows = session.window_handles - windows_before + return new_windows.pop() + + +# TODO(ato): 7.1 Get + + +def test_get_current_url_no_browsing_context(session, new_window): + # 7.2 step 1 + session.window_handle = new_window + session.close() + with pytest.raises(webdriver.NoSuchWindowException): + session.url = "about:blank" + + +def test_get_current_url_alert_prompt(session): + # 7.2 step 2 + session.url = alert_doc + with pytest.raises(webdriver.UnexpectedAlertOpenException): + session.url = "about:blank" + + +def test_get_current_url_matches_location(session): + # 7.2 step 3 + url = session.execute_script("return window.location.href") + assert session.url == url + + +def test_get_current_url_payload(http, session): + # 7.2 step 4-5 + session.start() + with http.get("/session/%s/url" % session.session_id) as resp: + assert resp.status == 200 + body = json.load(resp) + assert "value" in body + assert isinstance(body["value"], types.StringTypes) + + +def test_get_current_url_special_pages(session): + session.url = "about:blank" + assert session.url == "about:blank" + + +# TODO(ato): This test requires modification to pass on Windows +def test_get_current_url_file_protocol(session): + # tests that the browsing context remains the same + # when navigated privileged documents + session.url = "file:///" + assert session.url == "file:///" + + +# TODO(ato): Test for http:// and https:// protocols. +# We need to expose a fixture for accessing +# documents served by wptserve in order to test this. + + +def test_get_current_url_malformed_url(session): + session.url = "foo" + assert session.url + + +def test_get_current_url_after_modified_location(session): + session.execute_script("window.location.href = 'about:blank'") + assert session.url == "about:blank" + + +def test_get_current_url_nested_browsing_context(session): + session.url = one_frame_doc + top_level_url = session.url + frame = session.find.css("iframe", all=False) + session.switch_frame(frame) + assert session.url == top_level_url + + +def test_get_current_url_nested_browsing_contexts(session): + session.url = two_frames_doc + top_level_url = session.url + + outer_frame = session.find("iframe", all=False) + session.switch_frame(outer_frame) + + inner_frame = session.find("iframe", all=False) + session.switch_frame(frame) + + assert session.url == top_level_url |