blob: 7677a5215b9d7932bde07c26e92d310f972a4242 [file] [log] [blame]
import pytest
import webdriver.protocol as protocol
from tests.support.asserts import assert_error, assert_success
def switch_to_frame(session, frame):
return session.transport.send(
"POST", "session/{session_id}/frame".format(**vars(session)),
{"id": frame},
encoder=protocol.Encoder, decoder=protocol.Decoder,
session=session)
def frameset(inline, *docs):
frames = list(map(lambda doc: "<frame src='{}'></frame>".format(inline(doc)), docs))
return "<frameset rows='{}'>\n{}</frameset>".format(len(frames) * "*,", "\n".join(frames))
@pytest.mark.parametrize("index, value", [[0, "foo"], [1, "bar"]])
def test_frame_id_webelement_frame(session, inline, index, value):
session.url = inline(frameset(inline, "<p>foo", "<p>bar"))
frames = session.find.css("frame")
assert len(frames) == 2
response = switch_to_frame(session, frames[index])
assert_success(response)
element = session.find.css("p", all=False)
assert element.text == value
@pytest.mark.parametrize("index, value", [[0, "foo"], [1, "bar"]])
def test_frame_id_webelement_iframe(session, inline, iframe, 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)
element = session.find.css("p", all=False)
assert element.text == value
def test_frame_id_webelement_nested(session, inline, iframe):
session.url = inline(iframe("{}<p>foo".format(iframe("<p>bar"))))
expected_text = ["foo", "bar"]
for i in range(0, len(expected_text)):
frame_element = session.find.css("iframe", all=False)
response = switch_to_frame(session, frame_element)
assert_success(response)
element = session.find.css("p", all=False)
assert element.text == expected_text[i]
def test_frame_id_webelement_no_element_reference(session, inline, iframe):
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_id_webelement_stale_reference(session, inline, iframe):
session.url = inline(iframe("<p>foo"))
frame = session.find.css("iframe", all=False)
session.refresh()
response = switch_to_frame(session, frame)
assert_error(response, "stale element reference")
def test_frame_id_webelement_no_frame_element(session, inline):
session.url = inline("<p>foo")
no_frame = session.find.css("p", all=False)
response = switch_to_frame(session, no_frame)
assert_error(response, "no such frame")