import json import pytest import webdriver def window_size_supported(session): try: session.window.size = ("a", "b") except webdriver.UnsupportedOperationException: return False except webdriver.InvalidArgumentException: return True def window_position_supported(session): try: session.window.position = ("a", "b") except webdriver.UnsupportedOperationException: return False except webdriver.InvalidArgumentException: return True def test_window_size_types(http, session): if not window_size_supported(session): pytest.skip() with http.get("/session/%s/window/size" % session.session_id) as resp: assert resp.status == 200 body = json.load(resp) assert "value" in body assert "width" in body["value"] assert "height" in body["value"] assert isinstance(body["value"]["width"], int) assert isinstance(body["value"]["height"], int) size = session.window.size assert isinstance(size, tuple) assert isinstance(size[0], int) assert isinstance(size[1], int) def test_window_resize(session): if not window_size_supported(session): pytest.skip() # setting the window size by webdriver is synchronous # so we should see the results immediately session.window.size = (400, 500) assert session.window.size == (400, 500) session.window.size = (500, 600) assert session.window.size == (500, 600) """ TODO(ato): Disable test because the while statements are wrong. To fix this properly we need to write an explicit wait utility. def test_window_resize_by_script(session): # setting the window size by JS is asynchronous # so we poll waiting for the results size0 = session.window.size session.execute_script("window.resizeTo(700, 800)") size1 = session.window.size while size0 == size1: size1 = session.window.size assert size1 == (700, 800) session.execute_script("window.resizeTo(800, 900)") size2 = session.window.size while size1 == size2: size2 = session.window.size assert size2 == (800, 900) assert size2 == {"width": 200, "height": 100} """ def test_window_position_types(http, session): if not window_position_supported(session): pytest.skip() with http.get("/session/%s/window/position" % session.session_id) as resp: assert resp.status == 200 body = json.load(resp) assert "value" in body assert "x" in body["value"] assert "y" in body["value"] assert isinstance(body["value"]["x"], int) assert isinstance(body["value"]["y"], int) pos = session.window.position assert isinstance(pos, tuple) assert isinstance(pos[0], int) assert isinstance(pos[1], int)