Bug 1480337 - [wdspec] Move shared methods into __init__.py file for each command. draft
authorHenrik Skupin <mail@hskupin.info>
Thu, 02 Aug 2018 10:00:53 +0200
changeset 826306 33f13bf47338a0d254820a416a16389528c0b9df
parent 826275 9ad7706def240500bb39914bc3706efda4c46fc9
push id118285
push userbmo:hskupin@gmail.com
push dateFri, 03 Aug 2018 14:07:29 +0000
bugs1480337
milestone63.0a1
Bug 1480337 - [wdspec] Move shared methods into __init__.py file for each command. MozReview-Commit-ID: ArUKmi00EDo
testing/web-platform/tests/webdriver/tests/accept_alert/__init__.py
testing/web-platform/tests/webdriver/tests/accept_alert/accept.py
testing/web-platform/tests/webdriver/tests/add_cookie/__init__.py
testing/web-platform/tests/webdriver/tests/add_cookie/add.py
testing/web-platform/tests/webdriver/tests/back/__init__.py
testing/web-platform/tests/webdriver/tests/back/back.py
testing/web-platform/tests/webdriver/tests/back/user_prompts.py
testing/web-platform/tests/webdriver/tests/close_window/__init__.py
testing/web-platform/tests/webdriver/tests/close_window/close.py
testing/web-platform/tests/webdriver/tests/close_window/user_prompts.py
testing/web-platform/tests/webdriver/tests/delete_all_cookies/__init__.py
testing/web-platform/tests/webdriver/tests/delete_all_cookies/delete.py
testing/web-platform/tests/webdriver/tests/delete_cookie/__init__.py
testing/web-platform/tests/webdriver/tests/delete_cookie/delete.py
testing/web-platform/tests/webdriver/tests/delete_cookie/user_prompts.py
testing/web-platform/tests/webdriver/tests/delete_session/__init__.py
testing/web-platform/tests/webdriver/tests/delete_session/delete.py
testing/web-platform/tests/webdriver/tests/dismiss_alert/__init__.py
testing/web-platform/tests/webdriver/tests/dismiss_alert/dismiss.py
testing/web-platform/tests/webdriver/tests/element_clear/__init__.py
testing/web-platform/tests/webdriver/tests/element_clear/clear.py
testing/web-platform/tests/webdriver/tests/element_click/__init__.py
testing/web-platform/tests/webdriver/tests/element_click/bubbling.py
testing/web-platform/tests/webdriver/tests/element_click/click.py
testing/web-platform/tests/webdriver/tests/element_click/file_upload.py
testing/web-platform/tests/webdriver/tests/element_click/interactability.py
testing/web-platform/tests/webdriver/tests/element_click/navigate.py
testing/web-platform/tests/webdriver/tests/element_click/scroll_into_view.py
testing/web-platform/tests/webdriver/tests/element_click/stale.py
testing/web-platform/tests/webdriver/tests/element_send_keys/__init__.py
testing/web-platform/tests/webdriver/tests/element_send_keys/content_editable.py
testing/web-platform/tests/webdriver/tests/element_send_keys/events.py
testing/web-platform/tests/webdriver/tests/element_send_keys/file_upload.py
testing/web-platform/tests/webdriver/tests/element_send_keys/interactability.py
testing/web-platform/tests/webdriver/tests/element_send_keys/scroll_into_view.py
testing/web-platform/tests/webdriver/tests/element_send_keys/send_keys.py
testing/web-platform/tests/webdriver/tests/element_send_keys/user_prompts.py
testing/web-platform/tests/webdriver/tests/execute_async_script/__init__.py
testing/web-platform/tests/webdriver/tests/execute_async_script/collections.py
testing/web-platform/tests/webdriver/tests/execute_async_script/execute_async.py
testing/web-platform/tests/webdriver/tests/execute_async_script/user_prompts.py
testing/web-platform/tests/webdriver/tests/execute_script/__init__.py
testing/web-platform/tests/webdriver/tests/execute_script/collections.py
testing/web-platform/tests/webdriver/tests/execute_script/cyclic.py
testing/web-platform/tests/webdriver/tests/execute_script/execute.py
testing/web-platform/tests/webdriver/tests/execute_script/json_serialize_windowproxy.py
testing/web-platform/tests/webdriver/tests/execute_script/user_prompts.py
testing/web-platform/tests/webdriver/tests/find_element/__init__.py
testing/web-platform/tests/webdriver/tests/find_element/find.py
testing/web-platform/tests/webdriver/tests/find_element_from_element/__init__.py
testing/web-platform/tests/webdriver/tests/find_element_from_element/find.py
testing/web-platform/tests/webdriver/tests/find_elements/__init__.py
testing/web-platform/tests/webdriver/tests/find_elements/find.py
testing/web-platform/tests/webdriver/tests/find_elements_from_element/__init__.py
testing/web-platform/tests/webdriver/tests/find_elements_from_element/find.py
testing/web-platform/tests/webdriver/tests/forward/__init__.py
testing/web-platform/tests/webdriver/tests/forward/forward.py
testing/web-platform/tests/webdriver/tests/forward/user_prompts.py
testing/web-platform/tests/webdriver/tests/fullscreen_window/__init__.py
testing/web-platform/tests/webdriver/tests/fullscreen_window/fullscreen.py
testing/web-platform/tests/webdriver/tests/fullscreen_window/user_prompts.py
testing/web-platform/tests/webdriver/tests/get_active_element/__init__.py
testing/web-platform/tests/webdriver/tests/get_active_element/get.py
testing/web-platform/tests/webdriver/tests/get_alert_text/__init__.py
testing/web-platform/tests/webdriver/tests/get_alert_text/get.py
testing/web-platform/tests/webdriver/tests/get_current_url/__init__.py
testing/web-platform/tests/webdriver/tests/get_current_url/get.py
testing/web-platform/tests/webdriver/tests/get_current_url/user_prompts.py
testing/web-platform/tests/webdriver/tests/get_element_attribute/__init__.py
testing/web-platform/tests/webdriver/tests/get_element_attribute/get.py
testing/web-platform/tests/webdriver/tests/get_element_property/__init__.py
testing/web-platform/tests/webdriver/tests/get_element_property/get.py
testing/web-platform/tests/webdriver/tests/get_element_property/user_prompts.py
testing/web-platform/tests/webdriver/tests/get_element_tag_name/__init__.py
testing/web-platform/tests/webdriver/tests/get_element_tag_name/get.py
testing/web-platform/tests/webdriver/tests/get_element_tag_name/user_prompts.py
testing/web-platform/tests/webdriver/tests/get_element_text/__init__.py
testing/web-platform/tests/webdriver/tests/get_element_text/get.py
testing/web-platform/tests/webdriver/tests/get_named_cookie/__init__.py
testing/web-platform/tests/webdriver/tests/get_named_cookie/get.py
testing/web-platform/tests/webdriver/tests/get_timeouts/__init__.py
testing/web-platform/tests/webdriver/tests/get_timeouts/get.py
testing/web-platform/tests/webdriver/tests/get_title/__init__.py
testing/web-platform/tests/webdriver/tests/get_title/get.py
testing/web-platform/tests/webdriver/tests/get_title/user_prompts.py
testing/web-platform/tests/webdriver/tests/get_window_rect/__init__.py
testing/web-platform/tests/webdriver/tests/get_window_rect/get.py
testing/web-platform/tests/webdriver/tests/get_window_rect/user_prompts.py
testing/web-platform/tests/webdriver/tests/is_element_selected/__init__.py
testing/web-platform/tests/webdriver/tests/is_element_selected/selected.py
testing/web-platform/tests/webdriver/tests/is_element_selected/user_prompts.py
testing/web-platform/tests/webdriver/tests/maximize_window/__init__.py
testing/web-platform/tests/webdriver/tests/maximize_window/maximize.py
testing/web-platform/tests/webdriver/tests/maximize_window/user_prompts.py
testing/web-platform/tests/webdriver/tests/minimize_window/__init__.py
testing/web-platform/tests/webdriver/tests/minimize_window/minimize.py
testing/web-platform/tests/webdriver/tests/minimize_window/user_prompts.py
testing/web-platform/tests/webdriver/tests/navigate_to/__init__.py
testing/web-platform/tests/webdriver/tests/navigate_to/navigate.py
testing/web-platform/tests/webdriver/tests/page_source/__init__.py
testing/web-platform/tests/webdriver/tests/page_source/source.py
testing/web-platform/tests/webdriver/tests/refresh/__init__.py
testing/web-platform/tests/webdriver/tests/refresh/refresh.py
testing/web-platform/tests/webdriver/tests/refresh/user_prompts.py
testing/web-platform/tests/webdriver/tests/send_alert_text/__init__.py
testing/web-platform/tests/webdriver/tests/send_alert_text/send.py
testing/web-platform/tests/webdriver/tests/set_timeouts/__init__.py
testing/web-platform/tests/webdriver/tests/set_timeouts/set.py
testing/web-platform/tests/webdriver/tests/set_window_rect/__init__.py
testing/web-platform/tests/webdriver/tests/set_window_rect/set.py
testing/web-platform/tests/webdriver/tests/set_window_rect/user_prompts.py
testing/web-platform/tests/webdriver/tests/status/__init__.py
testing/web-platform/tests/webdriver/tests/status/status.py
testing/web-platform/tests/webdriver/tests/switch_to_frame/__init__.py
testing/web-platform/tests/webdriver/tests/switch_to_frame/switch.py
testing/web-platform/tests/webdriver/tests/switch_to_parent_frame/__init__.py
testing/web-platform/tests/webdriver/tests/switch_to_parent_frame/switch.py
testing/web-platform/tests/webdriver/tests/switch_to_window/__init__.py
testing/web-platform/tests/webdriver/tests/switch_to_window/switch.py
--- a/testing/web-platform/tests/webdriver/tests/accept_alert/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/accept_alert/__init__.py
@@ -0,0 +1,3 @@
+def accept_alert(session):
+    return session.transport.send(
+        "POST", "session/{session_id}/alert/accept".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/accept_alert/accept.py
+++ b/testing/web-platform/tests/webdriver/tests/accept_alert/accept.py
@@ -1,15 +1,12 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def accept_alert(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/alert/accept".format(**vars(session)))
+from . import accept_alert
 
 
 def test_null_response_value(session, url):
     session.url = inline("<script>window.alert('Hello');</script>")
 
     response = accept_alert(session)
     value = assert_success(response)
     assert value is None
--- a/testing/web-platform/tests/webdriver/tests/add_cookie/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/add_cookie/__init__.py
@@ -0,0 +1,4 @@
+def add_cookie(session, cookie):
+    return session.transport.send(
+        "POST", "session/{session_id}/cookie".format(**vars(session)),
+        {"cookie": cookie})
--- a/testing/web-platform/tests/webdriver/tests/add_cookie/add.py
+++ b/testing/web-platform/tests/webdriver/tests/add_cookie/add.py
@@ -1,18 +1,14 @@
 from datetime import datetime, timedelta
 
 from tests.support.asserts import assert_error, assert_success
 from tests.support.fixtures import clear_all_cookies
 
-
-def add_cookie(session, cookie):
-    return session.transport.send(
-        "POST", "session/{session_id}/cookie".format(**vars(session)),
-        {"cookie": cookie})
+from . import add_cookie
 
 
 def test_null_response_value(session, url):
     new_cookie = {
         "name": "hello",
         "value": "world",
     }
 
--- a/testing/web-platform/tests/webdriver/tests/back/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/back/__init__.py
@@ -0,0 +1,3 @@
+def back(session):
+    return session.transport.send(
+        "POST", "session/{session_id}/back".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/back/back.py
+++ b/testing/web-platform/tests/webdriver/tests/back/back.py
@@ -1,15 +1,12 @@
 from tests.support.inline import inline
 from tests.support.asserts import assert_error, assert_success
 
-
-def back(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/back".format(**vars(session)))
+from . import back
 
 
 def test_null_response_value(session):
     session.url = inline("<div>")
     session.url = inline("<p>")
 
     response = back(session)
     value = assert_success(response)
--- a/testing/web-platform/tests/webdriver/tests/back/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/back/user_prompts.py
@@ -1,19 +1,16 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 from tests.support.inline import inline
 
-
-def back(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/back".format(**vars(session)))
+from . import back
 
 
 @pytest.fixture
 def pages(session):
     pages = [
         inline("<p id=1>"),
         inline("<p id=2>"),
     ]
--- a/testing/web-platform/tests/webdriver/tests/close_window/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/close_window/__init__.py
@@ -0,0 +1,3 @@
+def close(session):
+    return session.transport.send(
+        "DELETE", "session/{session_id}/window".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/close_window/close.py
+++ b/testing/web-platform/tests/webdriver/tests/close_window/close.py
@@ -1,18 +1,15 @@
 import pytest
 from webdriver import error
 
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def close(session):
-    return session.transport.send(
-        "DELETE", "session/{session_id}/window".format(**vars(session)))
+from . import close
 
 
 def test_no_browsing_context(session, closed_window):
     response = close(session)
     assert_error(response, "no such window")
 
 
 def test_close_browsing_context(session, create_window):
--- a/testing/web-platform/tests/webdriver/tests/close_window/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/close_window/user_prompts.py
@@ -1,18 +1,15 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 
-
-def close(session):
-    return session.transport.send(
-        "DELETE", "session/{session_id}/window".format(**vars(session)))
+from . import close
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog, create_window):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         original_handle = session.window_handle
         new_handle = create_window()
         session.window_handle = new_handle
--- a/testing/web-platform/tests/webdriver/tests/delete_all_cookies/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/delete_all_cookies/__init__.py
@@ -0,0 +1,3 @@
+def delete_all_cookies(session):
+    return session.transport.send(
+        "DELETE", "/session/{session_id}/cookie".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/delete_all_cookies/delete.py
+++ b/testing/web-platform/tests/webdriver/tests/delete_all_cookies/delete.py
@@ -1,14 +1,11 @@
 from tests.support.asserts import assert_error, assert_success
 
-
-def delete_all_cookies(session):
-    return session.transport.send(
-        "DELETE", "/session/{session_id}/cookie".format(**vars(session)))
+from . import delete_all_cookies
 
 
 def test_null_response_value(session, url):
     response = delete_all_cookies(session)
     value = assert_success(response)
     assert value is None
 
 
--- a/testing/web-platform/tests/webdriver/tests/delete_cookie/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/delete_cookie/__init__.py
@@ -0,0 +1,5 @@
+def delete_cookie(session, name):
+    return session.transport.send(
+        "DELETE", "/session/{session_id}/cookie/{name}".format(
+            session_id=session.session_id,
+            name=name))
--- a/testing/web-platform/tests/webdriver/tests/delete_cookie/delete.py
+++ b/testing/web-platform/tests/webdriver/tests/delete_cookie/delete.py
@@ -1,16 +1,11 @@
 from tests.support.asserts import assert_error, assert_success
 
-
-def delete_cookie(session, name):
-    return session.transport.send(
-        "DELETE", "/session/{session_id}/cookie/{name}".format(
-            session_id=session.session_id,
-            name=name))
+from . import delete_cookie
 
 
 def test_null_response_value(session, url):
     response = delete_cookie(session, "foo")
     value = assert_success(response)
     assert value is None
 
 
--- a/testing/web-platform/tests/webdriver/tests/delete_cookie/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/delete_cookie/user_prompts.py
@@ -1,19 +1,17 @@
 # META: timeout=long
 
 import pytest
 
 from webdriver.error import NoSuchCookieException
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 
-
-def delete_cookie(session, name):
-    return session.transport.send("DELETE", "/session/%s/cookie/%s" % (session.session_id, name))
+from . import delete_cookie
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog, create_cookie):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         create_cookie("foo", value="bar", path="/common/blank.html")
 
         create_dialog(dialog_type, text=dialog_type)
--- a/testing/web-platform/tests/webdriver/tests/delete_session/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/delete_session/__init__.py
@@ -0,0 +1,3 @@
+def delete_session(session):
+    return session.transport.send(
+        "DELETE", "session/{session_id}".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/delete_session/delete.py
+++ b/testing/web-platform/tests/webdriver/tests/delete_session/delete.py
@@ -1,17 +1,15 @@
 import pytest
 from webdriver import error
 
 from tests.support.asserts import assert_success
 from tests.support.inline import inline
 
-
-def delete_session(session):
-    return session.transport.send("DELETE", "session/{session_id}".format(**vars(session)))
+from . import delete_session
 
 
 def test_null_response_value(session):
     response = delete_session(session)
     value = assert_success(response)
     assert value is None
     # Need an explicit call to session.end() to notify the test harness
     # that a new session needs to be created for subsequent tests.
--- a/testing/web-platform/tests/webdriver/tests/dismiss_alert/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/dismiss_alert/__init__.py
@@ -0,0 +1,3 @@
+def dismiss_alert(session):
+    return session.transport.send(
+        "POST", "session/{session_id}/alert/dismiss".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/dismiss_alert/dismiss.py
+++ b/testing/web-platform/tests/webdriver/tests/dismiss_alert/dismiss.py
@@ -1,15 +1,12 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def dismiss_alert(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/alert/dismiss".format(**vars(session)))
+from . import dismiss_alert
 
 
 def test_null_response_value(session, url):
     session.url = inline("<script>window.alert('Hello');</script>")
 
     response = dismiss_alert(session)
     value = assert_success(response)
     assert value is None
--- a/testing/web-platform/tests/webdriver/tests/element_clear/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/element_clear/__init__.py
@@ -0,0 +1,5 @@
+def element_clear(session, element):
+    return session.transport.send(
+        "POST", "/session/{session_id}/element/{element_id}/clear".format(
+            session_id=session.session_id,
+            element_id=element.id))
--- a/testing/web-platform/tests/webdriver/tests/element_clear/clear.py
+++ b/testing/web-platform/tests/webdriver/tests/element_clear/clear.py
@@ -8,33 +8,28 @@ from tests.support.asserts import (
     assert_element_has_focus,
     assert_error,
     assert_events_equal,
     assert_in_events,
     assert_success,
 )
 from tests.support.inline import inline
 
+from . import element_clear
+
 
 @pytest.fixture
 def tracked_events():
     return [
         "blur",
         "change",
         "focus",
     ]
 
 
-def element_clear(session, element):
-    return session.transport.send(
-        "POST", "/session/{session_id}/element/{element_id}/clear".format(
-            session_id=session.session_id,
-            element_id=element.id))
-
-
 @pytest.fixture(scope="session")
 def text_file(tmpdir_factory):
     fh = tmpdir_factory.mktemp("tmp").join("hello.txt")
     fh.write("hello")
     return fh
 
 
 def test_null_response_value(session):
--- a/testing/web-platform/tests/webdriver/tests/element_click/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/element_click/__init__.py
@@ -0,0 +1,5 @@
+def element_click(session, element):
+    return session.transport.send(
+        "POST", "/session/{session_id}/element/{element_id}/click".format(
+            session_id=session.session_id,
+            element_id=element.id))
--- a/testing/web-platform/tests/webdriver/tests/element_click/bubbling.py
+++ b/testing/web-platform/tests/webdriver/tests/element_click/bubbling.py
@@ -1,17 +1,12 @@
 from tests.support.asserts import assert_success
 from tests.support.inline import inline
 
-
-def element_click(session, element):
-    return session.transport.send(
-        "POST", "/session/{session_id}/element/{element_id}/click".format(
-            session_id=session.session_id,
-            element_id=element.id))
+from . import element_click
 
 
 def test_click_event_bubbles_to_parents(session):
     session.url = inline("""
         <style>
         body * {
           margin: 10px;
           padding: 10px;
--- a/testing/web-platform/tests/webdriver/tests/element_click/click.py
+++ b/testing/web-platform/tests/webdriver/tests/element_click/click.py
@@ -1,19 +1,14 @@
 from webdriver import Element
 
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def element_click(session, element):
-    return session.transport.send(
-        "POST", "session/{session_id}/element/{element_id}/click".format(
-            session_id=session.session_id,
-            element_id=element.id))
+from . import element_click
 
 
 def test_null_response_value(session):
     session.url = inline("<p>foo")
     element = session.find.css("p", all=False)
 
     response = element_click(session, element)
     value = assert_success(response)
--- a/testing/web-platform/tests/webdriver/tests/element_click/file_upload.py
+++ b/testing/web-platform/tests/webdriver/tests/element_click/file_upload.py
@@ -1,16 +1,12 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-def element_click(session, element):
-    return session.transport.send(
-        "POST", "session/{session_id}/element/{element_id}/click".format(
-            session_id=session.session_id,
-            element_id=element.id))
+from . import element_click
 
 
 def test_file_upload_state(session):
     session.url = inline("<input type=file>")
 
     element = session.find.css("input", all=False)
     response = element_click(session, element)
     assert_error(response, "invalid argument")
--- a/testing/web-platform/tests/webdriver/tests/element_click/interactability.py
+++ b/testing/web-platform/tests/webdriver/tests/element_click/interactability.py
@@ -1,18 +1,14 @@
 import pytest
 
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-def element_click(session, element):
-    return session.transport.send(
-        "POST", "session/{session_id}/element/{element_id}/click".format(
-            session_id=session.session_id,
-            element_id=element.id))
+from . import element_click
 
 
 @pytest.mark.parametrize("transform", ["translate(-100px, -100px)", "rotate(50deg)"])
 def test_element_not_interactable_css_transform(session, transform):
     session.url = inline("""
         <div style="width: 500px; height: 100px;
             background-color: blue; transform: {transform};">
             <input type=button>
--- a/testing/web-platform/tests/webdriver/tests/element_click/navigate.py
+++ b/testing/web-platform/tests/webdriver/tests/element_click/navigate.py
@@ -1,18 +1,12 @@
-import pytest
-
-from tests.support.asserts import assert_error, assert_success
+from tests.support.asserts import assert_success
 from tests.support.inline import inline
 
-def element_click(session, element):
-    return session.transport.send(
-        "POST", "session/{session_id}/element/{element_id}/click".format(
-            session_id=session.session_id,
-            element_id=element.id))
+from . import element_click
 
 
 def test_numbers_link(session, server_config):
     link = "/webdriver/tests/element_click/support/input.html"
     session.url = inline("<a href={url}>123456</a>".format(url=link))
     element = session.find.css("a", all=False)
     response = element_click(session, element)
     assert_success(response)
--- a/testing/web-platform/tests/webdriver/tests/element_click/scroll_into_view.py
+++ b/testing/web-platform/tests/webdriver/tests/element_click/scroll_into_view.py
@@ -1,18 +1,12 @@
-import pytest
-
-from tests.support.asserts import assert_error, assert_success
+from tests.support.asserts import assert_success
 from tests.support.inline import inline
 
-def element_click(session, element):
-    return session.transport.send(
-        "POST", "session/{session_id}/element/{element_id}/click".format(
-            session_id=session.session_id,
-            element_id=element.id))
+from . import element_click
 
 
 def test_scroll_into_view(session):
     session.url = inline("""
         <input type=text value=Federer
         style="position: absolute; left: 0vh; top: 500vh">""")
 
     element = session.find.css("input", all=False)
--- a/testing/web-platform/tests/webdriver/tests/element_click/stale.py
+++ b/testing/web-platform/tests/webdriver/tests/element_click/stale.py
@@ -1,17 +1,12 @@
 from tests.support.asserts import assert_error
 from tests.support.inline import inline
 
-
-def element_click(session, element):
-    return session.transport.send(
-        "POST", "/session/{session_id}/element/{element_id}/click".format(
-            session_id=session.session_id,
-            element_id=element.id))
+from . import element_click
 
 
 def test_is_stale(session):
     session.url = inline("<button>foo</button>")
     button = session.find.css("button", all=False)
     session.url = inline("<button>bar</button>")
 
     response = element_click(session, button)
--- a/testing/web-platform/tests/webdriver/tests/element_send_keys/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/element_send_keys/__init__.py
@@ -1,2 +1,10 @@
+def element_send_keys(session, element, text):
+    return session.transport.send(
+        "POST", "/session/{session_id}/element/{element_id}/value".format(
+            session_id=session.session_id,
+            element_id=element.id),
+        {"text": text})
+
+
 def map_files_to_multiline_text(files):
     return "\n".join(map(lambda f: str(f), files))
--- a/testing/web-platform/tests/webdriver/tests/element_send_keys/content_editable.py
+++ b/testing/web-platform/tests/webdriver/tests/element_send_keys/content_editable.py
@@ -1,23 +1,24 @@
-import pytest
+from tests.support.asserts import assert_success
+from tests.support.inline import inline
 
-from tests.support.inline import inline
+from . import element_send_keys
 
 
 def test_sets_insertion_point_to_end(session):
     session.url = inline('<div contenteditable=true>Hello,</div>')
     input = session.find.css("div", all=False)
-    input.send_keys(' world!')
-    text = session.execute_script('return arguments[0].innerText', args=[input])
-    assert "Hello, world!" == text.strip()
+
+    response = element_send_keys(session, input, " world!")
+    assert_success(response)
+
+    assert input.property("innerText").strip() == "Hello, world!"
 
 
-# 12. Let current text length be the element's length.
-#
-# 13. Set the text insertion caret using set selection range using current
-#     text length for both the start and end parameters.
 def test_sets_insertion_point_to_after_last_text_node(session):
     session.url = inline('<div contenteditable=true>Hel<span>lo</span>,</div>')
     input = session.find.css("div", all=False)
-    input.send_keys(" world!")
-    text = session.execute_script("return arguments[0].innerText", args=[input])
-    assert "Hello, world!" == text.strip()
+
+    response = element_send_keys(session, input, " world!")
+    assert_success(response)
+
+    assert input.property("innerText").strip() == "Hello, world!"
--- a/testing/web-platform/tests/webdriver/tests/element_send_keys/events.py
+++ b/testing/web-platform/tests/webdriver/tests/element_send_keys/events.py
@@ -2,40 +2,32 @@ import pytest
 
 from tests.support.asserts import (
     assert_element_has_focus,
     assert_events_equal,
     assert_success,
 )
 from tests.support.inline import inline
 
-from . import map_files_to_multiline_text
+from . import element_send_keys, map_files_to_multiline_text
 
 
 @pytest.fixture
 def tracked_events():
     return [
         "blur",
         "change",
         "focus",
         "input",
         "keydown",
         "keypress",
         "keyup",
     ]
 
 
-def element_send_keys(session, element, text):
-    return session.transport.send(
-        "POST", "/session/{session_id}/element/{element_id}/value".format(
-            session_id=session.session_id,
-            element_id=element.id),
-        {"text": text})
-
-
 def test_file_upload(session, create_files, add_event_listeners, tracked_events):
     expected_events = [
         "input",
         "change",
     ]
 
     files = create_files(["foo", "bar"])
 
--- a/testing/web-platform/tests/webdriver/tests/element_send_keys/file_upload.py
+++ b/testing/web-platform/tests/webdriver/tests/element_send_keys/file_upload.py
@@ -1,20 +1,12 @@
 from tests.support.asserts import assert_error, assert_files_uploaded, assert_success
 from tests.support.inline import inline
 
-from . import map_files_to_multiline_text
-
-
-def element_send_keys(session, element, text):
-    return session.transport.send(
-        "POST", "/session/{session_id}/element/{element_id}/value".format(
-            session_id=session.session_id,
-            element_id=element.id),
-        {"text": text})
+from . import element_send_keys, map_files_to_multiline_text
 
 
 def test_empty_text(session):
     session.url = inline("<input type=file>")
     element = session.find.css("input", all=False)
 
     response = element_send_keys(session, element, "")
     assert_error(response, "invalid argument")
--- a/testing/web-platform/tests/webdriver/tests/element_send_keys/interactability.py
+++ b/testing/web-platform/tests/webdriver/tests/element_send_keys/interactability.py
@@ -1,18 +1,12 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import iframe, inline
 
-
-def element_send_keys(session, element, text):
-    return session.transport.send(
-        "POST", "/session/{session_id}/element/{element_id}/value".format(
-            session_id=session.session_id,
-            element_id=element.id),
-        {"text": text})
+from . import element_send_keys
 
 
 def test_body_is_interactable(session):
     session.url = inline("""
         <body onkeypress="document.querySelector('input').value += event.key">
           <input>
         </body>
     """)
--- a/testing/web-platform/tests/webdriver/tests/element_send_keys/scroll_into_view.py
+++ b/testing/web-platform/tests/webdriver/tests/element_send_keys/scroll_into_view.py
@@ -1,19 +1,13 @@
 from tests.support.asserts import assert_success
 from tests.support.fixtures import is_element_in_viewport
 from tests.support.inline import inline
 
-
-def element_send_keys(session, element, text):
-    return session.transport.send(
-        "POST", "/session/{session_id}/element/{element_id}/value".format(
-            session_id=session.session_id,
-            element_id=element.id),
-        {"text": text})
+from . import element_send_keys
 
 
 def test_element_outside_of_not_scrollable_viewport(session):
     session.url = inline("<input style=\"position: relative; left: -9999px;\">")
     element = session.find.css("input", all=False)
 
     response = element_send_keys(session, element, "foo")
     assert_success(response)
--- a/testing/web-platform/tests/webdriver/tests/element_send_keys/send_keys.py
+++ b/testing/web-platform/tests/webdriver/tests/element_send_keys/send_keys.py
@@ -1,22 +1,16 @@
 import pytest
 
 from webdriver import Element
 
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def element_send_keys(session, element, text):
-    return session.transport.send(
-        "POST", "/session/{session_id}/element/{element_id}/value".format(
-            session_id=session.session_id,
-            element_id=element.id),
-        {"text": text})
+from . import element_send_keys
 
 
 def test_null_response_value(session):
     session.url = inline("<input>")
     element = session.find.css("input", all=False)
 
     response = element_send_keys(session, element, "foo")
     value = assert_success(response)
--- a/testing/web-platform/tests/webdriver/tests/element_send_keys/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/element_send_keys/user_prompts.py
@@ -1,22 +1,16 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 from tests.support.inline import inline
 
-
-def element_send_keys(session, element, text):
-    return session.transport.send(
-        "POST", "/session/{session_id}/element/{element_id}/value".format(
-            session_id=session.session_id,
-            element_id=element.id),
-        {"text": text})
+from . import element_send_keys
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         session.url = inline("<input type=text>")
         element = session.find.css("input", all=False)
 
--- a/testing/web-platform/tests/webdriver/tests/execute_async_script/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/execute_async_script/__init__.py
@@ -0,0 +1,8 @@
+def execute_async_script(session, script, args=None):
+    if args is None:
+        args = []
+    body = {"script": script, "args": args}
+
+    return session.transport.send(
+        "POST", "/session/{session_id}/execute/async".format(**vars(session)),
+        body)
--- a/testing/web-platform/tests/webdriver/tests/execute_async_script/collections.py
+++ b/testing/web-platform/tests/webdriver/tests/execute_async_script/collections.py
@@ -1,22 +1,14 @@
 import os
 
 from tests.support.asserts import assert_same_element, assert_success
 from tests.support.inline import inline
 
-
-def execute_async_script(session, script, args=None):
-    if args is None:
-        args = []
-    body = {"script": script, "args": args}
-
-    return session.transport.send(
-        "POST", "/session/{session_id}/execute/async".format(**vars(session)),
-        body)
+from . import execute_async_script
 
 
 def test_arguments(session):
     response = execute_async_script(session, """
         let resolve = arguments[0];
         function func() {
             return arguments;
         }
--- a/testing/web-platform/tests/webdriver/tests/execute_async_script/execute_async.py
+++ b/testing/web-platform/tests/webdriver/tests/execute_async_script/execute_async.py
@@ -1,21 +1,13 @@
 import pytest
 
 from tests.support.asserts import assert_error, assert_success
 
-
-def execute_async_script(session, script, args=None):
-    if args is None:
-        args = []
-    body = {"script": script, "args": args}
-
-    return session.transport.send(
-        "POST", "/session/{session_id}/execute/async".format(**vars(session)),
-        body)
+from . import execute_async_script
 
 
 def test_no_browsing_context(session, closed_window):
     response = execute_async_script(session, "argument[0](1);")
     assert_error(response, "no such window")
 
 
 @pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
--- a/testing/web-platform/tests/webdriver/tests/execute_async_script/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/execute_async_script/user_prompts.py
@@ -1,23 +1,15 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 
-
-def execute_async_script(session, script, args=None):
-    if args is None:
-        args = []
-    body = {"script": script, "args": args}
-
-    return session.transport.send(
-        "POST", "/session/{session_id}/execute/async".format(**vars(session)),
-        body)
+from . import execute_async_script
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         create_dialog(dialog_type, text=dialog_type)
 
         response = execute_async_script(session, "window.result = 1; arguments[0](1);")
--- a/testing/web-platform/tests/webdriver/tests/execute_script/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/execute_script/__init__.py
@@ -0,0 +1,8 @@
+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)
--- a/testing/web-platform/tests/webdriver/tests/execute_script/collections.py
+++ b/testing/web-platform/tests/webdriver/tests/execute_script/collections.py
@@ -1,22 +1,14 @@
 import os
 
 from tests.support.asserts import assert_same_element, assert_success
 from tests.support.inline import inline
 
-
-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)
+from . import execute_script
 
 
 def test_arguments(session):
     response = execute_script(session, """
         function func() {
             return arguments;
         }
         return func("foo", "bar");
--- a/testing/web-platform/tests/webdriver/tests/execute_script/cyclic.py
+++ b/testing/web-platform/tests/webdriver/tests/execute_script/cyclic.py
@@ -1,21 +1,12 @@
 from tests.support.asserts import assert_error, assert_same_element, assert_success
 from tests.support.inline import inline
 
-
-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(
-            session_id=session.session_id),
-        body)
+from . import execute_script
 
 
 def test_array(session):
     response = execute_script(session, """
         let arr = [];
         arr.push(arr);
         return arr;
         """)
--- a/testing/web-platform/tests/webdriver/tests/execute_script/execute.py
+++ b/testing/web-platform/tests/webdriver/tests/execute_script/execute.py
@@ -1,22 +1,13 @@
 import pytest
 
 from tests.support.asserts import assert_error, assert_success
 
-
-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(
-            session_id=session.session_id),
-        body)
+from . import execute_script
 
 
 def test_no_browsing_context(session, closed_window):
     response = execute_script(session, "return 1;")
     assert_error(response, "no such window")
 
 
 def test_ending_comment(session):
--- a/testing/web-platform/tests/webdriver/tests/execute_script/json_serialize_windowproxy.py
+++ b/testing/web-platform/tests/webdriver/tests/execute_script/json_serialize_windowproxy.py
@@ -1,27 +1,19 @@
 import json
 
 from tests.support.asserts import assert_success
 
+from . import execute_script
+
 
 _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
--- a/testing/web-platform/tests/webdriver/tests/execute_script/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/execute_script/user_prompts.py
@@ -1,24 +1,15 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 
-
-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(
-            session_id=session.session_id),
-        body)
+from . import execute_script
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         create_dialog(dialog_type, text=dialog_type)
 
         response = execute_script(session, "window.result = 1; return 1;")
--- a/testing/web-platform/tests/webdriver/tests/find_element/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/find_element/__init__.py
@@ -0,0 +1,4 @@
+def find_element(session, using, value):
+    return session.transport.send(
+        "POST", "session/{session_id}/element".format(**vars(session)),
+        {"using": using, "value": value})
--- a/testing/web-platform/tests/webdriver/tests/find_element/find.py
+++ b/testing/web-platform/tests/webdriver/tests/find_element/find.py
@@ -1,18 +1,14 @@
 import pytest
 
 from tests.support.asserts import assert_error, assert_same_element, assert_success
 from tests.support.inline import inline
 
-
-def find_element(session, using, value):
-    return session.transport.send(
-        "POST", "session/{session_id}/element".format(**vars(session)),
-        {"using": using, "value": value})
+from . import find_element
 
 
 def test_no_browsing_context(session, closed_window):
     response = find_element(session, "css selector", "foo")
     assert_error(response, "no such window")
 
 
 @pytest.mark.parametrize("using", ["a", True, None, 1, [], {}])
--- a/testing/web-platform/tests/webdriver/tests/find_element_from_element/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/find_element_from_element/__init__.py
@@ -0,0 +1,6 @@
+def find_element_from_element(session, element_id, using, value):
+    return session.transport.send(
+        "POST", "session/{session_id}/element/{element_id}/element".format(
+            session_id=session.session_id,
+            element_id=element_id),
+        {"using": using, "value": value})
--- a/testing/web-platform/tests/webdriver/tests/find_element_from_element/find.py
+++ b/testing/web-platform/tests/webdriver/tests/find_element_from_element/find.py
@@ -1,124 +1,112 @@
 import pytest
 
 from tests.support.asserts import assert_error, assert_same_element, assert_success
 from tests.support.inline import inline
 
-
-def find_element(session, element_id, using, value):
-    return session.transport.send(
-        "POST", "session/{session_id}/element/{element_id}/element".format(
-            session_id=session.session_id,
-            element_id=element_id),
-        {"using": using, "value": value})
+from . import find_element_from_element
 
 
 def test_no_browsing_context(session, closed_window):
-    response = find_element(session, "notReal", "css selector", "foo")
+    response = find_element_from_element(session, "notReal", "css selector", "foo")
     assert_error(response, "no such window")
 
 
 @pytest.mark.parametrize("using", ["a", True, None, 1, [], {}])
 def test_invalid_using_argument(session, using):
-    # Step 1 - 2
-    response = find_element(session, "notReal", using, "value")
+    response = find_element_from_element(session, "notReal", using, "value")
     assert_error(response, "invalid argument")
 
 
 @pytest.mark.parametrize("value", [None, [], {}])
 def test_invalid_selector_argument(session, value):
-    # Step 3 - 4
-    response = find_element(session, "notReal", "css selector", value)
+    response = find_element_from_element(session, "notReal", "css selector", value)
     assert_error(response, "invalid argument")
 
 
 @pytest.mark.parametrize("using,value",
                          [("css selector", "#linkText"),
                           ("link text", "full link text"),
                           ("partial link text", "link text"),
                           ("tag name", "a"),
                           ("xpath", "//a")])
 def test_find_element(session, using, value):
-    # Step 8 - 9
     session.url = inline("<div><a href=# id=linkText>full link text</a></div>")
     element = session.find.css("div", all=False)
-    response = find_element(session, element.id, using, value)
+    response = find_element_from_element(session, element.id, using, value)
     assert_success(response)
 
 
 @pytest.mark.parametrize("document,value", [
     ("<a href=#>link text</a>", "link text"),
     ("<a href=#>&nbsp;link text&nbsp;</a>", "link text"),
     ("<a href=#>link<br>text</a>", "link\ntext"),
     ("<a href=#>link&amp;text</a>", "link&text"),
     ("<a href=#>LINK TEXT</a>", "LINK TEXT"),
     ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"),
 ])
 def test_find_element_link_text(session, document, value):
-    # Step 8 - 9
     session.url = inline("<div>{0}</div>".format(document))
     element = session.find.css("div", all=False)
 
-    response = find_element(session, element.id, "link text", value)
+    response = find_element_from_element(session, element.id, "link text", value)
     assert_success(response)
 
 
 @pytest.mark.parametrize("document,value", [
     ("<a href=#>partial link text</a>", "link"),
     ("<a href=#>&nbsp;partial link text&nbsp;</a>", "link"),
     ("<a href=#>partial link text</a>", "k t"),
     ("<a href=#>partial link<br>text</a>", "k\nt"),
     ("<a href=#>partial link&amp;text</a>", "k&t"),
     ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"),
     ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"),
 ])
 def test_find_element_partial_link_text(session, document, value):
-    # Step 8 - 9
     session.url = inline("<div>{0}</div>".format(document))
     element = session.find.css("div", all=False)
 
-    response = find_element(session, element.id, "partial link text", value)
+    response = find_element_from_element(session, element.id, "partial link text", value)
     assert_success(response)
 
 
-@pytest.mark.parametrize("using,value",[("css selector", "#wontExist")])
+@pytest.mark.parametrize("using,value", [("css selector", "#wontExist")])
 def test_no_element(session, using, value):
-    # Step 8 - 9
     session.url = inline("<div></div>")
     element = session.find.css("div", all=False)
-    response = find_element(session, element.id, using, value)
+    response = find_element_from_element(session, element.id, using, value)
     assert_error(response, "no such element")
 
 
 @pytest.mark.parametrize("using,value",
                          [("css selector", "#linkText"),
                           ("link text", "full link text"),
                           ("partial link text", "link text"),
                           ("tag name", "a"),
                           ("xpath", "//*[name()='a']")])
 def test_xhtml_namespace(session, using, value):
     session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""",
                          doctype="xhtml")
     from_element = session.execute_script("""return document.querySelector("p")""")
     expected = session.execute_script("return document.links[0]")
 
-    response = find_element(session, from_element.id, using, value)
+    response = find_element_from_element(session, from_element.id, using, value)
     value = assert_success(response)
     assert_same_element(session, value, expected)
 
 
 def test_parent_htmldocument(session):
     session.url = inline("")
     from_element = session.execute_script("""return document.querySelector("body")""")
     expected = session.execute_script("return document.documentElement")
 
-    response = find_element(session, from_element.id, "xpath", "..")
+    response = find_element_from_element(session, from_element.id, "xpath", "..")
     value = assert_success(response)
     assert_same_element(session, value, expected)
 
 
 def test_parent_of_document_node_errors(session):
     session.url = inline("")
     from_element = session.execute_script("return document.documentElement")
 
-    response = find_element(session, from_element.id, "xpath", "..")
+    response = find_element_from_element(session, from_element.id, "xpath", "..")
     assert_error(response, "invalid selector")
--- a/testing/web-platform/tests/webdriver/tests/find_elements/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/find_elements/__init__.py
@@ -0,0 +1,4 @@
+def find_elements(session, using, value):
+    return session.transport.send(
+        "POST", "session/{session_id}/elements".format(**vars(session)),
+        {"using": using, "value": value})
--- a/testing/web-platform/tests/webdriver/tests/find_elements/find.py
+++ b/testing/web-platform/tests/webdriver/tests/find_elements/find.py
@@ -1,18 +1,14 @@
 import pytest
 
 from tests.support.asserts import assert_error, assert_same_element, assert_success
 from tests.support.inline import inline
 
-
-def find_elements(session, using, value):
-    return session.transport.send(
-        "POST", "session/{session_id}/elements".format(**vars(session)),
-        {"using": using, "value": value})
+from . import find_elements
 
 
 def test_no_browsing_context(session, closed_window):
     response = find_elements(session, "css selector", "foo")
     assert_error(response, "no such window")
 
 
 @pytest.mark.parametrize("using", ["a", True, None, 1, [], {}])
--- a/testing/web-platform/tests/webdriver/tests/find_elements_from_element/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/find_elements_from_element/__init__.py
@@ -0,0 +1,6 @@
+def find_elements_from_element(session, element_id, using, value):
+    return session.transport.send(
+        "POST", "session/{session_id}/element/{element_id}/elements".format(
+            session_id=session.session_id,
+            element_id=element_id),
+        {"using": using, "value": value})
--- a/testing/web-platform/tests/webdriver/tests/find_elements_from_element/find.py
+++ b/testing/web-platform/tests/webdriver/tests/find_elements_from_element/find.py
@@ -1,70 +1,60 @@
 import pytest
 
 from tests.support.asserts import assert_error, assert_same_element, assert_success
 from tests.support.inline import inline
 
-
-def find_elements(session, element_id, using, value):
-    return session.transport.send(
-        "POST", "session/{session_id}/element/{element_id}/elements".format(
-            session_id=session.session_id,
-            element_id=element_id),
-        {"using": using, "value": value})
+from . import find_elements_from_element
 
 
 def test_no_browsing_context(session, closed_window):
-    response = find_elements(session, "notReal", "css selector", "foo")
+    response = find_elements_from_element(session, "notReal", "css selector", "foo")
     assert_error(response, "no such window")
 
 
 @pytest.mark.parametrize("using", [("a"), (True), (None), (1), ([]), ({})])
 def test_invalid_using_argument(session, using):
-    # Step 1 - 2
-    response = find_elements(session, "notReal", using, "value")
+    response = find_elements_from_element(session, "notReal", using, "value")
     assert_error(response, "invalid argument")
 
 
 @pytest.mark.parametrize("value", [None, [], {}])
 def test_invalid_selector_argument(session, value):
-    # Step 3 - 4
-    response = find_elements(session, "notReal", "css selector", value)
+    response = find_elements_from_element(session, "notReal", "css selector", value)
     assert_error(response, "invalid argument")
 
 
 @pytest.mark.parametrize("using,value",
                          [("css selector", "#linkText"),
                           ("link text", "full link text"),
                           ("partial link text", "link text"),
                           ("tag name", "a"),
                           ("xpath", "//a")])
 def test_find_elements(session, using, value):
-    # Step 8 - 9
     session.url = inline("<div><a href=# id=linkText>full link text</a></div>")
     element = session.find.css("div", all=False)
-    response = find_elements(session, element.id, using, value)
+    response = find_elements_from_element(session, element.id, using, value)
     assert_success(response)
 
 
 @pytest.mark.parametrize("document,value", [
     ("<a href=#>link text</a>", "link text"),
     ("<a href=#>&nbsp;link text&nbsp;</a>", "link text"),
     ("<a href=#>link<br>text</a>", "link\ntext"),
     ("<a href=#>link&amp;text</a>", "link&text"),
     ("<a href=#>LINK TEXT</a>", "LINK TEXT"),
     ("<a href=# style='text-transform: uppercase'>link text</a>", "LINK TEXT"),
 ])
 def test_find_elements_link_text(session, document, value):
-    # Step 8 - 9
     session.url = inline("<div><a href=#>not wanted</a><br/>{0}</div>".format(document))
     element = session.find.css("div", all=False)
     expected = session.execute_script("return document.links[1];")
 
-    response = find_elements(session, element.id, "link text", value)
+    response = find_elements_from_element(session, element.id, "link text", value)
     value = assert_success(response)
     assert isinstance(value, list)
     assert len(value) == 1
 
     found_element = value[0]
     assert_same_element(session, found_element, expected)
 
 
@@ -73,72 +63,70 @@ def test_find_elements_link_text(session
     ("<a href=#>&nbsp;partial link text&nbsp;</a>", "link"),
     ("<a href=#>partial link text</a>", "k t"),
     ("<a href=#>partial link<br>text</a>", "k\nt"),
     ("<a href=#>partial link&amp;text</a>", "k&t"),
     ("<a href=#>PARTIAL LINK TEXT</a>", "LINK"),
     ("<a href=# style='text-transform: uppercase'>partial link text</a>", "LINK"),
 ])
 def test_find_elements_partial_link_text(session, document, value):
-    # Step 8 - 9
     session.url = inline("<div><a href=#>not wanted</a><br/>{0}</div>".format(document))
     element = session.find.css("div", all=False)
     expected = session.execute_script("return document.links[1];")
 
-    response = find_elements(session, element.id, "partial link text", value)
+    response = find_elements_from_element(session, element.id, "partial link text", value)
     value = assert_success(response)
     assert isinstance(value, list)
     assert len(value) == 1
 
     found_element = value[0]
     assert_same_element(session, found_element, expected)
 
 
 @pytest.mark.parametrize("using,value", [("css selector", "#wontExist")])
 def test_no_element(session, using, value):
-    # Step 8 - 9
     session.url = inline("<div></div>")
     element = session.find.css("div", all=False)
-    response = find_elements(session, element.id, using, value)
+    response = find_elements_from_element(session, element.id, using, value)
     assert response.body["value"] == []
 
 
 @pytest.mark.parametrize("using,value",
                          [("css selector", "#linkText"),
                           ("link text", "full link text"),
                           ("partial link text", "link text"),
                           ("tag name", "a"),
                           ("xpath", "//*[name()='a']")])
 def test_xhtml_namespace(session, using, value):
     session.url = inline("""<p><a href="#" id="linkText">full link text</a></p>""",
                          doctype="xhtml")
     from_element = session.execute_script("""return document.querySelector("p")""")
     expected = session.execute_script("return document.links[0]")
 
-    response = find_elements(session, from_element.id, using, value)
+    response = find_elements_from_element(session, from_element.id, using, value)
     value = assert_success(response)
     assert isinstance(value, list)
     assert len(value) == 1
 
     found_element = value[0]
     assert_same_element(session, found_element, expected)
 
 
 def test_parent_htmldocument(session):
     session.url = inline("")
     from_element = session.execute_script("""return document.querySelector("body")""")
     expected = session.execute_script("return document.documentElement")
 
-    response = find_elements(session, from_element.id, "xpath", "..")
+    response = find_elements_from_element(session, from_element.id, "xpath", "..")
     value = assert_success(response)
     assert isinstance(value, list)
     assert len(value) == 1
 
     found_element = value[0]
     assert_same_element(session, found_element, expected)
 
 
 def test_parent_of_document_node_errors(session):
     session.url = inline("")
     from_element = session.execute_script("return document.documentElement")
 
-    response = find_elements(session, from_element.id, "xpath", "..")
+    response = find_elements_from_element(session, from_element.id, "xpath", "..")
     assert_error(response, "invalid selector")
--- a/testing/web-platform/tests/webdriver/tests/forward/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/forward/__init__.py
@@ -0,0 +1,3 @@
+def forward(session):
+    return session.transport.send(
+        "POST", "session/{session_id}/forward".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/forward/forward.py
+++ b/testing/web-platform/tests/webdriver/tests/forward/forward.py
@@ -1,15 +1,12 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def forward(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/forward".format(**vars(session)))
+from . import forward
 
 
 def test_null_response_value(session):
     session.url = inline("<div>")
     session.url = inline("<p>")
     session.back()
 
     response = forward(session)
--- a/testing/web-platform/tests/webdriver/tests/forward/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/forward/user_prompts.py
@@ -1,19 +1,16 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 from tests.support.inline import inline
 
-
-def forward(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/forward".format(**vars(session)))
+from . import forward
 
 
 @pytest.fixture
 def pages(session):
     pages = [
         inline("<p id=1>"),
         inline("<p id=2>"),
     ]
--- a/testing/web-platform/tests/webdriver/tests/fullscreen_window/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/fullscreen_window/__init__.py
@@ -0,0 +1,14 @@
+def fullscreen(session):
+    return session.transport.send(
+        "POST", "session/{session_id}/window/fullscreen".format(**vars(session)))
+
+
+def is_fullscreen(session):
+    # At the time of writing, WebKit does not conform to the
+    # Fullscreen API specification.
+    #
+    # Remove the prefixed fallback when
+    # https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed.
+    return session.execute_script("""
+        return !!(window.fullScreen || document.webkitIsFullScreen)
+        """)
--- a/testing/web-platform/tests/webdriver/tests/fullscreen_window/fullscreen.py
+++ b/testing/web-platform/tests/webdriver/tests/fullscreen_window/fullscreen.py
@@ -1,25 +1,11 @@
 from tests.support.asserts import assert_error, assert_success
 
-
-def fullscreen(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/window/fullscreen".format(**vars(session)))
-
-
-def is_fullscreen(session):
-    # At the time of writing, WebKit does not conform to the
-    # Fullscreen API specification.
-    #
-    # Remove the prefixed fallback when
-    # https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed.
-    return session.execute_script("""
-        return !!(window.fullScreen || document.webkitIsFullScreen)
-        """)
+from . import fullscreen, is_fullscreen
 
 
 def test_no_browsing_context(session, closed_window):
     response = fullscreen(session)
     assert_error(response, "no such window")
 
 
 def test_fullscreen(session):
--- a/testing/web-platform/tests/webdriver/tests/fullscreen_window/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/fullscreen_window/user_prompts.py
@@ -1,29 +1,15 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 
-
-def fullscreen(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/window/fullscreen".format(**vars(session)))
-
-
-def is_fullscreen(session):
-    # At the time of writing, WebKit does not conform to the
-    # Fullscreen API specification.
-    #
-    # Remove the prefixed fallback when
-    # https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed.
-    return session.execute_script("""
-        return !!(window.fullScreen || document.webkitIsFullScreen)
-        """)
+from . import fullscreen, is_fullscreen
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         assert is_fullscreen(session) is False
 
         create_dialog(dialog_type, text=dialog_type)
--- a/testing/web-platform/tests/webdriver/tests/get_active_element/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/get_active_element/__init__.py
@@ -0,0 +1,3 @@
+def get_active_element(session):
+    return session.transport.send(
+        "GET", "session/{session_id}/element/active".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/get_active_element/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_active_element/get.py
@@ -1,19 +1,12 @@
 from tests.support.asserts import assert_error, assert_same_element
 from tests.support.inline import inline
 
-
-def read_global(session, name):
-    return session.execute_script("return %s;" % name)
-
-
-def get_active_element(session):
-    return session.transport.send(
-        "GET", "session/{session_id}/element/active".format(**vars(session)))
+from . import get_active_element
 
 
 def assert_is_active_element(session, response):
     """Ensure that the provided object is a successful WebDriver
     response describing an element reference and that the referenced
     element matches the element returned by the `activeElement`
     attribute of the current browsing context's active document.
 
--- a/testing/web-platform/tests/webdriver/tests/get_alert_text/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/get_alert_text/__init__.py
@@ -0,0 +1,3 @@
+def get_alert_text(session):
+    return session.transport.send(
+        "GET", "session/{session_id}/alert/text".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/get_alert_text/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_alert_text/get.py
@@ -1,15 +1,12 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def get_alert_text(session):
-    return session.transport.send(
-        "GET", "session/{session_id}/alert/text".format(**vars(session)))
+from . import get_alert_text
 
 
 def test_no_browsing_context(session, closed_window):
     response = get_alert_text(session)
     assert_error(response, "no such window")
 
 
 def test_no_user_prompt(session):
--- a/testing/web-platform/tests/webdriver/tests/get_current_url/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/get_current_url/__init__.py
@@ -0,0 +1,3 @@
+def get_current_url(session):
+    return session.transport.send(
+        "GET", "session/{session_id}/url".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/get_current_url/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_current_url/get.py
@@ -1,27 +1,20 @@
-import json
-import pytest
-import types
-
 from tests.support.inline import inline
 from tests.support.asserts import assert_error, assert_success
 from tests.support.wait import wait
 
-alert_doc = inline("<script>window.alert()</script>")
+from . import get_current_url
+
+
 frame_doc = inline("<p>frame")
 one_frame_doc = inline("<iframe src='%s'></iframe>" % frame_doc)
 two_frames_doc = inline("<iframe src='%s'></iframe>" % one_frame_doc)
 
 
-def get_current_url(session):
-    return session.transport.send(
-        "GET", "session/{session_id}/url".format(**vars(session)))
-
-
 def test_no_browsing_context(session, closed_window):
     response = get_current_url(session)
     assert_error(response, "no such window")
 
 
 def test_get_current_url_matches_location(session):
     url = session.execute_script("return window.location.href")
 
@@ -61,33 +54,36 @@ def test_get_current_url_file_protocol(s
 
 def test_set_malformed_url(session):
     result = session.transport.send("POST",
                                     "session/%s/url" % session.session_id,
                                     {"url": "foo"})
 
     assert_error(result, "invalid argument")
 
+
 def test_get_current_url_after_modified_location(session):
     start = get_current_url(session)
     session.execute_script("window.location.href = 'about:blank#wd_test_modification'")
     wait(session,
          lambda _: get_current_url(session).body["value"] != start.body["value"],
          "URL did not change")
 
     result = get_current_url(session)
     assert_success(result, "about:blank#wd_test_modification")
 
+
 def test_get_current_url_nested_browsing_context(session, create_frame):
     session.url = "about:blank#wd_from_within_frame"
     session.switch_frame(create_frame())
 
     result = get_current_url(session)
     assert_success(result, "about:blank#wd_from_within_frame")
 
+
 def test_get_current_url_nested_browsing_contexts(session):
     session.url = two_frames_doc
     top_level_url = session.url
 
     outer_frame = session.find.css("iframe", all=False)
     session.switch_frame(outer_frame)
 
     inner_frame = session.find.css("iframe", all=False)
--- a/testing/web-platform/tests/webdriver/tests/get_current_url/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/get_current_url/user_prompts.py
@@ -1,18 +1,16 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 from tests.support.inline import inline
 
-
-def get_current_url(session):
-    return session.transport.send("GET", "session/%s/url" % session.session_id)
+from . import get_current_url
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         session.url = inline("<p id=1>")
         expected_url = session.url
 
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/get_element_attribute/__init__.py
@@ -0,0 +1,6 @@
+def get_element_attribute(session, element, attr):
+    return session.transport.send(
+        "GET", "session/{session_id}/element/{element_id}/attribute/{attr}".format(
+            session_id=session.session_id,
+            element_id=element,
+            attr=attr))
--- a/testing/web-platform/tests/webdriver/tests/get_element_attribute/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_element_attribute/get.py
@@ -1,43 +1,35 @@
 import pytest
 
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def get_element_attribute(session, element, attr):
-    return session.transport.send(
-        "GET", "session/{session_id}/element/{element_id}/attribute/{attr}".format(
-            session_id=session.session_id,
-            element_id=element,
-            attr=attr))
+from . import get_element_attribute
 
 
 def test_no_browsing_context(session, closed_window):
     response = get_element_attribute(session, "foo", "id")
     assert_error(response, "no such window")
 
 
 def test_element_not_found(session):
-    # 13.2 Step 3
     result = get_element_attribute(session, "foo", "id")
     assert_error(result, "no such element")
 
 
 def test_element_stale(session):
     session.url = inline("<input id=foo>")
     element = session.find.css("input", all=False)
     session.refresh()
     result = get_element_attribute(session, element.id, "id")
     assert_error(result, "stale element reference")
 
 
 def test_normal(session):
-    # 13.2 Step 5
     session.url = inline("<input type=checkbox>")
     element = session.find.css("input", all=False)
     result = get_element_attribute(session, element.id, "input")
     assert_success(result, None)
 
     # Check we are not returning the property which will have a different value
     assert session.execute_script("return document.querySelector('input').checked") is False
     element.click()
--- a/testing/web-platform/tests/webdriver/tests/get_element_property/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/get_element_property/__init__.py
@@ -0,0 +1,6 @@
+def get_element_property(session, element_id, prop):
+    return session.transport.send(
+        "GET", "session/{session_id}/element/{element_id}/property/{prop}".format(
+            session_id=session.session_id,
+            element_id=element_id,
+            prop=prop))
--- a/testing/web-platform/tests/webdriver/tests/get_element_property/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_element_property/get.py
@@ -1,29 +1,23 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-_input = inline("<input id=i1>")
+from . import get_element_property
 
 
-def get_element_property(session, element_id, prop):
-    return session.transport.send(
-        "GET", "session/{session_id}/element/{element_id}/property/{prop}".format(
-            session_id=session.session_id,
-            element_id=element_id,
-            prop=prop))
+_input = inline("<input id=i1>")
 
 
 def test_no_browsing_context(session, closed_window):
     response = get_element_property(session, "foo", "id")
     assert_error(response, "no such window")
 
 
 def test_element_not_found(session):
-    # 13.3 Step 3
     result = get_element_property(session, "foo", "id")
     assert_error(result, "no such element")
 
 
 def test_element_stale(session):
     session.url = _input
     element = session.find.css("input", all=False)
     session.refresh()
--- a/testing/web-platform/tests/webdriver/tests/get_element_property/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/get_element_property/user_prompts.py
@@ -1,20 +1,16 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
 from tests.support.inline import inline
 
-
-def get_element_property(session, element_id, name):
-    return session.transport.send(
-        "GET", "session/{session_id}/element/{element_id}/property/{name}".format(
-            session_id=session.session_id, element_id=element_id, name=name))
+from . import get_element_property
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         session.url = inline("<input id=foo>")
         element = session.find.css("#foo", all=False)
 
--- a/testing/web-platform/tests/webdriver/tests/get_element_tag_name/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/get_element_tag_name/__init__.py
@@ -0,0 +1,5 @@
+def get_element_tag_name(session, element_id):
+    return session.transport.send(
+        "GET", "session/{session_id}/element/{element_id}/name".format(
+            session_id=session.session_id,
+            element_id=element_id))
--- a/testing/web-platform/tests/webdriver/tests/get_element_tag_name/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_element_tag_name/get.py
@@ -1,17 +1,12 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def get_element_tag_name(session, element_id):
-    return session.transport.send(
-        "GET", "session/{session_id}/element/{element_id}/name".format(
-            session_id=session.session_id,
-            element_id=element_id))
+from . import get_element_tag_name
 
 
 def test_no_browsing_context(session, closed_window):
     response = get_element_tag_name(session, "foo")
     assert_error(response, "no such window")
 
 
 def test_element_not_found(session):
--- a/testing/web-platform/tests/webdriver/tests/get_element_tag_name/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/get_element_tag_name/user_prompts.py
@@ -1,19 +1,16 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
 from tests.support.inline import inline
 
-
-def get_element_tag_name(session, element_id):
-    return session.transport.send("GET", "session/{session_id}/element/{element_id}/name".format(
-        session_id=session.session_id, element_id=element_id))
+from . import get_element_tag_name
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         session.url = inline("<input id=foo>")
         element = session.find.css("#foo", all=False)
 
--- a/testing/web-platform/tests/webdriver/tests/get_element_text/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/get_element_text/__init__.py
@@ -0,0 +1,5 @@
+def get_element_text(session, element_id):
+    return session.transport.send(
+        "GET", "session/{session_id}/element/{element_id}/text".format(
+            session_id=session.session_id,
+            element_id=element_id))
--- a/testing/web-platform/tests/webdriver/tests/get_element_text/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_element_text/get.py
@@ -1,17 +1,12 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def get_element_text(session, element_id):
-    return session.transport.send(
-        "GET", "session/{session_id}/element/{element_id}/text".format(
-            session_id=session.session_id,
-            element_id=element_id))
+from . import get_element_text
 
 
 def test_no_browsing_context(session, closed_window):
     response = get_element_text(session, "foo")
     assert_error(response, "no such window")
 
 
 def test_getting_text_of_a_non_existant_element_is_an_error(session):
--- a/testing/web-platform/tests/webdriver/tests/get_named_cookie/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/get_named_cookie/__init__.py
@@ -0,0 +1,5 @@
+def get_named_cookie(session, name):
+    return session.transport.send(
+        "GET", "session/{session_id}/cookie/{name}".format(
+            session_id=session.session_id,
+            name=name))
--- a/testing/web-platform/tests/webdriver/tests/get_named_cookie/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_named_cookie/get.py
@@ -1,20 +1,15 @@
 from datetime import datetime, timedelta
 
 from tests.support.asserts import assert_error, assert_success
 from tests.support.fixtures import clear_all_cookies
 from tests.support.inline import inline
 
-
-def get_named_cookie(session, name):
-    return session.transport.send(
-        "GET", "session/{session_id}/cookie/{name}".format(
-            session_id=session.session_id,
-            name=name))
+from . import get_named_cookie
 
 
 def test_no_browsing_context(session, closed_window):
     response = get_named_cookie(session, "foo")
     assert_error(response, "no such window")
 
 
 def test_get_named_session_cookie(session, url):
--- a/testing/web-platform/tests/webdriver/tests/get_timeouts/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/get_timeouts/__init__.py
@@ -0,0 +1,3 @@
+def get_timeouts(session):
+    return session.transport.send(
+        "GET", "session/{session_id}/timeouts".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/get_timeouts/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_timeouts/get.py
@@ -1,14 +1,11 @@
 from tests.support.asserts import assert_success
 
-
-def get_timeouts(session):
-    return session.transport.send(
-        "GET", "session/{session_id}/timeouts".format(**vars(session)))
+from . import get_timeouts
 
 
 def test_get_timeouts(session):
     response = get_timeouts(session)
 
     assert_success(response)
     assert "value" in response.body
     assert isinstance(response.body["value"], dict)
--- a/testing/web-platform/tests/webdriver/tests/get_title/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/get_title/__init__.py
@@ -0,0 +1,3 @@
+def get_title(session):
+    return session.transport.send(
+        "GET", "session/{session_id}/title".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/get_title/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_title/get.py
@@ -1,22 +1,19 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 from tests.support.wait import wait
 
+from . import get_title
+
 
 def read_global(session, name):
     return session.execute_script("return %s;" % name)
 
 
-def get_title(session):
-    return session.transport.send(
-        "GET", "session/{session_id}/title".format(**vars(session)))
-
-
 def test_no_browsing_context(session, closed_window):
     response = get_title(session)
     assert_error(response, "no such window")
 
 
 def test_title_from_top_context(session):
     session.url = inline("<title>Foobar</title><h2>Hello</h2>")
 
--- a/testing/web-platform/tests/webdriver/tests/get_title/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/get_title/user_prompts.py
@@ -1,19 +1,16 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 from tests.support.inline import inline
 
-
-def get_title(session):
-    return session.transport.send(
-        "GET", "session/{session_id}/title".format(**vars(session)))
+from . import get_title
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         session.url = inline("<title>Foo</title>")
         expected_title = session.title
 
--- a/testing/web-platform/tests/webdriver/tests/get_window_rect/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/get_window_rect/__init__.py
@@ -0,0 +1,3 @@
+def get_window_rect(session):
+    return session.transport.send(
+        "GET", "session/{session_id}/window/rect".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/get_window_rect/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_window_rect/get.py
@@ -1,18 +1,12 @@
 from tests.support.asserts import assert_error
 from tests.support.inline import inline
 
-
-alert_doc = inline("<script>window.alert()</script>")
-
-
-def get_window_rect(session):
-    return session.transport.send(
-        "GET", "session/{session_id}/window/rect".format(**vars(session)))
+from . import get_window_rect
 
 
 def test_no_browsing_context(session, closed_window):
     response = get_window_rect(session)
     assert_error(response, "no such window")
 
 
 def test_payload(session):
--- a/testing/web-platform/tests/webdriver/tests/get_window_rect/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/get_window_rect/user_prompts.py
@@ -1,18 +1,15 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 
-
-def get_window_rect(session):
-    return session.transport.send(
-        "GET", "session/{session_id}/window/rect".format(**vars(session)))
+from . import get_window_rect
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         original_rect = session.window.rect
 
         create_dialog(dialog_type, text=dialog_type)
--- a/testing/web-platform/tests/webdriver/tests/is_element_selected/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/is_element_selected/__init__.py
@@ -0,0 +1,5 @@
+def is_element_selected(session, element_id):
+    return session.transport.send(
+        "GET", "session/{session_id}/element/{element_id}/selected".format(
+            session_id=session.session_id,
+            element_id=element_id))
--- a/testing/web-platform/tests/webdriver/tests/is_element_selected/selected.py
+++ b/testing/web-platform/tests/webdriver/tests/is_element_selected/selected.py
@@ -1,31 +1,26 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
+from . import is_element_selected
+
 
 check_doc = inline("""
     <input id=checked type=checkbox checked>
     <input id=notChecked type=checkbox>
     """)
 option_doc = inline("""
     <select>
       <option id=notSelected>r-
       <option id=selected selected>r+
     </select>
     """)
 
 
-def is_element_selected(session, element_id):
-    return session.transport.send(
-        "GET", "session/{session_id}/element/{element_id}/selected".format(
-            session_id=session.session_id,
-            element_id=element_id))
-
-
 def test_no_browsing_context(session, closed_window):
     response = is_element_selected(session, "foo")
     assert_error(response, "no such window")
 
 
 def test_element_stale(session):
     session.url = check_doc
     element = session.find.css("#checked", all=False)
--- a/testing/web-platform/tests/webdriver/tests/is_element_selected/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/is_element_selected/user_prompts.py
@@ -1,21 +1,16 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_error, assert_dialog_handled, assert_success
 from tests.support.inline import inline
 
-
-def is_element_selected(session, element_id):
-    return session.transport.send(
-        "GET", "session/{session_id}/element/{element_id}/selected".format(
-            session_id=session.session_id,
-            element_id=element_id))
+from . import is_element_selected
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         session.url = inline("<input id=foo type=checkbox checked>")
         element = session.find.css("#foo", all=False)
         element.send_keys("foo")
--- a/testing/web-platform/tests/webdriver/tests/maximize_window/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/maximize_window/__init__.py
@@ -0,0 +1,3 @@
+def maximize(session):
+    return session.transport.send(
+        "POST", "session/{session_id}/window/maximize".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/maximize_window/maximize.py
+++ b/testing/web-platform/tests/webdriver/tests/maximize_window/maximize.py
@@ -1,14 +1,11 @@
 from tests.support.asserts import assert_error, assert_success
 
-
-def maximize(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/window/maximize".format(**vars(session)))
+from . import maximize
 
 
 def is_fullscreen(session):
     # At the time of writing, WebKit does not conform to the
     # Fullscreen API specification.
     #
     # Remove the prefixed fallback when
     # https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed.
--- a/testing/web-platform/tests/webdriver/tests/maximize_window/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/maximize_window/user_prompts.py
@@ -1,18 +1,15 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 
-
-def maximize(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/window/maximize".format(**vars(session)))
+from . import maximize
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         original_size = session.window.size
 
         create_dialog(dialog_type, text=dialog_type)
--- a/testing/web-platform/tests/webdriver/tests/minimize_window/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/minimize_window/__init__.py
@@ -0,0 +1,7 @@
+def minimize(session):
+    return session.transport.send(
+        "POST", "session/{session_id}/window/minimize".format(**vars(session)))
+
+
+def is_minimized(session):
+    return session.execute_script("return document.hidden")
--- a/testing/web-platform/tests/webdriver/tests/minimize_window/minimize.py
+++ b/testing/web-platform/tests/webdriver/tests/minimize_window/minimize.py
@@ -1,31 +1,24 @@
 from tests.support.asserts import assert_error, assert_success
 
-
-def minimize(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/window/minimize".format(**vars(session)))
+from . import is_minimized, minimize
 
 
 def is_fullscreen(session):
     # At the time of writing, WebKit does not conform to the
     # Fullscreen API specification.
     #
     # Remove the prefixed fallback when
     # https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed.
     return session.execute_script("""
         return !!(window.fullScreen || document.webkitIsFullScreen)
         """)
 
 
-def is_minimized(session):
-    return session.execute_script("return document.hidden")
-
-
 def test_no_browsing_context(session, closed_window):
     response = minimize(session)
     assert_error(response, "no such window")
 
 
 def test_fully_exit_fullscreen(session):
     session.window.fullscreen()
     assert is_fullscreen(session)
--- a/testing/web-platform/tests/webdriver/tests/minimize_window/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/minimize_window/user_prompts.py
@@ -1,22 +1,15 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 
-
-def minimize(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/window/minimize".format(**vars(session)))
-
-
-def is_minimized(session):
-    return session.execute_script("return document.hidden")
+from . import is_minimized, minimize
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         assert not is_minimized(session)
 
         create_dialog(dialog_type, text=dialog_type)
--- a/testing/web-platform/tests/webdriver/tests/navigate_to/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/navigate_to/__init__.py
@@ -0,0 +1,4 @@
+def navigate_to(session, url):
+    return session.transport.send(
+        "POST", "session/{session_id}/url".format(**vars(session)),
+        {"url": url})
--- a/testing/web-platform/tests/webdriver/tests/navigate_to/navigate.py
+++ b/testing/web-platform/tests/webdriver/tests/navigate_to/navigate.py
@@ -1,16 +1,12 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def navigate_to(session, url):
-    return session.transport.send(
-        "POST", "session/{session_id}/url".format(**vars(session)),
-        {"url": url})
+from . import navigate_to
 
 
 def test_null_response_value(session):
     response = navigate_to(session, inline("<div/>"))
     value = assert_success(response)
     assert value is None
 
 
--- a/testing/web-platform/tests/webdriver/tests/page_source/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/page_source/__init__.py
@@ -0,0 +1,3 @@
+def get_page_source(session):
+    return session.transport.send(
+        "GET", "session/{session_id}/source".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/page_source/source.py
+++ b/testing/web-platform/tests/webdriver/tests/page_source/source.py
@@ -1,15 +1,12 @@
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def get_page_source(session):
-    return session.transport.send(
-        "GET", "session/{session_id}/source".format(**vars(session)))
+from . import get_page_source
 
 
 def test_no_browsing_context(session, closed_window):
     response = get_page_source(session)
     assert_error(response, "no such window")
 
 
 def test_source_matches_outer_html(session):
--- a/testing/web-platform/tests/webdriver/tests/refresh/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/refresh/__init__.py
@@ -0,0 +1,3 @@
+def refresh(session):
+    return session.transport.send(
+        "POST", "session/{session_id}/refresh".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/refresh/refresh.py
+++ b/testing/web-platform/tests/webdriver/tests/refresh/refresh.py
@@ -1,19 +1,16 @@
 import pytest
 
 from webdriver.error import NoSuchElementException, StaleElementReferenceException
 
 from tests.support.inline import inline
 from tests.support.asserts import assert_error, assert_success
 
-
-def refresh(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/refresh".format(**vars(session)))
+from . import refresh
 
 
 def test_null_response_value(session):
     session.url = inline("<div>")
 
     response = refresh(session)
     value = assert_success(response)
     assert value is None
--- a/testing/web-platform/tests/webdriver/tests/refresh/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/refresh/user_prompts.py
@@ -2,20 +2,17 @@
 
 import pytest
 
 from webdriver.error import StaleElementReferenceException
 
 from tests.support.inline import inline
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 
-
-def refresh(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/refresh".format(**vars(session)))
+from . import refresh
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         session.url = inline("<div id=foo>")
         element = session.find.css("#foo", all=False)
 
--- a/testing/web-platform/tests/webdriver/tests/send_alert_text/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/send_alert_text/__init__.py
@@ -0,0 +1,4 @@
+def send_alert_text(session, text=None):
+    return session.transport.send(
+        "POST", "session/{session_id}/alert/text".format(**vars(session)),
+        {"text": text})
--- a/testing/web-platform/tests/webdriver/tests/send_alert_text/send.py
+++ b/testing/web-platform/tests/webdriver/tests/send_alert_text/send.py
@@ -1,18 +1,14 @@
 import pytest
 
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
-
-def send_alert_text(session, text=None):
-    return session.transport.send(
-        "POST", "session/{session_id}/alert/text".format(**vars(session)),
-        {"text": text})
+from . import send_alert_text
 
 
 def test_null_response_value(session, url):
     session.url = inline("<script>window.result = window.prompt('Enter Your Name: ', 'Name');</script>")
 
     response = send_alert_text(session, "Federer")
     value = assert_success(response)
     assert value is None
--- a/testing/web-platform/tests/webdriver/tests/set_timeouts/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/set_timeouts/__init__.py
@@ -0,0 +1,4 @@
+def set_timeouts(session, timeouts):
+    return session.transport.send(
+        "POST", "session/{session_id}/timeouts".format(**vars(session)),
+        timeouts)
--- a/testing/web-platform/tests/webdriver/tests/set_timeouts/set.py
+++ b/testing/web-platform/tests/webdriver/tests/set_timeouts/set.py
@@ -1,15 +1,11 @@
 from tests.support.asserts import assert_success
 
-
-def set_timeouts(session, timeouts):
-    return session.transport.send(
-        "POST", "session/{session_id}/timeouts".format(**vars(session)),
-        timeouts)
+from . import set_timeouts
 
 
 def test_null_response_value(session):
     response = set_timeouts(session, {"implicit": 1000})
     value = assert_success(response)
     assert value is None
 
     response = set_timeouts(session, {"pageLoad": 1000})
--- a/testing/web-platform/tests/webdriver/tests/set_window_rect/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/set_window_rect/__init__.py
@@ -0,0 +1,4 @@
+def set_window_rect(session, rect):
+    return session.transport.send(
+        "POST", "session/{session_id}/window/rect".format(**vars(session)),
+        rect)
--- a/testing/web-platform/tests/webdriver/tests/set_window_rect/set.py
+++ b/testing/web-platform/tests/webdriver/tests/set_window_rect/set.py
@@ -1,19 +1,15 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_error, assert_success
 
-
-def set_window_rect(session, rect):
-    return session.transport.send(
-        "POST", "session/{session_id}/window/rect".format(**vars(session)),
-        rect)
+from . import set_window_rect
 
 
 def is_fullscreen(session):
     # At the time of writing, WebKit does not conform to the
     # Fullscreen API specification.
     #
     # Remove the prefixed fallback when
     # https://bugs.webkit.org/show_bug.cgi?id=158125 is fixed.
--- a/testing/web-platform/tests/webdriver/tests/set_window_rect/user_prompts.py
+++ b/testing/web-platform/tests/webdriver/tests/set_window_rect/user_prompts.py
@@ -1,19 +1,15 @@
 # META: timeout=long
 
 import pytest
 
 from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
 
-
-def set_window_rect(session, rect):
-    return session.transport.send(
-        "POST", "session/{session_id}/window/rect".format(**vars(session)),
-        rect)
+from . import set_window_rect
 
 
 @pytest.fixture
 def check_user_prompt_closed_without_exception(session, create_dialog):
     def check_user_prompt_closed_without_exception(dialog_type, retval):
         original_rect = session.window.rect
 
         create_dialog(dialog_type, text=dialog_type)
--- a/testing/web-platform/tests/webdriver/tests/status/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/status/__init__.py
@@ -0,0 +1,2 @@
+def get_status(session):
+    return session.transport.send("GET", "/status")
--- a/testing/web-platform/tests/webdriver/tests/status/status.py
+++ b/testing/web-platform/tests/webdriver/tests/status/status.py
@@ -1,15 +1,13 @@
 import json
 
 from tests.support.asserts import assert_success
 
-
-def get_status(session):
-    return session.transport.send("GET", "/status")
+from . import get_status
 
 
 def test_get_status_no_session(http):
     with http.get("/status") as response:
         # GET /status should never return an error
         assert response.status == 200
 
         parsed_obj = json.loads(response.read().decode("utf-8"))
--- a/testing/web-platform/tests/webdriver/tests/switch_to_frame/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/switch_to_frame/__init__.py
@@ -0,0 +1,6 @@
+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)
--- a/testing/web-platform/tests/webdriver/tests/switch_to_frame/switch.py
+++ b/testing/web-platform/tests/webdriver/tests/switch_to_frame/switch.py
@@ -1,20 +1,14 @@
 import webdriver.protocol as protocol
 
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline, iframe
 
-
-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)
+from . import switch_to_frame
 
 
 def test_null_response_value(session):
     session.url = inline(iframe("<p>foo"))
     frame_element = session.find.css("iframe", all=False)
 
     response = switch_to_frame(session, frame_element)
     value = assert_success(response)
--- a/testing/web-platform/tests/webdriver/tests/switch_to_parent_frame/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/switch_to_parent_frame/__init__.py
@@ -0,0 +1,3 @@
+def switch_to_parent_frame(session):
+    return session.transport.send(
+        "POST", "session/{session_id}/frame/parent".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/switch_to_parent_frame/switch.py
+++ b/testing/web-platform/tests/webdriver/tests/switch_to_parent_frame/switch.py
@@ -1,19 +1,16 @@
 import pytest
 
 from webdriver import StaleElementReferenceException
 
 from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline, iframe
 
-
-def switch_to_parent_frame(session):
-    return session.transport.send(
-        "POST", "session/{session_id}/frame/parent".format(**vars(session)))
+from . import switch_to_parent_frame
 
 
 def test_null_response_value(session):
     session.url = inline(iframe("<p>foo"))
     frame_element = session.find.css("iframe", all=False)
     session.switch_frame(frame_element)
 
     response = switch_to_parent_frame(session)
--- a/testing/web-platform/tests/webdriver/tests/switch_to_window/__init__.py
+++ b/testing/web-platform/tests/webdriver/tests/switch_to_window/__init__.py
@@ -0,0 +1,4 @@
+def switch_to_window(session, handle):
+    return session.transport.send(
+        "POST", "session/{session_id}/window".format(**vars(session)),
+        {"handle": handle})
--- a/testing/web-platform/tests/webdriver/tests/switch_to_window/switch.py
+++ b/testing/web-platform/tests/webdriver/tests/switch_to_window/switch.py
@@ -1,15 +1,11 @@
 from tests.support.asserts import assert_success
 
-
-def switch_to_window(session, handle):
-    return session.transport.send(
-        "POST", "session/{session_id}/window".format(**vars(session)),
-        {"handle": handle})
+from . import switch_to_window
 
 
 def test_null_response_value(session, create_window):
     new_handle = create_window()
 
     response = switch_to_window(session, new_handle)
     value = assert_success(response)
     assert value is None