1from tests.support.asserts import assert_error, assert_is_active_element, assert_success 2 3 4def read_global(session, name): 5 return session.execute_script("return %s;" % name) 6 7 8def get_active_element(session): 9 return session.transport.send( 10 "GET", "session/{session_id}/element/active".format(**vars(session))) 11 12 13def test_no_top_browsing_context(session, closed_window): 14 response = get_active_element(session) 15 assert_error(response, "no such window") 16 17 18def test_no_browsing_context(session, closed_frame): 19 response = get_active_element(session) 20 assert_error(response, "no such window") 21 22 23def test_success_document(session, inline): 24 session.url = inline(""" 25 <body> 26 <h1>Heading</h1> 27 <input /> 28 <input /> 29 <input style="opacity: 0" /> 30 <p>Another element</p> 31 </body>""") 32 33 response = get_active_element(session) 34 element = assert_success(response) 35 assert_is_active_element(session, element) 36 37 38def test_sucess_input(session, inline): 39 session.url = inline(""" 40 <body> 41 <h1>Heading</h1> 42 <input autofocus /> 43 <input style="opacity: 0" /> 44 <p>Another element</p> 45 </body>""") 46 47 response = get_active_element(session) 48 element = assert_success(response) 49 assert_is_active_element(session, element) 50 51 52def test_sucess_input_non_interactable(session, inline): 53 session.url = inline(""" 54 <body> 55 <h1>Heading</h1> 56 <input /> 57 <input style="opacity: 0" autofocus /> 58 <p>Another element</p> 59 </body>""") 60 61 response = get_active_element(session) 62 element = assert_success(response) 63 assert_is_active_element(session, element) 64 65 66def test_success_explicit_focus(session, inline): 67 session.url = inline(""" 68 <body> 69 <h1>Heading</h1> 70 <input /> 71 <iframe></iframe> 72 </body>""") 73 74 session.execute_script("document.body.getElementsByTagName('h1')[0].focus()") 75 response = get_active_element(session) 76 element = assert_success(response) 77 assert_is_active_element(session, element) 78 79 session.execute_script("document.body.getElementsByTagName('input')[0].focus()") 80 response = get_active_element(session) 81 element = assert_success(response) 82 assert_is_active_element(session, element) 83 84 session.execute_script("document.body.getElementsByTagName('iframe')[0].focus()") 85 response = get_active_element(session) 86 element = assert_success(response) 87 assert_is_active_element(session, element) 88 89 session.execute_script("document.body.getElementsByTagName('iframe')[0].focus();") 90 session.execute_script(""" 91 var iframe = document.body.getElementsByTagName('iframe')[0]; 92 if (iframe.remove) { 93 iframe.remove(); 94 } else { 95 iframe.removeNode(true); 96 }""") 97 response = get_active_element(session) 98 element = assert_success(response) 99 assert_is_active_element(session, element) 100 101 session.execute_script("document.body.appendChild(document.createElement('textarea'))") 102 response = get_active_element(session) 103 element = assert_success(response) 104 assert_is_active_element(session, element) 105 106 107def test_success_iframe_content(session, inline): 108 session.url = inline("<body></body>") 109 session.execute_script(""" 110 let iframe = document.createElement('iframe'); 111 document.body.appendChild(iframe); 112 let input = iframe.contentDocument.createElement('input'); 113 iframe.contentDocument.body.appendChild(input); 114 input.focus(); 115 """) 116 117 response = get_active_element(session) 118 element = assert_success(response) 119 assert_is_active_element(session, element) 120 121 122def test_missing_document_element(session, inline): 123 session.url = inline("<body></body>") 124 session.execute_script(""" 125 if (document.body.remove) { 126 document.body.remove(); 127 } else { 128 document.body.removeNode(true); 129 }""") 130 131 response = get_active_element(session) 132 assert_error(response, "no such element") 133