from tests.support.asserts import assert_same_element, assert_success def execute_async_script(session, script, args=None): if args is None: args = [] body = {"script": script, "args": args} return session.transport.send( "POST", "/session/{session_id}/execute/async".format(**vars(session)), body) def test_content_attribute(session, inline): session.url = inline("") response = execute_async_script(session, """ const resolve = arguments[0]; const input = document.querySelector("input"); resolve(input.value); """) assert_success(response, "foobar") def test_idl_attribute(session, inline): session.url = inline(""" """) response = execute_async_script(session, """ const resolve = arguments[0]; const input = document.querySelector("input"); resolve(input.value); """) assert_success(response, "foobar") def test_idl_attribute_element(session, inline): session.url = inline("""

foo

bar """) _foo, bar = session.find.css("p") response = execute_async_script(session, """ const resolve = arguments[0]; const foo = document.querySelector("p"); resolve(foo.bar); """) value = assert_success(response) assert_same_element(session, bar, value) def test_script_defining_property(session, inline): session.url = inline("") session.execute_script(""" const input = document.querySelector("input"); input.foobar = "foobar"; """) response = execute_async_script(session, """ const resolve = arguments[0]; const input = document.querySelector("input"); resolve(input.foobar); """) assert_success(response, "foobar")