1import pytest 2 3from tests.support.asserts import assert_success 4 5 6""" 7Tests that WebDriver can transcend site origins. 8 9Many modern browsers impose strict cross-origin checks, 10and WebDriver should be able to transcend these. 11 12Although an implementation detail, certain browsers 13also enforce process isolation based on site origin. 14This is known to sometimes cause problems for WebDriver implementations. 15""" 16 17 18@pytest.fixture 19def frame_doc(inline): 20 return inline("<p>frame") 21 22 23@pytest.fixture 24def one_frame_doc(inline, frame_doc): 25 return inline("<iframe src='%s'></iframe>" % frame_doc) 26 27 28@pytest.fixture 29def nested_frames_doc(inline, one_frame_doc): 30 return inline("<iframe src='%s'></iframe>" % one_frame_doc) 31 32 33def get_current_url(session): 34 return session.transport.send( 35 "GET", "session/{session_id}/url".format(**vars(session))) 36 37 38def test_iframe(session, one_frame_doc): 39 top_level_doc = one_frame_doc 40 session.url = top_level_doc 41 42 frame = session.find.css("iframe", all=False) 43 session.switch_frame(frame) 44 session.find.css("p", all=False) 45 46 response = get_current_url(session) 47 assert_success(response, top_level_doc) 48 49 50def test_nested_iframe(session, nested_frames_doc): 51 session.url = nested_frames_doc 52 top_level_doc = session.url 53 54 outer_frame = session.find.css("iframe", all=False) 55 session.switch_frame(outer_frame) 56 57 inner_frame = session.find.css("iframe", all=False) 58 session.switch_frame(inner_frame) 59 session.find.css("p", all=False) 60 61 response = get_current_url(session) 62 assert_success(response, top_level_doc) 63 64 65@pytest.mark.parametrize("domain", ["", "alt"], ids=["same_origin", "cross_origin"]) 66def test_origin(session, inline, iframe, domain): 67 top_level_doc = inline(iframe("<p>frame", domain=domain)) 68 69 session.url = top_level_doc 70 frame = session.find.css("iframe", all=False) 71 session.switch_frame(frame) 72 session.find.css("p", all=False) 73 74 response = get_current_url(session) 75 assert_success(response, top_level_doc) 76