Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Gecko Bug 1455282] wdclient] End session if no more windows are open. #10615

Merged
merged 3 commits into from May 1, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 6 additions & 1 deletion tools/webdriver/webdriver/client.py
Expand Up @@ -536,7 +536,12 @@ def switch_frame(self, frame):

@command
def close(self):
return self.send_session_command("DELETE", "window")
handles = self.send_session_command("DELETE", "window")
if len(handles) == 0:
# With no more open top-level browsing contexts, the session is closed.
self.session_id = None

return handles

@property
@command
Expand Down
38 changes: 38 additions & 0 deletions webdriver/tests/close_window/close.py
@@ -0,0 +1,38 @@
from tests.support.asserts import assert_error, assert_success


def close(session):
return session.transport.send("DELETE", "session/%s/window" % session.session_id)


def test_no_browsing_context(session, create_window):
new_handle = create_window()

session.window_handle = new_handle
session.close()
assert new_handle not in session.handles

response = close(session)
assert_error(response, "no such window")


def test_close_browsing_context(session, create_window):
handles = session.handles

new_handle = create_window()
session.window_handle = new_handle

response = close(session)
value = assert_success(response, handles)
assert session.handles == handles
assert new_handle not in value


def test_close_last_browsing_context(session):
assert len(session.handles) == 1
response = close(session)

assert_success(response, [])

# With no more open top-level browsing contexts, the session is closed.
session.session_id = None
66 changes: 66 additions & 0 deletions webdriver/tests/close_window/user_prompts.py
@@ -0,0 +1,66 @@
from tests.support.asserts import assert_error, assert_dialog_handled
from tests.support.fixtures import create_dialog, create_window
from tests.support.inline import inline


def close(session):
return session.transport.send("DELETE", "session/%s/window" % session.session_id)


def test_handle_prompt_dismiss_and_notify():
"""TODO"""


def test_handle_prompt_accept_and_notify():
"""TODO"""


def test_handle_prompt_ignore():
"""TODO"""


def test_handle_prompt_accept(new_session, add_browser_capabilites):
_, session = new_session({"capabilities": {
"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
session.window_handle = create_window(session)()

session.url = inline("<title>WD doc title</title>")

create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
response = close(session)
assert response.status == 200
assert_dialog_handled(session, "dismiss #1")

create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
response = close(session)
assert response.status == 200
assert_dialog_handled(session, "dismiss #2")

create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
response = close(session)
assert response.status == 200
assert_dialog_handled(session, "dismiss #3")


def test_handle_prompt_missing_value(session, create_dialog, create_window):
session.window_handle = create_window()

session.url = inline("<title>WD doc title</title>")
create_dialog("alert", text="dismiss #1", result_var="dismiss1")

response = close(session)

assert_error(response, "unexpected alert open")
assert_dialog_handled(session, "dismiss #1")

create_dialog("confirm", text="dismiss #2", result_var="dismiss2")

response = close(session)
assert_error(response, "unexpected alert open")
assert_dialog_handled(session, "dismiss #2")

create_dialog("prompt", text="dismiss #3", result_var="dismiss3")

response = close(session)
assert_error(response, "unexpected alert open")
assert_dialog_handled(session, "dismiss #3")
1 change: 1 addition & 0 deletions webdriver/tests/support/fixtures.py
Expand Up @@ -76,6 +76,7 @@ def _restore_windows(session):
session.window_handle = current_window


@ignore_exceptions
def _switch_to_top_level_browsing_context(session):
"""If the current browsing context selected by WebDriver is a
`<frame>` or an `<iframe>`, switch it back to the top-level
Expand Down