tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

switch.py (3826B)


      1 import pytest
      2 
      3 import webdriver.protocol as protocol
      4 
      5 from webdriver import NoSuchElementException
      6 from webdriver.transport import Response
      7 
      8 from tests.support.asserts import assert_error, assert_same_element, assert_success
      9 
     10 
     11 def switch_to_frame(session, frame):
     12    return session.transport.send(
     13        "POST", "session/{session_id}/frame".format(**vars(session)),
     14        {"id": frame},
     15        encoder=protocol.Encoder, decoder=protocol.Decoder,
     16        session=session)
     17 
     18 
     19 def test_null_parameter_value(session, http):
     20    path = "/session/{session_id}/frame".format(**vars(session))
     21    with http.post(path, None) as response:
     22        assert_error(Response.from_http(response), "invalid argument")
     23 
     24 
     25 def test_null_response_value(session, inline, iframe):
     26    session.url = inline(iframe("<p>foo"))
     27    frame = session.find.css("iframe", all=False)
     28 
     29    response = switch_to_frame(session, frame)
     30    value = assert_success(response)
     31    assert value is None
     32 
     33 
     34 @pytest.mark.parametrize("id", [
     35    None,
     36    0,
     37    {"element-6066-11e4-a52e-4f735466cecf": "foo"},
     38 ])
     39 def test_no_top_browsing_context(session, url, id):
     40    session.window_handle = session.new_window()
     41 
     42    session.url = url("/webdriver/tests/support/html/frames.html")
     43 
     44    subframe = session.find.css("#sub-frame", all=False)
     45    session.switch_to_frame(subframe)
     46 
     47    session.window.close()
     48 
     49    response = switch_to_frame(session, id)
     50    assert_error(response, "no such window")
     51 
     52 
     53 @pytest.mark.parametrize("id", [
     54    None,
     55    0,
     56    {"element-6066-11e4-a52e-4f735466cecf": "foo"},
     57 ])
     58 def test_no_browsing_context(session, closed_frame, id):
     59    response = switch_to_frame(session, id)
     60    if id is None:
     61        assert_success(response)
     62        session.find.css("#delete", all=False)
     63    else:
     64        assert_error(response, "no such window")
     65 
     66 
     67 def test_no_browsing_context_when_already_top_level(session, closed_window):
     68    response = switch_to_frame(session, None)
     69    assert_error(response, "no such window")
     70 
     71 
     72 @pytest.mark.parametrize("value", ["foo", True, [], {}])
     73 def test_frame_id_invalid_types(session, value):
     74    response = switch_to_frame(session, value)
     75    assert_error(response, "invalid argument")
     76 
     77 
     78 def test_frame_id_shadow_root(session, get_test_page):
     79    session.url = get_test_page()
     80 
     81    element = session.find.css("custom-element", all=False)
     82 
     83    result = switch_to_frame(session, element.shadow_root)
     84    assert_error(result, "invalid argument")
     85 
     86 
     87 def test_frame_id_null(session, inline, iframe):
     88    session.url = inline(iframe("{}<div>foo".format(iframe("<p>bar"))))
     89 
     90    frame1 = session.find.css("iframe", all=False)
     91    session.switch_to_frame(frame1)
     92    element1 = session.find.css("div", all=False)
     93 
     94    frame2 = session.find.css("iframe", all=False)
     95    session.switch_to_frame(frame2)
     96    element2 = session.find.css("p", all=False)
     97 
     98    # Switch to top-level browsing context
     99    response = switch_to_frame(session, None)
    100    assert_success(response)
    101 
    102    with pytest.raises(NoSuchElementException):
    103        element2.text
    104    with pytest.raises(NoSuchElementException):
    105        element1.text
    106 
    107    frame = session.find.css("iframe", all=False)
    108    assert_same_element(session, frame, frame1)
    109 
    110 
    111 def test_find_element_while_frame_is_still_loading(session, url):
    112    session.timeouts.implicit = 5
    113 
    114    frame_url = url("/webdriver/tests/support/html/subframe.html?pipe=trickle(d2)")
    115    page_url = "<html><body><iframe src='{}'></iframe></body></html>".format(frame_url)
    116 
    117    session.execute_script(
    118        "document.documentElement.innerHTML = arguments[0];", args=[page_url])
    119 
    120    frame1 = session.find.css("iframe", all=False)
    121    session.switch_to_frame(frame1)
    122 
    123    # Ensure that the is always a valid browsing context, and the element
    124    # can be found eventually.
    125    session.find.css("#delete", all=False)