--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -404681,19 +404681,17 @@
{
"timeout": "long"
}
]
],
"webdriver/tests/new_session/invalid_capabilities.py": [
[
"/webdriver/tests/new_session/invalid_capabilities.py",
- {
- "timeout": "long"
- }
+ {}
]
],
"webdriver/tests/new_session/merge.py": [
[
"/webdriver/tests/new_session/merge.py",
{
"timeout": "long"
}
@@ -619080,41 +619078,41 @@
"6274392529489518207961ed5e6b6bb3ff081572",
"wdspec"
],
"webdriver/tests/new_session/__init__.py": [
"da39a3ee5e6b4b0d3255bfef95601890afd80709",
"support"
],
"webdriver/tests/new_session/conftest.py": [
- "d2df38e506cb9a3e501f03fe03e2a31af42d6f04",
+ "72798e95422e70158c26b60aabc27a480bac8758",
"support"
],
"webdriver/tests/new_session/create_alwaysMatch.py": [
- "84f8ad0908e9ec787f9db73ff66cbe193c2c9626",
+ "b2783003e5e1a7d762a4340b33f65d6afd9b0e62",
"wdspec"
],
"webdriver/tests/new_session/create_firstMatch.py": [
- "fbdabf1852c07db0f5df2d47954c1cd5d7285492",
+ "a3f2156bea16ae9eb270794a2b5a0c1a39c3e631",
"wdspec"
],
"webdriver/tests/new_session/default_values.py": [
- "92c26366f8fd0d37587457b9b5a630df4b19cc60",
+ "596830d45fc6c9f8a5ad1e91f79d580adf32ff54",
"wdspec"
],
"webdriver/tests/new_session/invalid_capabilities.py": [
- "fcc36e5ca46cb8a9fb9927d5f618c7e9433a0260",
+ "547c60d0dd9a5596e7f06a026ee04f071c46e4f5",
"wdspec"
],
"webdriver/tests/new_session/merge.py": [
- "000b28631bb6d862b654f1f998852f5f1a6b2e12",
+ "5022b2f05cb618167ad7d6a23f886c7f39907212",
"wdspec"
],
"webdriver/tests/new_session/response.py": [
- "5eabb99858b9c3051efb351096d7ba8dca8dbfce",
+ "6093d95910f0994a8189f3d8df223ccc7ef97062",
"wdspec"
],
"webdriver/tests/new_session/support/__init__.py": [
"da39a3ee5e6b4b0d3255bfef95601890afd80709",
"support"
],
"webdriver/tests/new_session/support/create.py": [
"4bfb99fd4ba44ab5b4e70e9246cbb200c098ae89",
--- a/testing/web-platform/meta/webdriver/tests/new_session/response.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/new_session/response.py.ini
@@ -1,7 +1,7 @@
[response.py]
- [test_resp_capabilites]
+ [test_capabilites]
expected: FAIL
- [test_resp_data]
+ [test_data]
expected: FAIL
--- a/testing/web-platform/tests/webdriver/tests/new_session/conftest.py
+++ b/testing/web-platform/tests/webdriver/tests/new_session/conftest.py
@@ -1,22 +1,64 @@
-import pytest
import sys
-import webdriver
+import pytest
+
+from webdriver.transport import HTTPWireProtocol
def product(a, b):
return [(a, item) for item in b]
def flatten(l):
return [item for x in l for item in x]
+
+@pytest.fixture(name="new_session")
+def fixture_new_session(request, configuration, current_session):
+ """Start a new session for tests which themselves test creating new sessions.
+
+ :param body: The content of the body for the new session POST request.
+
+ :param delete_existing_session: Allows the fixture to delete an already
+ created custom session before the new session is getting created. This
+ is useful for tests which call this fixture multiple times within the
+ same test.
+ """
+ custom_session = {}
+
+ transport = HTTPWireProtocol(
+ configuration["host"], configuration["port"], url_prefix="/",
+ )
+
+ def _delete_session(session_id):
+ transport.send("DELETE", "session/{}".format(session_id))
+
+ def new_session(body, delete_existing_session=False):
+ # If there is an active session from the global session fixture,
+ # delete that one first
+ if current_session is not None:
+ current_session.end()
+
+ if delete_existing_session:
+ _delete_session(custom_session["session"]["sessionId"])
+
+ response = transport.send("POST", "session", body)
+ if response.status == 200:
+ custom_session["session"] = response.body["value"]
+ return response, custom_session.get("session", None)
+
+ yield new_session
+
+ if custom_session.get("session") is not None:
+ _delete_session(custom_session["session"]["sessionId"])
+ custom_session = None
+
+
@pytest.fixture(scope="session")
def platform_name():
return {
"linux2": "linux",
"win32": "windows",
"cygwin": "windows",
"darwin": "mac"
}.get(sys.platform)
-
--- a/testing/web-platform/tests/webdriver/tests/new_session/create_alwaysMatch.py
+++ b/testing/web-platform/tests/webdriver/tests/new_session/create_alwaysMatch.py
@@ -1,13 +1,15 @@
-#META: timeout=long
+# META: timeout=long
import pytest
from conftest import product, flatten
-from support.create import valid_data
+from tests.support.asserts import assert_success
+from tests.new_session.support.create import valid_data
@pytest.mark.parametrize("key,value", flatten(product(*item) for item in valid_data))
def test_valid(new_session, add_browser_capabilites, key, value):
- resp = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({key: value})}})
-
+ response, _ = new_session({"capabilities": {
+ "alwaysMatch": add_browser_capabilites({key: value})}})
+ assert_success(response)
--- a/testing/web-platform/tests/webdriver/tests/new_session/create_firstMatch.py
+++ b/testing/web-platform/tests/webdriver/tests/new_session/create_firstMatch.py
@@ -1,12 +1,16 @@
-#META: timeout=long
+# META: timeout=long
import pytest
from conftest import product, flatten
-from support.create import valid_data
+
+from tests.support.asserts import assert_success
+from tests.new_session.support.create import valid_data
@pytest.mark.parametrize("key,value", flatten(product(*item) for item in valid_data))
def test_valid(new_session, add_browser_capabilites, key, value):
- resp = new_session({"capabilities": {"firstMatch": [add_browser_capabilites({key: value})]}})
+ response, _ = new_session({"capabilities": {
+ "firstMatch": [add_browser_capabilites({key: value})]}})
+ assert_success(response)
--- a/testing/web-platform/tests/webdriver/tests/new_session/default_values.py
+++ b/testing/web-platform/tests/webdriver/tests/new_session/default_values.py
@@ -1,48 +1,55 @@
# META: timeout=long
-import uuid
-
-import pytest
-
-from webdriver import error
+from tests.support.asserts import assert_error, assert_success
def test_basic(new_session, add_browser_capabilites):
- resp, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
- assert set(resp.keys()) == {"sessionId", "capabilities"}
+ response, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+ value = assert_success(response)
+ assert set(value.keys()) == {"sessionId", "capabilities"}
def test_repeat_new_session(new_session, add_browser_capabilites):
- resp, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
- with pytest.raises(error.SessionNotCreatedException):
- new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+ response, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+ assert_success(response)
+
+ response, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+ assert_error(response, "session not created")
def test_no_capabilites(new_session):
- with pytest.raises(error.InvalidArgumentException):
- new_session({})
+ response, _ = new_session({})
+ assert_error(response, "invalid argument")
def test_missing_first_match(new_session, add_browser_capabilites):
- resp, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+ response, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+ assert_success(response)
def test_missing_always_match(new_session, add_browser_capabilites):
- resp, _ = new_session({"capabilities": {"firstMatch": [add_browser_capabilites({})]}})
+ response, _ = new_session({"capabilities": {"firstMatch": [add_browser_capabilites({})]}})
+ assert_success(response)
def test_desired(new_session, add_browser_capabilites):
- with pytest.raises(error.InvalidArgumentException):
- resp, _ = new_session({"desiredCapbilities": add_browser_capabilites({})})
+ response, _ = new_session({"desiredCapbilities": add_browser_capabilites({})})
+ assert_error(response, "invalid argument")
def test_ignore_non_spec_fields_in_capabilities(new_session, add_browser_capabilites):
- resp, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({}), "desiredCapbilities": {"pageLoadStrategy": "eager"}}})
- assert resp["capabilities"]["pageLoadStrategy"] == "normal"
+ response, _ = new_session({"capabilities": {
+ "alwaysMatch": add_browser_capabilites({}),
+ "desiredCapbilities": {"pageLoadStrategy": "eager"},
+ }})
+ value = assert_success(response)
+ assert value["capabilities"]["pageLoadStrategy"] == "normal"
def test_valid_but_unmatchable_key(new_session, add_browser_capabilites):
- resp, _ = new_session({"capabilities": {
- "firstMatch": [add_browser_capabilites({"pageLoadStrategy": "eager", "foo:unmatchable": True}),
- {"pageLoadStrategy": "none"}]}})
- assert resp["capabilities"]["pageLoadStrategy"] == "none"
+ response, _ = new_session({"capabilities": {"firstMatch": [
+ add_browser_capabilites({"pageLoadStrategy": "eager", "foo:unmatchable": True}),
+ {"pageLoadStrategy": "none"},
+ ]}})
+ value = assert_success(response)
+ assert value["capabilities"]["pageLoadStrategy"] == "none"
--- a/testing/web-platform/tests/webdriver/tests/new_session/invalid_capabilities.py
+++ b/testing/web-platform/tests/webdriver/tests/new_session/invalid_capabilities.py
@@ -1,32 +1,34 @@
-#META: timeout=long
+import pytest
-import pytest
-from webdriver import error
-
+from tests.support.asserts import assert_error
from conftest import product, flatten
@pytest.mark.parametrize("value", [None, 1, "{}", []])
def test_invalid_capabilites(new_session, value):
- with pytest.raises(error.InvalidArgumentException):
- new_session({"capabilities": value})
+ response, _ = new_session({"capabilities": value})
+ assert_error(response, "invalid argument")
@pytest.mark.parametrize("value", [None, 1, "{}", []])
def test_invalid_always_match(new_session, add_browser_capabilites, value):
- with pytest.raises(error.InvalidArgumentException):
- new_session({"capabilities": {"alwaysMatch": value, "firstMatch": [add_browser_capabilites({})]}})
+ capabilities = {"alwaysMatch": value, "firstMatch": [add_browser_capabilites({})]}
+
+ response, _ = new_session({"capabilities": capabilities})
+ assert_error(response, "invalid argument")
@pytest.mark.parametrize("value", [None, 1, "[]", {}])
def test_invalid_first_match(new_session, add_browser_capabilites, value):
- with pytest.raises(error.InvalidArgumentException):
- new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({}), "firstMatch": value}})
+ capabilities = {"alwaysMatch": add_browser_capabilites({}), "firstMatch": value}
+
+ response, _ = new_session({"capabilities": capabilities})
+ assert_error(response, "invalid argument")
invalid_data = [
("acceptInsecureCerts", [1, [], {}, "false"]),
("browserName", [1, [], {}, False]),
("browserVersion", [1, [], {}, False]),
("platformName", [1, [], {}, False]),
("pageLoadStrategy", [1, [], {}, False, "invalid", "NONE", "Eager", "eagerblah", "interactive",
@@ -41,27 +43,29 @@ invalid_data = [
{"page load": 10}, {"pageLoad": "10"}, {"pageLoad": {"value": 10}},
{"invalid": 10}, {"pageLoad": -1}, {"pageLoad": 2**64},
{"pageLoad": None}, {"pageLoad": 1.1}, {"pageLoad": 10, "invalid": 10},
{" pageLoad": 10}, {"pageLoad ": 10}]),
("unhandledPromptBehavior", [1, [], {}, False, "DISMISS", "dismissABC", "Accept",
" dismiss", "dismiss "])
]
+
@pytest.mark.parametrize("body", [lambda key, value: {"alwaysMatch": {key: value}},
lambda key, value: {"firstMatch": [{key: value}]}])
@pytest.mark.parametrize("key,value", flatten(product(*item) for item in invalid_data))
def test_invalid_values(new_session, add_browser_capabilites, body, key, value):
capabilities = body(key, value)
if "alwaysMatch" in capabilities:
capabilities["alwaysMatch"] = add_browser_capabilites(capabilities["alwaysMatch"])
else:
capabilities["firstMatch"][0] = add_browser_capabilites(capabilities["firstMatch"][0])
- with pytest.raises(error.InvalidArgumentException):
- resp = new_session({"capabilities": capabilities})
+
+ response, _ = new_session({"capabilities": capabilities})
+ assert_error(response, "invalid argument")
invalid_extensions = [
"firefox",
"firefox_binary",
"firefoxOptions",
"chromeOptions",
"automaticInspection",
@@ -88,11 +92,11 @@ invalid_extensions = [
lambda key, value: {"firstMatch": [{key: value}]}])
@pytest.mark.parametrize("key", invalid_extensions)
def test_invalid_extensions(new_session, add_browser_capabilites, body, key):
capabilities = body(key, {})
if "alwaysMatch" in capabilities:
capabilities["alwaysMatch"] = add_browser_capabilites(capabilities["alwaysMatch"])
else:
capabilities["firstMatch"][0] = add_browser_capabilites(capabilities["firstMatch"][0])
- with pytest.raises(error.InvalidArgumentException):
- resp = new_session({"capabilities": capabilities})
+ response, _ = new_session({"capabilities": capabilities})
+ assert_error(response, "invalid argument")
--- a/testing/web-platform/tests/webdriver/tests/new_session/merge.py
+++ b/testing/web-platform/tests/webdriver/tests/new_session/merge.py
@@ -1,81 +1,82 @@
-#META: timeout=long
+# META: timeout=long
import pytest
-from webdriver import error
+from tests.support.asserts import assert_error, assert_success
from conftest import platform_name
@pytest.mark.skipif(platform_name() is None, reason="Unsupported platform")
@pytest.mark.parametrize("body", [lambda key, value: {"alwaysMatch": {key: value}},
lambda key, value: {"firstMatch": [{key: value}]}])
def test_platform_name(new_session, add_browser_capabilites, platform_name, body):
capabilities = body("platformName", platform_name)
if "alwaysMatch" in capabilities:
capabilities["alwaysMatch"] = add_browser_capabilites(capabilities["alwaysMatch"])
else:
capabilities["firstMatch"][0] = add_browser_capabilites(capabilities["firstMatch"][0])
- resp, _ = new_session({"capabilities": capabilities})
- assert resp["capabilities"]["platformName"] == platform_name
+
+ response, _ = new_session({"capabilities": capabilities})
+ value = assert_success(response)
+
+ assert value["capabilities"]["platformName"] == platform_name
invalid_merge = [
("acceptInsecureCerts", (True, True)),
("unhandledPromptBehavior", ("accept", "accept")),
("unhandledPromptBehavior", ("accept", "dismiss")),
("timeouts", ({"script": 10}, {"script": 10})),
("timeouts", ({"script": 10}, {"pageLoad": 10})),
]
@pytest.mark.parametrize("key,value", invalid_merge)
def test_merge_invalid(new_session, add_browser_capabilites, key, value):
- with pytest.raises(error.InvalidArgumentException):
- new_session({"capabilities":
- {"alwaysMatch": add_browser_capabilites({key: value[0]}),
- "firstMatch": [{}, {key: value[1]}]}})
+ response, _ = new_session({"capabilities": {
+ "alwaysMatch": add_browser_capabilites({key: value[0]}),
+ "firstMatch": [{}, {key: value[1]}],
+ }})
+ assert_error(response, "invalid argument")
@pytest.mark.skipif(platform_name() is None, reason="Unsupported platform")
def test_merge_platformName(new_session, add_browser_capabilites, platform_name):
- resp, _ = new_session({"capabilities":
- {"alwaysMatch": add_browser_capabilites({"timeouts": {"script": 10}}),
- "firstMatch": [
- {
- "platformName": platform_name.upper(),
- "pageLoadStrategy": "none"
- },
- {
- "platformName": platform_name,
- "pageLoadStrategy": "eager"
- }
- ]}})
+ response, _ = new_session({"capabilities": {
+ "alwaysMatch": add_browser_capabilites({"timeouts": {"script": 10}}),
+ "firstMatch": [{
+ "platformName": platform_name.upper(),
+ "pageLoadStrategy": "none",
+ }, {
+ "platformName": platform_name,
+ "pageLoadStrategy": "eager",
+ }]}})
- assert resp["capabilities"]["platformName"] == platform_name
- assert resp["capabilities"]["pageLoadStrategy"] == "eager"
+ value = assert_success(response)
+
+ assert value["capabilities"]["platformName"] == platform_name
+ assert value["capabilities"]["pageLoadStrategy"] == "eager"
def test_merge_browserName(new_session, add_browser_capabilites):
- resp, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+ response, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+ value = assert_success(response)
+
browser_settings = {
- "browserName": resp["capabilities"]["browserName"],
- "browserVersion": resp["capabilities"]["browserVersion"],
- "platformName": resp["capabilities"]["platformName"]
+ "browserName": value["capabilities"]["browserName"],
+ "browserVersion": value["capabilities"]["browserVersion"],
}
- session.end()
- resp, _ = new_session({"capabilities":
- {"alwaysMatch": add_browser_capabilites({"timeouts": {"script": 10}}),
- "firstMatch": [
- {
- "browserName": browser_settings["browserName"] + "invalid",
- "pageLoadStrategy": "none"
- },
- {
- "browserName": browser_settings["browserName"],
- "pageLoadStrategy": "eager"
- }
- ]}})
+ response, _ = new_session({"capabilities": {
+ "alwaysMatch": add_browser_capabilites({"timeouts": {"script": 10}}),
+ "firstMatch": [{
+ "browserName": browser_settings["browserName"] + "invalid",
+ "pageLoadStrategy": "none",
+ }, {
+ "browserName": browser_settings["browserName"],
+ "pageLoadStrategy": "eager",
+ }]}}, delete_existing_session=True)
+ value = assert_success(response)
- assert resp["capabilities"]["browserName"] == browser_settings['browserName']
- assert resp["capabilities"]["pageLoadStrategy"] == "eager"
+ assert value["capabilities"]["browserName"] == browser_settings['browserName']
+ assert value["capabilities"]["pageLoadStrategy"] == "eager"
--- a/testing/web-platform/tests/webdriver/tests/new_session/response.py
+++ b/testing/web-platform/tests/webdriver/tests/new_session/response.py
@@ -1,54 +1,74 @@
# META: timeout=long
import uuid
-def test_resp_sessionid(new_session, add_browser_capabilites):
- resp, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
- assert isinstance(resp["sessionId"], unicode)
- uuid.UUID(hex=resp["sessionId"])
+from tests.support.asserts import assert_success
+
+
+def test_sessionid(new_session, add_browser_capabilites):
+ response, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+ value = assert_success(response)
+ assert isinstance(value["sessionId"], basestring)
+ uuid.UUID(hex=value["sessionId"])
-def test_resp_capabilites(new_session, add_browser_capabilites):
- resp, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
- assert isinstance(resp["sessionId"], unicode)
- assert isinstance(resp["capabilities"], dict)
- assert {"browserName",
- "browserVersion",
- "platformName",
- "acceptInsecureCerts",
- "setWindowRect",
- "timeouts",
- "proxy",
- "pageLoadStrategy"}.issubset(
- set(resp["capabilities"].keys()))
+def test_capabilites(new_session, add_browser_capabilites):
+ response, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+ value = assert_success(response)
+ assert isinstance(value["capabilities"], dict)
+
+ all_capabilities = set(value["capabilities"].keys())
+ expected_capabilities = {
+ "browserName",
+ "browserVersion",
+ "platformName",
+ "acceptInsecureCerts",
+ "setWindowRect",
+ "timeouts",
+ "proxy",
+ "pageLoadStrategy",
+ }
+
+ assert expected_capabilities.issubset(all_capabilities), (
+ "{0} cannot be found in {1}".format(
+ list(expected_capabilities - all_capabilities), all_capabilities))
-def test_resp_data(new_session, add_browser_capabilites, platform_name):
- resp, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+def test_data(new_session, add_browser_capabilites, platform_name):
+ response, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+ value = assert_success(response)
- assert isinstance(resp["capabilities"]["browserName"], unicode)
- assert isinstance(resp["capabilities"]["browserVersion"], unicode)
+ assert isinstance(value["capabilities"]["browserName"], basestring)
+ assert isinstance(value["capabilities"]["browserVersion"], basestring)
if platform_name:
- assert resp["capabilities"]["platformName"] == platform_name
+ assert value["capabilities"]["platformName"] == platform_name
else:
- assert "platformName" in resp["capabilities"]
- assert resp["capabilities"]["acceptInsecureCerts"] is False
- assert isinstance(resp["capabilities"]["setWindowRect"], bool)
- assert resp["capabilities"]["timeouts"]["implicit"] == 0
- assert resp["capabilities"]["timeouts"]["pageLoad"] == 300000
- assert resp["capabilities"]["timeouts"]["script"] == 30000
- assert resp["capabilities"]["proxy"] == {}
- assert resp["capabilities"]["pageLoadStrategy"] == "normal"
+ assert "platformName" in value["capabilities"]
+ assert value["capabilities"]["acceptInsecureCerts"] is False
+ assert isinstance(value["capabilities"]["setWindowRect"], bool)
+ assert value["capabilities"]["timeouts"]["implicit"] == 0
+ assert value["capabilities"]["timeouts"]["pageLoad"] == 300000
+ assert value["capabilities"]["timeouts"]["script"] == 30000
+ assert value["capabilities"]["proxy"] == {}
+ assert value["capabilities"]["pageLoadStrategy"] == "normal"
def test_timeouts(new_session, add_browser_capabilites, platform_name):
- resp, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"timeouts": {"implicit": 1000}})}})
- assert resp["capabilities"]["timeouts"] == {
+ response, _ = new_session({"capabilities": {
+ "alwaysMatch": add_browser_capabilites({"timeouts": {"implicit": 1000}}),
+ }})
+ value = assert_success(response)
+
+ assert value["capabilities"]["timeouts"] == {
"implicit": 1000,
"pageLoad": 300000,
"script": 30000
}
+
def test_pageLoadStrategy(new_session, add_browser_capabilites, platform_name):
- resp, _ = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"pageLoadStrategy": "eager"})}})
- assert resp["capabilities"]["pageLoadStrategy"] == "eager"
+ response, _ = new_session({"capabilities": {
+ "alwaysMatch": add_browser_capabilites({"pageLoadStrategy": "eager"})}})
+ value = assert_success(response)
+
+ assert value["capabilities"]["pageLoadStrategy"] == "eager"