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_elements(session, using, value): 8 return session.transport.send("POST", 9 "session/%s/elements" % session.session_id, 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_elements(session, 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_elements(session, "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 = session.transport.send("POST", 34 "session/%s/elements" % session.session_id, 35 {"using": "css selector", "value": "foo"}) 36 37 assert_error(response, "no such window") 38 39 40@pytest.mark.parametrize("using,value", 41 [("css selector", "#linkText"), 42 ("link text", "full link text"), 43 ("partial link text", "link text"), 44 ("tag name", "a"), 45 ("xpath", "//a")]) 46def test_find_elements(session, using, value): 47 # Step 8 - 9 48 session.url = inline("<a href=# id=linkText>full link text</a>") 49 50 response = find_elements(session, using, value) 51 assert_success(response) 52 assert len(response.body["value"]) == 1 53 54 55@pytest.mark.parametrize("using,value", [("css selector", "#wontExist")]) 56def test_no_element(session, using, value): 57 # Step 8 - 9 58 response = find_elements(session, using, value) 59 assert_success(response) 60 assert response.body["value"] == [] 61 62 63@pytest.mark.parametrize("using,value", 64 [("css selector", "#linkText"), 65 ("link text", "full link text"), 66 ("partial link text", "link text"), 67 ("tag name", "a"), 68 ("xpath", "//*[name()='a']")]) 69def test_xhtml_namespace(session, using, value): 70 session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""", doctype="xhtml") 71 expected = session.execute_script("return document.links[0]") 72 73 response = find_elements(session, using, value) 74 value = assert_success(response) 75 assert isinstance(value, list) 76 assert len(value) == 1 77 78 found_element = value[0] 79 assert_same_element(session, found_element, expected) 80 81 82@pytest.mark.parametrize("using,value", 83 [("css selector", ":root"), 84 ("tag name", "html"), 85 ("xpath", "/html")]) 86def test_htmldocument(session, using, value): 87 session.url = inline("") 88 response = find_elements(session, using, value) 89 value = assert_success(response) 90 assert isinstance(value, list) 91 assert len(value) == 1 92