1import pytest 2 3from tests.support.asserts import assert_error, assert_same_element, assert_success 4from tests.support.inline import inline 5 6 7def find_element(session, element, using, value): 8 return session.transport.send("POST", 9 "session/%s/element/%s/element" % (session.session_id, element), 10 {"using": using, "value": value}) 11 12 13@pytest.mark.parametrize("using", ["a", True, None, 1, [], {}]) 14def test_invalid_using_argument(session, using): 15 # Step 1 - 2 16 response = find_element(session, "notReal", using, "value") 17 assert_error(response, "invalid argument") 18 19 20@pytest.mark.parametrize("value", [None, [], {}]) 21def test_invalid_selector_argument(session, value): 22 # Step 3 - 4 23 response = find_element(session, "notReal", "css selector", value) 24 assert_error(response, "invalid argument") 25 26 27def test_closed_context(session, create_window): 28 # Step 5 29 new_window = create_window() 30 session.window_handle = new_window 31 session.close() 32 33 response = find_element(session, "notReal", "css selector", "foo") 34 35 assert_error(response, "no such window") 36 37 38@pytest.mark.parametrize("using,value", 39 [("css selector", "#linkText"), 40 ("link text", "full link text"), 41 ("partial link text", "link text"), 42 ("tag name", "a"), 43 ("xpath", "//a")]) 44def test_find_element(session, using, value): 45 # Step 8 - 9 46 session.url = inline("<div><a href=# id=linkText>full link text</a></div>") 47 element = session.find.css("div", all=False) 48 response = find_element(session, element.id, using, value) 49 assert_success(response) 50 51 52@pytest.mark.parametrize("using,value",[("css selector", "#wontExist")]) 53def test_no_element(session, using, value): 54 # Step 8 - 9 55 session.url = inline("<div></div>") 56 element = session.find.css("div", all=False) 57 response = find_element(session, element.id, using, value) 58 assert_error(response, "no such element") 59 60 61@pytest.mark.parametrize("using,value", 62 [("css selector", "#linkText"), 63 ("link text", "full link text"), 64 ("partial link text", "link text"), 65 ("tag name", "a"), 66 ("xpath", "//*[name()='a']")]) 67def test_xhtml_namespace(session, using, value): 68 session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", doctype="xhtml") 69 from_element = session.execute_script("""return document.querySelector("p")""") 70 expected = session.execute_script("return document.links[0]") 71 72 response = find_element(session, from_element.id, using, value) 73 value = assert_success(response) 74 assert_same_element(session, value, expected) 75 76 77def test_parent_htmldocument(session): 78 session.url = inline("") 79 from_element = session.execute_script("return document.documentElement") 80 81 response = find_element(session, from_element.id, "xpath", "..") 82 assert_success(response) 83