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