1import pytest 2 3from tests.support.asserts import assert_error, assert_same_element, assert_success 4 5 6def get_shadow_root(session, element_id): 7 return session.transport.send( 8 "GET", "session/{session_id}/element/{element_id}/shadow".format( 9 session_id=session.session_id, 10 element_id=element_id)) 11 12 13def test_no_top_browsing_context(session, closed_window): 14 original_handle, element = closed_window 15 response = get_shadow_root(session, element.id) 16 assert_error(response, "no such window") 17 response = get_shadow_root(session, "foo") 18 assert_error(response, "no such window") 19 20 session.window_handle = original_handle 21 response = get_shadow_root(session, element.id) 22 assert_error(response, "no such element") 23 24 25def test_no_browsing_context(session, closed_frame): 26 response = get_shadow_root(session, "foo") 27 assert_error(response, "no such window") 28 29 30def test_element_not_found(session): 31 result = get_shadow_root(session, "foo") 32 assert_error(result, "no such element") 33 34 35def test_element_stale(session, checkbox_dom): 36 session.url = checkbox_dom 37 element = session.find.css("custom-checkbox-element", all=False) 38 session.refresh() 39 40 result = get_shadow_root(session, element.id) 41 assert_error(result, "stale element reference") 42 43 44def test_get_shadow_root(session, checkbox_dom): 45 session.url = checkbox_dom 46 expected = session.execute_script( 47 "return document.querySelector('custom-checkbox-element').shadowRoot.host") 48 custom_element = session.find.css("custom-checkbox-element", all=False) 49 response = get_shadow_root(session, custom_element.id) 50 assert_success(response) 51 assert_same_element(session, custom_element, expected) 52 53 54def test_no_shadow_root(session, inline): 55 session.url = inline("<div><p>no shadow root</p></div>") 56 element = session.find.css("div", all=False) 57 response = get_shadow_root(session, element.id) 58 assert_error(response, "no such shadow root") 59