import json from tests.support.asserts import assert_success _window_id = "window-fcc6-11e5-b4f8-330a88ab9d7f" _frame_id = "frame-075b-4da1-b6ba-e579c2d3230a" def execute_script(session, script, args=None): if args is None: args = [] body = {"script": script, "args": args} return session.transport.send( "POST", "/session/{session_id}/execute/sync".format(**vars(session)), body) def test_initial_window(session): # non-auxiliary top-level browsing context response = execute_script(session, "return window;") raw_json = assert_success(response) obj = json.loads(raw_json) assert len(obj) == 1 assert _window_id in obj handle = obj[_window_id] assert handle in session.window_handles def test_window_open(session): # auxiliary browsing context session.execute_script("window.foo = window.open()") response = execute_script(session, "return window.foo;") raw_json = assert_success(response) obj = json.loads(raw_json) assert len(obj) == 1 assert _window_id in obj handle = obj[_window_id] assert handle in session.window_handles def test_frame(session): # nested browsing context append = """ window.frame = document.createElement('iframe'); document.body.appendChild(frame); """ session.execute_script(append) response = execute_script(session, "return frame.contentWindow;") raw_json = assert_success(response) obj = json.loads(raw_json) assert len(obj) == 1 assert _frame_id in obj handle = obj[_frame_id] assert handle not in session.window_handles