1from tests.support.asserts import assert_same_element, assert_success
2
3
4def execute_async_script(session, script, args=None):
5    if args is None:
6        args = []
7    body = {"script": script, "args": args}
8    return session.transport.send(
9        "POST", "/session/{session_id}/execute/async".format(**vars(session)),
10        body)
11
12
13def test_content_attribute(session, inline):
14    session.url = inline("<input value=foobar>")
15    response = execute_async_script(session, """
16        const resolve = arguments[0];
17        const input = document.querySelector("input");
18        resolve(input.value);
19        """)
20    assert_success(response, "foobar")
21
22
23def test_idl_attribute(session, inline):
24    session.url = inline("""
25        <input>
26        <script>
27        const input = document.querySelector("input");
28        input.value = "foobar";
29        </script>
30        """)
31    response = execute_async_script(session, """
32        const resolve = arguments[0];
33        const input = document.querySelector("input");
34        resolve(input.value);
35        """)
36    assert_success(response, "foobar")
37
38
39def test_idl_attribute_element(session, inline):
40    session.url = inline("""
41        <p>foo
42        <p>bar
43
44        <script>
45        const elements = document.querySelectorAll("p");
46        let foo = elements[0];
47        let bar = elements[1];
48        foo.bar = bar;
49        </script>
50        """)
51    _foo, bar = session.find.css("p")
52    response = execute_async_script(session, """
53        const resolve = arguments[0];
54        const foo = document.querySelector("p");
55        resolve(foo.bar);
56        """)
57    value = assert_success(response)
58    assert_same_element(session, bar, value)
59
60
61def test_script_defining_property(session, inline):
62    session.url = inline("<input>")
63    session.execute_script("""
64        const input = document.querySelector("input");
65        input.foobar = "foobar";
66        """)
67    response = execute_async_script(session, """
68        const resolve = arguments[0];
69        const input = document.querySelector("input");
70        resolve(input.foobar);
71        """)
72    assert_success(response, "foobar")
73