def test_frame_id_number_index(session, index, value): session.url = inline("{}{}".format(iframe("<p>foo"), iframe("<p>bar"))) response = switch_to_frame(session, index) assert_success(response) element = session.find.css("p", all=False) assert element.text == value
def test_frame_id_number_index_nested(session): session.url = inline(iframe("{}<p>foo".format(iframe("<p>bar")))) expected_text = ["foo", "bar"] for i in range(0, len(expected_text)): response = switch_to_frame(session, 0) assert_success(response) element = session.find.css("p", all=False) assert element.text == expected_text[i]
def test_frame_id_webelement_iframe(session, index, value): session.url = inline("{}{}".format(iframe("<p>foo"), iframe("<p>bar"))) frames = session.find.css("iframe") assert len(frames) == 2 response = switch_to_frame(session, frames[index]) assert_success(response) frame_element = session.find.css("p", all=False) assert frame_element.text == value
def test_link_from_nested_context_with_target(session, target): target_page = inline("<p id='foo'>foo</p>") session.url = inline( iframe("<a href='{}' target='{}'>click</a>".format( target_page, target))) frame = session.find.css("iframe", all=False) session.switch_frame(frame) element = session.find.css("a".format(target), all=False) orig_handles = session.handles response = element_click(session, element) assert_success(response) if target == "_blank": session.window_handle = wait_for_new_handle(session, orig_handles) # With the current browsing context removed the navigation should # not timeout. Switch to the target context, and wait until the expected # element is available. if target == "_parent": session.switch_frame("parent") elif target == "_top": session.switch_frame(None) wait = Poll(session, timeout=5, ignored_exceptions=NoSuchElementException, message="Expected element has not been found") wait.until(lambda s: s.find.css("#foo"))
def test_null_response_value(session): session.url = inline(iframe("<p>foo")) frame_element = session.find.css("iframe", all=False) response = switch_to_frame(session, frame_element) value = assert_success(response) assert value is None
def test_frame_id_webelement_no_element_reference(session): session.url = inline(iframe("<p>foo")) frame = session.find.css("iframe", all=False) frame.id = "bar" response = switch_to_frame(session, frame) assert_error(response, "no such element")
def test_frame_element(session): # Create a reference element which looks exactly like the frame's content session.url = inline("{0}{1}".format(REFERENCE_STYLE, REFERENCE_CONTENT)) # Capture the inner content as reference image ref_el = session.find.css("#content", all=False) ref_screenshot = ref_el.screenshot() ref_dimensions = element_dimensions(session, ref_el) assert png_dimensions(ref_screenshot) == ref_dimensions # Capture the frame's element iframe_content = "{0}{1}".format(INNER_IFRAME_STYLE, DEFAULT_CONTENT) session.url = inline("""{0}{1}""".format(OUTER_IFRAME_STYLE, iframe(iframe_content))) frame = session.find.css("iframe", all=False) session.switch_frame(frame) div = session.find.css("div", all=False) div_dimensions = element_dimensions(session, div) assert div_dimensions == ref_dimensions response = take_element_screenshot(session, div.id) div_screenshot = assert_success(response) assert png_dimensions(div_screenshot) == ref_dimensions assert div_screenshot == ref_screenshot
def test_null_response_value(session): session.url = inline(iframe("<p>foo")) frame_element = session.find.css("iframe", all=False) response = switch_to_frame(session, frame_element) value = assert_success(response) assert value is None
def test_stale_element_from_iframe(session): session.url = inline(iframe("<p>foo")) frame_element = session.find.css("iframe", all=False) session.switch_frame(frame_element) stale_element = session.find.css("p", all=False) switch_to_parent_frame(session) with pytest.raises(StaleElementReferenceException): stale_element.text
def test_frame_id_webelement_stale_reference(session): session.url = inline(iframe("<p>foo")) frame = session.find.css("iframe", all=False) session.switch_frame(frame) response = switch_to_frame(session, frame) assert_error(response, "stale element reference")
def test_cross_origin_iframe(session, server_config): session.url = inline(iframe("", subdomain="www")) frame_element = session.find.css("iframe", all=False) response = switch_to_frame(session, frame_element) value = assert_success(response) assert document_location(session).startswith("http://www.{}".format( server_config["browser_host"]))
def test_stale_element_from_iframe(session): session.url = inline(iframe("<p>foo")) frame_element = session.find.css("iframe", all=False) session.switch_frame(frame_element) stale_element = session.find.css("p", all=False) switch_to_parent_frame(session) with pytest.raises(StaleElementReferenceException): stale_element.text
def test_cross_origin_iframe(session, server_config): session.url = inline(iframe("", domain="alt")) frame_element = session.find.css("iframe", all=False) response = switch_to_frame(session, frame_element) assert_success(response) parse_result = urlparse(document_location(session)) assert parse_result.netloc != server_config["browser_host"]
def test_origin(session, domain, url): top_level_doc = inline(iframe("<p>frame", domain=domain)) session.url = top_level_doc frame = session.find.css("iframe", all=False) session.switch_frame(frame) session.find.css("p", all=False) response = get_current_url(session) assert_success(response, top_level_doc)
def test_origin(session, domain, url): session.url = inline("<title>foo</title>{}".format( iframe("<title>bar</title><p>frame", domain=domain))) frame = session.find.css("iframe", all=False) session.switch_frame(frame) session.find.css("p", all=False) response = get_title(session) assert_success(response, "foo")
def test_nested_cross_origin_iframe(session, server_config): frame2 = iframe("", subdomain="www.www") frame1 = iframe(frame2, subdomain="www") top_doc = inline(frame1, subdomain="") session.url = top_doc assert document_location(session).startswith("http://{}".format( server_config["browser_host"])) frame1_el = session.find.css("iframe", all=False) response = switch_to_frame(session, frame1_el) value = assert_success(response) assert document_location(session).startswith("http://www.{}".format( server_config["browser_host"])) frame2_el = session.find.css("iframe", all=False) response = switch_to_frame(session, frame2_el) value = assert_success(response) assert document_location(session).startswith("http://www.www.{}".format( server_config["browser_host"]))
def test_switch_to_window_sets_top_level_context(session): session.url = inline(iframe("<p>foo")) frame = session.find.css("iframe", all=False) session.switch_frame(frame) session.find.css("p", all=False) response = switch_to_window(session, session.window_handle) assert_success(response) session.find.css("iframe", all=False)
def test_frame_id_null(session): session.url = inline(iframe("{}<div>foo".format(iframe("<p>bar")))) frame1 = session.find.css("iframe", all=False) session.switch_frame(frame1) element1 = session.find.css("div", all=False) frame2 = session.find.css("iframe", all=False) session.switch_frame(frame2) element2 = session.find.css("p", all=False) # Switch to top-level browsing context response = switch_to_frame(session, None) assert_success(response) with pytest.raises(StaleElementReferenceException): element2.text with pytest.raises(StaleElementReferenceException): element1.text frame = session.find.css("iframe", all=False) assert_same_element(session, frame, frame1)
def test_nested_cross_origin_iframe(session, server_config): frame2 = iframe("", domain="alt", subdomain="www") frame1 = iframe(frame2) top_doc = inline(frame1, domain="alt") session.url = top_doc parse_result = urlparse(document_location(session)) top_level_host = parse_result.netloc assert not top_level_host.startswith(server_config["browser_host"]) frame1_element = session.find.css("iframe", all=False) response = switch_to_frame(session, frame1_element) assert_success(response) parse_result = urlparse(document_location(session)) assert parse_result.netloc.startswith(server_config["browser_host"]) frame2_el = session.find.css("iframe", all=False) response = switch_to_frame(session, frame2_el) assert_success(response) parse_result = urlparse(document_location(session)) assert parse_result.netloc == "www.{}".format(top_level_host)
def test_source_origin(session, domain): session.url = inline("{0}{1}".format(REFERENCE_STYLE, REFERENCE_CONTENT)) response = take_screenshot(session) reference_screenshot = assert_success(response) assert png_dimensions(reference_screenshot) == viewport_dimensions(session) iframe_content = "{0}{1}".format(INNER_IFRAME_STYLE, DEFAULT_CONTENT) session.url = inline("""{0}{1}""".format( OUTER_IFRAME_STYLE, iframe(iframe_content, domain=domain))) response = take_screenshot(session) screenshot = assert_success(response) assert png_dimensions(screenshot) == viewport_dimensions(session) assert screenshot == reference_screenshot
def test_always_captures_top_browsing_context(session): iframe_content = "{0}{1}".format(INNER_IFRAME_STYLE, DEFAULT_CONTENT) session.url = inline("""{0}{1}""".format(OUTER_IFRAME_STYLE, iframe(iframe_content))) response = take_screenshot(session) reference_screenshot = assert_success(response) assert png_dimensions(reference_screenshot) == viewport_dimensions(session) frame = session.find.css("iframe", all=False) session.switch_frame(frame) response = take_screenshot(session) screenshot = assert_success(response) assert png_dimensions(screenshot) == png_dimensions(reference_screenshot) assert screenshot == reference_screenshot
def test_source_origin(session, url, domain): session.url = inline("""{0}{1}""".format(DEFAULT_CSS_STYLE, DEFAULT_CONTENT)) response = take_full_screenshot(session) reference_screenshot = assert_success(response) assert png_dimensions(reference_screenshot) == document_dimensions(session) iframe_content = "<style>body {{ margin: 0; }}</style>{}".format( DEFAULT_CONTENT) session.url = inline("""{0}{1}""".format( DEFAULT_CSS_STYLE, iframe(iframe_content, domain=domain))) response = take_full_screenshot(session) screenshot = assert_success(response) assert png_dimensions(screenshot) == document_dimensions(session) assert screenshot == reference_screenshot
def test_iframe_is_interactable(session): session.url = inline(iframe(""" <body onkeypress="document.querySelector('input').value += event.key"> <input> </body> """)) body = session.find.css("body", all=False) frame = session.find.css("iframe", all=False) # By default the body has the focus assert session.active_element is body response = element_send_keys(session, frame, "foo") assert_success(response) assert session.active_element is frame # Any key events are immediately routed to the nested # browsing context's active document. session.switch_frame(frame) result = session.find.css("input", all=False) assert result.property("value") == "foo"
def test_iframe_is_interactable(session): session.url = inline(iframe(""" <body onkeypress="document.getElementById('result').value += event.key"> <input type="text" id="result"/> </body> """)) body = session.find.css("body", all=False) frame = session.find.css("iframe", all=False) # By default the body has the focus assert_same_element(session, body, session.active_element) response = send_keys_to_element(session, frame, "foo") assert_success(response) assert_same_element(session, frame, session.active_element) # Any key events are immediately routed to the nested # browsing context's active document. session.switch_frame(frame) result = session.find.css("input", all=False) assert result.property("value") == "foo"
def test_source_origin(session, url, domain): # Create a reference element which looks exactly like the iframe session.url = inline("{0}{1}".format(REFERENCE_STYLE, REFERENCE_CONTENT)) div = session.find.css("div", all=False) div_dimensions = element_dimensions(session, div) response = take_element_screenshot(session, div.id) reference_screenshot = assert_success(response) assert png_dimensions(reference_screenshot) == div_dimensions iframe_content = "{0}{1}".format(INNER_IFRAME_STYLE, DEFAULT_CONTENT) session.url = inline("""{0}{1}""".format( OUTER_IFRAME_STYLE, iframe(iframe_content, domain=domain))) frame_element = session.find.css("iframe", all=False) frame_dimensions = element_dimensions(session, frame_element) response = take_element_screenshot(session, frame_element.id) screenshot = assert_success(response) assert png_dimensions(screenshot) == frame_dimensions assert screenshot == reference_screenshot
def test_source_origin(session, url, domain): session.url = inline("""{0}{1}""".format(DEFAULT_CSS_STYLE, DEFAULT_CONTENT)) element = session.find.css("div", all=False) rect = element_rect(session, element) response = take_element_screenshot(session, element.id) reference_screenshot = assert_success(response) assert png_dimensions(reference_screenshot) == (rect["width"], rect["height"]) iframe_content = "<style>body {{ margin: 0; }}</style>{}".format( DEFAULT_CONTENT) session.url = inline("""{0}{1}""".format( DEFAULT_CSS_STYLE, iframe(iframe_content, domain=domain))) frame_element = session.find.css("iframe", all=False) frame_rect = element_rect(session, frame_element) response = take_element_screenshot(session, frame_element.id) screenshot = assert_success(response) assert png_dimensions(screenshot) == (frame_rect["width"], frame_rect["height"]) assert screenshot == reference_screenshot
def test_frame_id_number_index_out_of_bounds(session, index): session.url = inline(iframe("<p>foo")) response = switch_to_frame(session, index) assert_error(response, "no such frame")