blob: c4659f9b9f7bdc40d635cf9bd86f65ecb713dcf3 [file] [log] [blame]
import pytest
import time
from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
from tests.support.fixtures import create_dialog
from tests.support.inline import inline
def read_global(session, name):
return session.execute_script("return %s;" % name)
# 1. If the current top-level browsing context is no longer open, return error
# with error code no such window.
def test_title_from_closed_context(session, create_window):
new_window = create_window()
session.window_handle = new_window
session.close()
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_error(result, "no such window")
# [...]
# 2. Handle any user prompts and return its value if it is an error.
# [...]
# In order to handle any user prompts a remote end must take the following
# steps:
# 2. Run the substeps of the first matching user prompt handler:
#
# [...]
# - dismiss state
# 1. Dismiss the current user prompt.
# [...]
#
# 3. Return success.
def test_title_handle_prompt_dismiss(new_session):
_, session = new_session({"alwaysMatch": {"unhandledPromptBehavior": "dismiss"}})
session.url = inline("<title>WD doc title</title>")
expected_title = read_global(session, "document.title")
create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_success(result, expected_title)
assert_dialog_handled(session, "dismiss #1")
assert read_global(session, "dismiss1") == None
expected_title = read_global(session, "document.title")
create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_success(result, expected_title)
assert_dialog_handled(session, "dismiss #2")
assert read_global(session, "dismiss2") == None
expected_title = read_global(session, "document.title")
create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_success(result, expected_title)
assert_dialog_handled(session, "dismiss #3")
assert read_global(session, "dismiss3") == None
# [...]
# 2. Handle any user prompts and return its value if it is an error.
# [...]
# In order to handle any user prompts a remote end must take the following
# steps:
# 2. Run the substeps of the first matching user prompt handler:
#
# [...]
# - accept state
# 1. Accept the current user prompt.
# [...]
#
# 3. Return success.
def test_title_handle_prompt_accept(new_session):
_, session = new_session({"alwaysMatch": {"unhandledPromptBehavior": "accept"}})
session.url = inline("<title>WD doc title</title>")
create_dialog(session)("alert", text="accept #1", result_var="accept1")
expected_title = read_global(session, "document.title")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_success(result, expected_title)
assert_dialog_handled(session, "accept #1")
assert read_global(session, "accept1") == None
expected_title = read_global(session, "document.title")
create_dialog(session)("confirm", text="accept #2", result_var="accept2")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_success(result, expected_title)
assert_dialog_handled(session, "accept #2")
assert read_global(session, "accept2"), True
expected_title = read_global(session, "document.title")
create_dialog(session)("prompt", text="accept #3", result_var="accept3")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_success(result, expected_title)
assert_dialog_handled(session, "accept #3")
assert read_global(session, "accept3") == ""
# [...]
# 2. Handle any user prompts and return its value if it is an error.
# [...]
# In order to handle any user prompts a remote end must take the following
# steps:
# 2. Run the substeps of the first matching user prompt handler:
#
# [...]
# - missing value default state
# - not in the table of simple dialogs
# 1. Dismiss the current user prompt.
# 2. Return error with error code unexpected alert open.
def test_title_handle_prompt_missing_value(session, create_dialog):
session.url = inline("<title>WD doc title</title>")
create_dialog("alert", text="dismiss #1", result_var="dismiss1")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_error(result, "unexpected alert open")
assert_dialog_handled(session, "dismiss #1")
assert read_global(session, "accept1") == None
create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_error(result, "unexpected alert open")
assert_dialog_handled(session, "dismiss #2")
assert read_global(session, "dismiss2") == False
create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_error(result, "unexpected alert open")
assert_dialog_handled(session, "dismiss #3")
assert read_global(session, "dismiss3") == None
# The behavior of the `window.print` function is platform-dependent and may not
# trigger the creation of a dialog at all. Therefore, this test should only be
# run in contexts that support the dialog (a condition that may not be
# determined automatically).
#def test_title_with_non_simple_dialog(session):
# document = "<title>With non-simple dialog</title><h2>Hello</h2>"
# spawn = """
# var done = arguments[0];
# setTimeout(function() {
# done();
# }, 0);
# setTimeout(function() {
# window['print']();
# }, 0);
# """
# session.url = inline(document)
# session.execute_async_script(spawn)
#
# result = session.transport.send("GET",
# "session/%s/title" % session.session_id)
# assert_error(result, "unexpected alert open")
# [...]
# 3. Let title be the initial value of the title IDL attribute of the current
# top-level browsing context's active document.
# 4. Return success with data title.
# [...]
# The title attribute must, on getting, run the following algorithm:
# [...]
# 2. Otherwise, let value be the child text content of the title element [...]
# [...]
# 4. Return value.
def test_title_from_top_context(session):
session.url = inline("<title>Foobar</title><h2>Hello</h2>")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_success(result, read_global(session, "document.title"))
# [...]
# 3. Let title be the initial value of the title IDL attribute of the current
# top-level browsing context's active document.
# 4. Return success with data title.
# [...]
# The title attribute must, on getting, run the following algorithm:
# [...]
# 2. Otherwise, let value be the child text content of the title element [...]
#
# The title element of a document is the first title element in the document
# (in tree order), if there is one, or null otherwise.
#
# [...]
# 4. Return value.
def test_title_with_duplicate_element(session):
session.url = inline("<title>First</title><title>Second</title>")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_success(result, read_global(session, "document.title"))
# [...]
# 3. Let title be the initial value of the title IDL attribute of the current
# top-level browsing context's active document.
# 4. Return success with data title.
# [...]
# The title attribute must, on getting, run the following algorithm:
# [...]
# 2. Otherwise, let value be the child text content of the title element, or
# the empty string if the title element is null.
# [...]
# 4. Return value.
def test_title_without_element(session):
session.url = inline("<h2>Hello</h2>")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_success(result, read_global(session, "document.title"))
# [...]
# 3. Let title be the initial value of the title IDL attribute of the current
# top-level browsing context's active document.
# 4. Return success with data title.
def test_title_after_modification(session):
session.url = inline("<title>Initial</title><h2>Hello</h2>")
session.execute_script("document.title = 'updated'")
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_success(result, read_global(session, "document.title"))
# [...]
# 3. Let title be the initial value of the title IDL attribute of the current
# top-level browsing context's active document.
# 4. Return success with data title.
# [...]
# The title attribute must, on getting, run the following algorithm:
# [...]
# 2. Otherwise, let value be the child text content of the title element [...]
# 3. Strip and collapse ASCII whitespace in value.
# 4. Return value.
def test_title_strip_and_collapse(session):
document = "<title> a b\tc\nd\t \n e\t\n </title><h2>Hello</h2>"
session.url = inline(document)
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_success(result, read_global(session, "document.title"))
# [...]
# 3. Let title be the initial value of the title IDL attribute of the current
# top-level browsing context's active document.
# 4. Return success with data title.
def test_title_from_frame(session, create_frame):
session.url = inline("<title>Parent</title>parent")
session.switch_frame(create_frame())
session.switch_frame(create_frame())
result = session.transport.send("GET",
"session/%s/title" % session.session_id)
assert_success(result, read_global(session, "document.title"))