1from webdriver.error import NoSuchAlertException
2
3from tests.support.asserts import assert_error, assert_success
4from tests.support.sync import Poll
5
6
7def get_alert_text(session):
8    return session.transport.send(
9        "GET", "session/{session_id}/alert/text".format(**vars(session)))
10
11
12def test_no_top_browsing_context(session, closed_window):
13    response = get_alert_text(session)
14    assert_error(response, "no such window")
15
16
17def test_no_browsing_context(session, closed_frame):
18    response = get_alert_text(session)
19    assert_error(response, "no such alert")
20
21
22def test_no_user_prompt(session):
23    response = get_alert_text(session)
24    assert_error(response, "no such alert")
25
26
27def test_get_alert_text(session, inline):
28    session.url = inline("<script>window.alert('Hello');</script>")
29    response = get_alert_text(session)
30    assert_success(response)
31    assert isinstance(response.body, dict)
32    assert "value" in response.body
33    alert_text = response.body["value"]
34    assert isinstance(alert_text, str)
35    assert alert_text == "Hello"
36
37
38def test_get_confirm_text(session, inline):
39    session.url = inline("<script>window.confirm('Hello');</script>")
40    response = get_alert_text(session)
41    assert_success(response)
42    assert isinstance(response.body, dict)
43    assert "value" in response.body
44    confirm_text = response.body["value"]
45    assert isinstance(confirm_text, str)
46    assert confirm_text == "Hello"
47
48
49def test_get_prompt_text(session, inline):
50    session.url = inline("<script>window.prompt('Enter Your Name: ', 'Federer');</script>")
51    response = get_alert_text(session)
52    assert_success(response)
53    assert isinstance(response.body, dict)
54    assert "value" in response.body
55    prompt_text = response.body["value"]
56    assert isinstance(prompt_text, str)
57    assert prompt_text == "Enter Your Name: "
58
59
60def test_unexpected_alert(session):
61    session.execute_script("setTimeout(function() { alert('Hello'); }, 100);")
62    wait = Poll(
63        session,
64        timeout=5,
65        ignored_exceptions=NoSuchAlertException,
66        message="No user prompt with text 'Hello' detected")
67    wait.until(lambda s: s.alert.text == "Hello")
68
69    response = get_alert_text(session)
70    assert_success(response)
71