Bug 1455568 - [wdspec] Separate out user prompts tests into their own module. draft
authorHenrik Skupin <mail@hskupin.info>
Fri, 20 Apr 2018 13:19:32 +0200
changeset 792547 ac089a3e29875bc29ed71d2c7455f93558f7b694
parent 792546 91ef9aae32eb1e07de7c9dd7d8f51de0080e5ccc
push id109134
push userbmo:hskupin@gmail.com
push dateTue, 08 May 2018 15:13:37 +0000
bugs1455568
milestone61.0a1
Bug 1455568 - [wdspec] Separate out user prompts tests into their own module. User prompt tests request new sessions and as such force the browser to restart way more often. Extra delays due shutdown and startup times of the browser are expected, and to better handle timeouts and failures these tests should be located in their own module. Therefore this patch moves all existing tests which validate the correct user prompt handling to a user_prompts.py file located in the same sub folder of the corresponding command. MozReview-Commit-ID: 2Nd8IRByzQd
testing/web-platform/meta/MANIFEST.json
testing/web-platform/meta/webdriver/tests/delete_cookie/delete.py.ini
testing/web-platform/meta/webdriver/tests/delete_cookie/user_prompts.py.ini
testing/web-platform/meta/webdriver/tests/fullscreen_window/fullscreen.py.ini
testing/web-platform/meta/webdriver/tests/fullscreen_window/user_prompts.py.ini
testing/web-platform/meta/webdriver/tests/get_active_element/get.py.ini
testing/web-platform/meta/webdriver/tests/get_active_element/user_prompts.py.ini
testing/web-platform/meta/webdriver/tests/get_current_url/user_prompts.py.ini
testing/web-platform/meta/webdriver/tests/get_element_attribute/get.py.ini
testing/web-platform/meta/webdriver/tests/get_element_attribute/user_prompts.py.ini
testing/web-platform/meta/webdriver/tests/get_element_property/get.py.ini
testing/web-platform/meta/webdriver/tests/get_element_property/user_prompts.py.ini
testing/web-platform/meta/webdriver/tests/get_element_tag_name/get.py.ini
testing/web-platform/meta/webdriver/tests/get_element_tag_name/user_prompts.py.ini
testing/web-platform/meta/webdriver/tests/get_title/get.py.ini
testing/web-platform/meta/webdriver/tests/get_title/user_prompts.py.ini
testing/web-platform/meta/webdriver/tests/get_window_rect/get.py.ini
testing/web-platform/meta/webdriver/tests/get_window_rect/user_prompts.py.ini
testing/web-platform/meta/webdriver/tests/is_element_selected/selected.py.ini
testing/web-platform/meta/webdriver/tests/is_element_selected/user_prompts.py.ini
testing/web-platform/meta/webdriver/tests/maximize_window/maximize.py.ini
testing/web-platform/meta/webdriver/tests/maximize_window/user_prompts.py.ini
testing/web-platform/meta/webdriver/tests/minimize_window/minimize.py.ini
testing/web-platform/meta/webdriver/tests/minimize_window/user_prompts.py.ini
testing/web-platform/meta/webdriver/tests/set_window_rect/set.py.ini
testing/web-platform/meta/webdriver/tests/set_window_rect/user_prompts.py.ini
testing/web-platform/tests/webdriver/tests/close_window/user_prompts.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/execute_script/json_serialize_windowproxy.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/get.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/get.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/get.py
testing/web-platform/tests/webdriver/tests/get_element_tag_name/user_prompts.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/get.py
testing/web-platform/tests/webdriver/tests/get_window_rect/user_prompts.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/maximize.py
testing/web-platform/tests/webdriver/tests/maximize_window/user_prompts.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/set_window_rect/set.py
testing/web-platform/tests/webdriver/tests/set_window_rect/user_prompts.py
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -396844,16 +396844,22 @@
     ]
    ],
    "webdriver/tests/delete_cookie/delete.py": [
     [
      "/webdriver/tests/delete_cookie/delete.py",
      {}
     ]
    ],
+   "webdriver/tests/delete_cookie/user_prompts.py": [
+    [
+     "/webdriver/tests/delete_cookie/user_prompts.py",
+     {}
+    ]
+   ],
    "webdriver/tests/dismiss_alert/dismiss.py": [
     [
      "/webdriver/tests/dismiss_alert/dismiss.py",
      {}
     ]
    ],
    "webdriver/tests/element_clear/clear.py": [
     [
@@ -396965,19 +396971,23 @@
     [
      "/webdriver/tests/find_elements_from_element/find.py",
      {}
     ]
    ],
    "webdriver/tests/fullscreen_window/fullscreen.py": [
     [
      "/webdriver/tests/fullscreen_window/fullscreen.py",
-     {
-      "timeout": "long"
-     }
+     {}
+    ]
+   ],
+   "webdriver/tests/fullscreen_window/user_prompts.py": [
+    [
+     "/webdriver/tests/fullscreen_window/user_prompts.py",
+     {}
     ]
    ],
    "webdriver/tests/get_active_element/get.py": [
     [
      "/webdriver/tests/get_active_element/get.py",
      {}
     ]
    ],
@@ -396988,38 +396998,50 @@
     ]
    ],
    "webdriver/tests/get_current_url/get.py": [
     [
      "/webdriver/tests/get_current_url/get.py",
      {}
     ]
    ],
+   "webdriver/tests/get_current_url/user_prompts.py": [
+    [
+     "/webdriver/tests/get_current_url/user_prompts.py",
+     {}
+    ]
+   ],
    "webdriver/tests/get_element_attribute/get.py": [
     [
      "/webdriver/tests/get_element_attribute/get.py",
-     {
-      "timeout": "long"
-     }
+     {}
     ]
    ],
    "webdriver/tests/get_element_property/get.py": [
     [
      "/webdriver/tests/get_element_property/get.py",
-     {
-      "timeout": "long"
-     }
+     {}
+    ]
+   ],
+   "webdriver/tests/get_element_property/user_prompts.py": [
+    [
+     "/webdriver/tests/get_element_property/user_prompts.py",
+     {}
     ]
    ],
    "webdriver/tests/get_element_tag_name/get.py": [
     [
      "/webdriver/tests/get_element_tag_name/get.py",
-     {
-      "timeout": "long"
-     }
+     {}
+    ]
+   ],
+   "webdriver/tests/get_element_tag_name/user_prompts.py": [
+    [
+     "/webdriver/tests/get_element_tag_name/user_prompts.py",
+     {}
     ]
    ],
    "webdriver/tests/get_element_text/get.py": [
     [
      "/webdriver/tests/get_element_text/get.py",
      {}
     ]
    ],
@@ -397036,44 +397058,70 @@
     ]
    ],
    "webdriver/tests/get_title/get.py": [
     [
      "/webdriver/tests/get_title/get.py",
      {}
     ]
    ],
+   "webdriver/tests/get_title/user_prompts.py": [
+    [
+     "/webdriver/tests/get_title/user_prompts.py",
+     {}
+    ]
+   ],
    "webdriver/tests/get_window_rect/get.py": [
     [
      "/webdriver/tests/get_window_rect/get.py",
      {}
     ]
    ],
+   "webdriver/tests/get_window_rect/user_prompts.py": [
+    [
+     "/webdriver/tests/get_window_rect/user_prompts.py",
+     {}
+    ]
+   ],
    "webdriver/tests/is_element_selected/selected.py": [
     [
      "/webdriver/tests/is_element_selected/selected.py",
-     {
-      "timeout": "long"
-     }
+     {}
+    ]
+   ],
+   "webdriver/tests/is_element_selected/user_prompts.py": [
+    [
+     "/webdriver/tests/is_element_selected/user_prompts.py",
+     {}
     ]
    ],
    "webdriver/tests/maximize_window/maximize.py": [
     [
      "/webdriver/tests/maximize_window/maximize.py",
-     {
-      "timeout": "long"
-     }
+     {}
+    ]
+   ],
+   "webdriver/tests/maximize_window/user_prompts.py": [
+    [
+     "/webdriver/tests/maximize_window/user_prompts.py",
+     {}
     ]
    ],
    "webdriver/tests/minimize_window/minimize.py": [
     [
      "/webdriver/tests/minimize_window/minimize.py",
      {}
     ]
    ],
+   "webdriver/tests/minimize_window/user_prompts.py": [
+    [
+     "/webdriver/tests/minimize_window/user_prompts.py",
+     {}
+    ]
+   ],
    "webdriver/tests/new_session/create_alwaysMatch.py": [
     [
      "/webdriver/tests/new_session/create_alwaysMatch.py",
      {
       "timeout": "long"
      }
     ]
    ],
@@ -397138,16 +397186,22 @@
    "webdriver/tests/set_window_rect/set.py": [
     [
      "/webdriver/tests/set_window_rect/set.py",
      {
       "timeout": "long"
      }
     ]
    ],
+   "webdriver/tests/set_window_rect/user_prompts.py": [
+    [
+     "/webdriver/tests/set_window_rect/user_prompts.py",
+     {}
+    ]
+   ],
    "webdriver/tests/status/status.py": [
     [
      "/webdriver/tests/status/status.py",
      {}
     ]
    ],
    "webdriver/tests/switch_to_parent_frame/switch.py": [
     [
@@ -610886,17 +610940,17 @@
    "b2ebe4b632b1a75e7334b97c3df7075f494dd5c6",
    "support"
   ],
   "webdriver/tests/accept_alert/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/accept_alert/accept.py": [
-   "9cd5e82f18455062ec07a5c8a0bef31cfe4ea86f",
+   "840f2ba655688ac1ff7581557f7560f641b61fe8",
    "wdspec"
   ],
   "webdriver/tests/actions/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/actions/conftest.py": [
    "f366a25d9d5e35a2897413a265398bc7a54f7c44",
@@ -610966,269 +611020,309 @@
    "29891e121def1917c47c70efd19b40ed5f2ea61d",
    "wdspec"
   ],
   "webdriver/tests/close_window/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/close_window/close.py": [
-   "4138394adbccb06712b22a2f982e8638aa03629a",
+   "a98fdaa5d8afe6ddca892e8857c134ba24b0e43a",
    "wdspec"
   ],
   "webdriver/tests/close_window/user_prompts.py": [
-   "fc8d7f3da2bdba9bb59820a9f6ae3fb46d8153bf",
+   "59647d3670644c730485cd918f764b9db016e6b7",
    "wdspec"
   ],
   "webdriver/tests/conftest.py": [
    "c812269d034c9ca1b8c4f136dd5d0cea52f4d0f0",
    "support"
   ],
   "webdriver/tests/delete_cookie/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/delete_cookie/delete.py": [
-   "ce1212fea0ccb629298132fe272948307b108705",
+   "1f0d6b861be1ed682fd87a402908cee186a3987c",
+   "wdspec"
+  ],
+  "webdriver/tests/delete_cookie/user_prompts.py": [
+   "65b753bd80a06c3c20b0330f624a4d395fdb7ab2",
    "wdspec"
   ],
   "webdriver/tests/dismiss_alert/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/dismiss_alert/dismiss.py": [
-   "f200db4350a738fc14c9aed853fd3011141e8f3a",
+   "e213f1939ff5cc2fbdebb2bd8e9445e284803a60",
    "wdspec"
   ],
   "webdriver/tests/element_clear/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/element_clear/clear.py": [
-   "476fad0b4a5a38a9ac15ddeb1c26b0b18fd66e8c",
+   "d5a0a37d410f5a748aee5ac5be75acb837e491f8",
    "wdspec"
   ],
   "webdriver/tests/element_click/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/element_click/bubbling.py": [
-   "67d9b7aeb95132759d28696cdcc60a279ccb702a",
+   "46fb2d0359f5f90eec4cc1f06d2591b5fd2fdf78",
    "wdspec"
   ],
   "webdriver/tests/element_click/select.py": [
    "bddc341a0feb0d06e75415b8f98b8e9e0c2a829d",
    "wdspec"
   ],
   "webdriver/tests/element_click/stale.py": [
-   "37af63203540dfe11d36fe05d74694f05c6505f2",
+   "b9f503108f99d4a87784590b69bb2ad6a23c4ac8",
    "wdspec"
   ],
   "webdriver/tests/element_send_keys/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/element_send_keys/content_editable.py": [
    "9c071e60e1203cf31120f20874b5f38ba41dacc3",
    "wdspec"
   ],
   "webdriver/tests/element_send_keys/form_controls.py": [
-   "d169ab4ec07abb0ad3b7b2759f8156d0ab69c6db",
+   "ec6bdf64c7c4d2e3963e89c8410f69f738565f78",
    "wdspec"
   ],
   "webdriver/tests/element_send_keys/interactability.py": [
-   "197bf11c6cae354d9f3cc07f836a857345046e1c",
+   "485bd25ba5e1d8c8a646675d0738f278291c7c70",
    "wdspec"
   ],
   "webdriver/tests/element_send_keys/scroll_into_view.py": [
-   "fb192d5d1d93aa729b07cadcadfa630587bd0b39",
+   "b58404e8bb2c8b0cc75300ed1880cfeeb052a364",
    "wdspec"
   ],
   "webdriver/tests/execute_async_script/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/execute_async_script/collections.py": [
-   "b10e02dff5437ae2b6ed6cc17141e5643dc1b75d",
+   "d6c95dfdcbfc3b9cf91cf6f943a17b7cd0fee79d",
    "wdspec"
   ],
   "webdriver/tests/execute_async_script/user_prompts.py": [
-   "cf789bc7a329b78b7d61b894209d064d3d80b3b0",
+   "8b161d459074d7e2a3e726663cedfb1cd8636f0b",
    "wdspec"
   ],
   "webdriver/tests/execute_script/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/execute_script/collections.py": [
-   "7162405055534f77fd7e57419b3cc2a210ddd4e0",
+   "0ee4e340b38b6aa59043286755822460e76b2dbd",
    "wdspec"
   ],
   "webdriver/tests/execute_script/cyclic.py": [
-   "9d8a28b94b8cdac88650b675cb00bf21261444e8",
+   "21bae43b3a6e966b8698b7c439b29a68029adc58",
    "wdspec"
   ],
   "webdriver/tests/execute_script/json_serialize_windowproxy.py": [
-   "d29c82c48b3bd1e2b07c40798a774eb77d6178a5",
+   "00e735d58b77e9fac207c5ea29e0e70ff43ffd14",
    "wdspec"
   ],
   "webdriver/tests/execute_script/user_prompts.py": [
-   "1cb98dd72664cfcfede1255484239f4505c06d20",
+   "0e94c156954b90eca2005f6ad9fa5a4601169fd9",
    "wdspec"
   ],
   "webdriver/tests/find_element/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/find_element/find.py": [
-   "8c9ed3ac2169f4b65a2e172a6e77b9586d83afa2",
+   "9af0db4de0d09cbf68fa43bb40145cffc7b95635",
    "wdspec"
   ],
   "webdriver/tests/find_element_from_element/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/find_element_from_element/find.py": [
-   "4ac7c4f27f19fe0b6a42fe888b478b78d9c4ca7e",
+   "7720ad2042fbb77c032223b224a8593b2a11506a",
    "wdspec"
   ],
   "webdriver/tests/find_elements/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/find_elements/find.py": [
-   "fa8c2de1ffd12432bf14368b9c72000567ab8d20",
+   "27757f16906f636f42b82c21f4631eb83056cca8",
    "wdspec"
   ],
   "webdriver/tests/find_elements_from_element/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/find_elements_from_element/find.py": [
-   "0afca7c9c332ac6bc4da4dd9607ae36b42914a14",
+   "2daef29773c98649b04e3d6e97380ba569ec045d",
    "wdspec"
   ],
   "webdriver/tests/fullscreen_window/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/fullscreen_window/fullscreen.py": [
-   "c244064c0595d9274ddef98c527d193355ba13fa",
+   "8a6e06b2fbd2ec80326ab1145e6ddfb35c6995b4",
+   "wdspec"
+  ],
+  "webdriver/tests/fullscreen_window/user_prompts.py": [
+   "8d6d68bb6bfa9956db5b33598ae3cf33f7022de4",
    "wdspec"
   ],
   "webdriver/tests/get_active_element/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/get_active_element/get.py": [
-   "7d40a7641dbf04cd78f1dba630afa2e8d80dad13",
+   "6d48b8577c9edf5f1e39fae461831de742ff9dd8",
    "wdspec"
   ],
   "webdriver/tests/get_alert_text/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/get_alert_text/get.py": [
-   "5547f710db1787eb44454988d32a4b52c758e9c2",
+   "f3bf7edd86c94e82c4d09973d4a4c7b35c3fa681",
    "wdspec"
   ],
   "webdriver/tests/get_current_url/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/get_current_url/get.py": [
-   "828e40301838c99aa2978733bbce3db3acc185a0",
+   "f65054e80f7ddc9a7b8600765929935355b5f447",
+   "wdspec"
+  ],
+  "webdriver/tests/get_current_url/user_prompts.py": [
+   "3241e1d4dbda430b32763006d558fb53d06ffaa1",
    "wdspec"
   ],
   "webdriver/tests/get_element_attribute/get.py": [
-   "1fcd451313d40a0b0a84ced63596d032ffc97f2a",
+   "3fdd451b8aa73729f25325cb0e43ae389a223ee7",
    "wdspec"
   ],
   "webdriver/tests/get_element_property/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/get_element_property/get.py": [
-   "5e5d8e471d69dd8116e37de07abc07af09216f66",
+   "2b36e390348a37e2138f480a7f36eb08ef6a2ee5",
+   "wdspec"
+  ],
+  "webdriver/tests/get_element_property/user_prompts.py": [
+   "84a1817bd815bd8c2267862eb3d5f927f2849777",
    "wdspec"
   ],
   "webdriver/tests/get_element_tag_name/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/get_element_tag_name/get.py": [
-   "ce749e286bd030083fcac15dd75c49caf032f990",
+   "66a0b57c29a006b1200e63239a4ea5f8cb90c1bd",
+   "wdspec"
+  ],
+  "webdriver/tests/get_element_tag_name/user_prompts.py": [
+   "49104f85f3e5598ba04e32596e2d96224eb08a05",
    "wdspec"
   ],
   "webdriver/tests/get_element_text/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/get_element_text/get.py": [
-   "570274d59020c4d8d0b8ecd604660ee7d710a165",
+   "8edcb5068617b13c808ddc336196a7e0e98a8072",
    "wdspec"
   ],
   "webdriver/tests/get_named_cookie/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/get_named_cookie/get.py": [
    "a3116e826f4db0221224ccb9a0e0d71ecb1f9a85",
    "wdspec"
   ],
   "webdriver/tests/get_timeouts/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/get_timeouts/get.py": [
-   "eaee354d16aa8c3a0fc960198fa4c5d9365bdee5",
+   "b1d170df31bf2b715a9da639cc3c833dde0a43d6",
    "wdspec"
   ],
   "webdriver/tests/get_title/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/get_title/get.py": [
-   "23adf150ec59de0748c12ad1025b0be251619bff",
+   "69a3e55d2f34dc02285af89d78a75d46e7d1282c",
+   "wdspec"
+  ],
+  "webdriver/tests/get_title/user_prompts.py": [
+   "fd24d562bd7d945de1e5f87c241f4c3717359838",
    "wdspec"
   ],
   "webdriver/tests/get_window_rect/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/get_window_rect/get.py": [
-   "c9139c16aa950c734c776887d6a762b867790812",
+   "8d687026889e601f4c1987996f4e5306b0f627f9",
+   "wdspec"
+  ],
+  "webdriver/tests/get_window_rect/user_prompts.py": [
+   "5fd2bc48547788bd24b3b5fc38a18209d85a6747",
    "wdspec"
   ],
   "webdriver/tests/interface.html": [
    "f7b2c45ff8b1b5790dd390fbe2ab997766f5d9a8",
    "testharness"
   ],
   "webdriver/tests/is_element_selected/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/is_element_selected/selected.py": [
-   "f52c565da22038a41db7344cbcfa2a6a101cc61d",
+   "afed5bfc86527410e0fb521f7f75d79bee1fb060",
+   "wdspec"
+  ],
+  "webdriver/tests/is_element_selected/user_prompts.py": [
+   "69d7821499ee460f31ed97f3f839cf6899add8fd",
    "wdspec"
   ],
   "webdriver/tests/maximize_window/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/maximize_window/maximize.py": [
-   "e0dfeb6234371077baa7f67a45d7ffa9b61c9759",
+   "be54b714b8d6c8f282ee896af4a449ccba4cd060",
+   "wdspec"
+  ],
+  "webdriver/tests/maximize_window/user_prompts.py": [
+   "99afcf2148c524eabee410c5ebb89327467a5e35",
    "wdspec"
   ],
   "webdriver/tests/minimize_window/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/minimize_window/minimize.py": [
-   "08d4414ce915f1ebe7825d5d99e204dc331fe155",
+   "8b59610ffcbb4ab41a74f149dc74d415edfaf60f",
+   "wdspec"
+  ],
+  "webdriver/tests/minimize_window/user_prompts.py": [
+   "668c775a0e60b377a5a558a2a38b8887ac2683a0",
    "wdspec"
   ],
   "webdriver/tests/new_session/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/new_session/conftest.py": [
    "d2df38e506cb9a3e501f03fe03e2a31af42d6f04",
@@ -611266,45 +611360,49 @@
    "4bfb99fd4ba44ab5b4e70e9246cbb200c098ae89",
    "support"
   ],
   "webdriver/tests/page_source/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/page_source/source.py": [
-   "5dddfce0a5e43f02b8a050afda8c9a07c43cf797",
+   "f5e96dee33de36e3626c3e9bbfdd0014b27c305c",
    "wdspec"
   ],
   "webdriver/tests/send_alert_text/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/send_alert_text/send.py": [
-   "e6878e7923b1cdddff2450057020de0bf2e6aa7c",
+   "743b0285cb404d5a2aafde268f9ba7e574760bd1",
    "wdspec"
   ],
   "webdriver/tests/set_window_rect/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/set_window_rect/resizing_and_positioning.py": [
    "479379109115668183643e8a050396219332887d",
    "wdspec"
   ],
   "webdriver/tests/set_window_rect/set.py": [
-   "079038aa66cb729cf205aac040a5fe075d01fd8a",
+   "f6202880dbdd4a407fa2944a68765757dbcb932b",
+   "wdspec"
+  ],
+  "webdriver/tests/set_window_rect/user_prompts.py": [
+   "4ed66d05835d3ab229cb90928e0ca2a15ba08c8a",
    "wdspec"
   ],
   "webdriver/tests/status/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/status/status.py": [
-   "75edf0e629d9cd494c63585408c76217ff953722",
+   "1302349ca7d6a3dcc49e26ca0345023a5c6bbe14",
    "wdspec"
   ],
   "webdriver/tests/support/__init__.py": [
    "5a31a3917a5157516c10951a3b3d5ffb43b992d9",
    "support"
   ],
   "webdriver/tests/support/asserts.py": [
    "1b839404daaca1d059cba98377edb91691ef7e82",
@@ -611330,17 +611428,17 @@
    "511d4ba0ff21325b7503440b4111fac325139edc",
    "support"
   ],
   "webdriver/tests/switch_to_parent_frame/__init__.py": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "support"
   ],
   "webdriver/tests/switch_to_parent_frame/switch.py": [
-   "487a0588e9c017640017b775c06c21f919d16fa9",
+   "c184952fc8a78f5edc7d573a9f8440b5eec334cc",
    "wdspec"
   ],
   "webgl/bufferSubData.html": [
    "526612470551a0eb157b310c587d50080087808d",
    "testharness"
   ],
   "webgl/common.js": [
    "a671260c24103c4b3d41d57251e691caa286ace4",
--- a/testing/web-platform/meta/webdriver/tests/delete_cookie/delete.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/delete_cookie/delete.py.ini
@@ -1,4 +0,0 @@
-[delete.py]
-  [test_handle_prompt_accept]
-    expected: FAIL
-
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/webdriver/tests/delete_cookie/user_prompts.py.ini
@@ -0,0 +1,3 @@
+[user_prompts.py]
+  [test_handle_prompt_accept]
+    expected: FAIL
rename from testing/web-platform/meta/webdriver/tests/fullscreen_window/fullscreen.py.ini
rename to testing/web-platform/meta/webdriver/tests/fullscreen_window/user_prompts.py.ini
--- a/testing/web-platform/meta/webdriver/tests/fullscreen_window/fullscreen.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/fullscreen_window/user_prompts.py.ini
@@ -1,4 +1,4 @@
-[fullscreen.py]
+[user_prompts.py]
   [test_handle_prompt_accept]
     expected: FAIL
 
rename from testing/web-platform/meta/webdriver/tests/get_active_element/get.py.ini
rename to testing/web-platform/meta/webdriver/tests/get_active_element/user_prompts.py.ini
--- a/testing/web-platform/meta/webdriver/tests/get_active_element/get.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/get_active_element/user_prompts.py.ini
@@ -1,9 +1,9 @@
-[get.py]
+[user_prompts.py]
   disabled:
     if webrender: bug 1425588
   [test_handle_prompt_dismiss]
     expected: FAIL
 
   [test_handle_prompt_accept]
     expected: FAIL
 
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/webdriver/tests/get_current_url/user_prompts.py.ini
@@ -0,0 +1,3 @@
+[user_prompts.py]
+  [test_handle_prompt_accept]
+    expected: FAIL
rename from testing/web-platform/meta/webdriver/tests/get_element_attribute/get.py.ini
rename to testing/web-platform/meta/webdriver/tests/get_element_attribute/user_prompts.py.ini
--- a/testing/web-platform/meta/webdriver/tests/get_element_attribute/get.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/get_element_attribute/user_prompts.py.ini
@@ -1,7 +1,7 @@
-[get.py]
+[user_prompts.py]
   [test_handle_prompt_dismiss]
     expected: FAIL
 
   [test_handle_prompt_accept]
     expected: FAIL
 
rename from testing/web-platform/meta/webdriver/tests/get_element_property/get.py.ini
rename to testing/web-platform/meta/webdriver/tests/get_element_property/user_prompts.py.ini
--- a/testing/web-platform/meta/webdriver/tests/get_element_property/get.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/get_element_property/user_prompts.py.ini
@@ -1,7 +1,7 @@
-[get.py]
+[user_prompts.py]
   [test_handle_prompt_dismiss]
     expected: FAIL
 
   [test_handle_prompt_accept]
     expected: FAIL
 
rename from testing/web-platform/meta/webdriver/tests/get_element_tag_name/get.py.ini
rename to testing/web-platform/meta/webdriver/tests/get_element_tag_name/user_prompts.py.ini
--- a/testing/web-platform/meta/webdriver/tests/get_element_tag_name/get.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/get_element_tag_name/user_prompts.py.ini
@@ -1,7 +1,7 @@
-[get.py]
+[user_prompts.py]
   [test_handle_prompt_dismiss]
     expected: FAIL
 
   [test_handle_prompt_accept]
     expected: FAIL
 
rename from testing/web-platform/meta/webdriver/tests/get_title/get.py.ini
rename to testing/web-platform/meta/webdriver/tests/get_title/user_prompts.py.ini
--- a/testing/web-platform/meta/webdriver/tests/get_title/get.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/get_title/user_prompts.py.ini
@@ -1,8 +1,8 @@
-[get.py]
+[user_prompts.py]
   disabled:
     if webrender: bug 1425588
   [test_title_handle_prompt_dismiss]
     expected: FAIL
 
   [test_title_handle_prompt_accept]
     expected: FAIL
rename from testing/web-platform/meta/webdriver/tests/get_window_rect/get.py.ini
rename to testing/web-platform/meta/webdriver/tests/get_window_rect/user_prompts.py.ini
--- a/testing/web-platform/meta/webdriver/tests/get_window_rect/get.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/get_window_rect/user_prompts.py.ini
@@ -1,6 +1,6 @@
-[get.py]
+[user_prompts.py]
   disabled:
     if not debug and stylo and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): wpt-sync Bug 1446953
   [test_handle_prompt_accept]
     expected: FAIL
 
rename from testing/web-platform/meta/webdriver/tests/is_element_selected/selected.py.ini
rename to testing/web-platform/meta/webdriver/tests/is_element_selected/user_prompts.py.ini
--- a/testing/web-platform/meta/webdriver/tests/is_element_selected/selected.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/is_element_selected/user_prompts.py.ini
@@ -1,7 +1,7 @@
-[selected.py]
+[user_prompts.py]
   [test_handle_prompt_dismiss]
     expected: FAIL
 
   [test_handle_prompt_accept]
     expected: FAIL
 
rename from testing/web-platform/meta/webdriver/tests/maximize_window/maximize.py.ini
rename to testing/web-platform/meta/webdriver/tests/maximize_window/user_prompts.py.ini
--- a/testing/web-platform/meta/webdriver/tests/maximize_window/maximize.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/maximize_window/user_prompts.py.ini
@@ -1,3 +1,3 @@
-[maximize.py]
+[user_prompts.py]
   disabled:
     if os == "linux": https://bugzilla.mozilla.org/show_bug.cgi?id=1399633
rename from testing/web-platform/meta/webdriver/tests/minimize_window/minimize.py.ini
rename to testing/web-platform/meta/webdriver/tests/minimize_window/user_prompts.py.ini
--- a/testing/web-platform/meta/webdriver/tests/minimize_window/minimize.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/minimize_window/user_prompts.py.ini
@@ -1,6 +1,6 @@
-[minimize.py]
+[user_prompts.py]
   disabled:
     if not debug and stylo and not webrender and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86") and (bits == 32): wpt-sync Bug 1449780
   [test_handle_prompt_accept]
     expected: FAIL
 
--- a/testing/web-platform/meta/webdriver/tests/set_window_rect/set.py.ini
+++ b/testing/web-platform/meta/webdriver/tests/set_window_rect/set.py.ini
@@ -1,8 +1,5 @@
 [set.py]
-  [test_handle_prompt_accept]
-    expected: FAIL
-
   [test_restore_from_maximized]
     disabled:
       if debug and stylo and e10s and (os == "linux") and (version == "Ubuntu 16.04") and (processor == "x86_64") and (bits == 64): wpt-sync Bug 1444624
 
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/meta/webdriver/tests/set_window_rect/user_prompts.py.ini
@@ -0,0 +1,3 @@
+[user_prompts.py]
+  [test_handle_prompt_accept]
+    expected: FAIL
--- 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,10 +1,8 @@
-# META: timeout=long
-
 from tests.support.asserts import assert_error, assert_dialog_handled
 from tests.support.fixtures import create_dialog, create_window
 from tests.support.inline import inline
 
 
 def close(session):
     return session.transport.send(
         "DELETE", "session/{session_id}/window".format(**vars(session)))
--- a/testing/web-platform/tests/webdriver/tests/delete_cookie/delete.py
+++ b/testing/web-platform/tests/webdriver/tests/delete_cookie/delete.py
@@ -1,11 +1,9 @@
-from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
-from tests.support.fixtures import create_dialog
-from tests.support.inline import inline
+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))
 
@@ -13,64 +11,11 @@ def delete_cookie(session, name):
 def test_no_browsing_context(session, create_window):
     session.window_handle = create_window()
     session.close()
 
     response = delete_cookie(session, "foo")
     assert_error(response, "no such window")
 
 
-def test_handle_prompt_dismiss_and_notify():
-    """TODO"""
-
-
-def test_handle_prompt_accept_and_notify():
-    """TODO"""
-
-
-def test_handle_prompt_ignore():
-    """TODO"""
-
-
-def test_handle_prompt_accept(new_session, add_browser_capabilites):
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
-    session.url = inline("<title>WD doc title</title>")
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-    response = delete_cookie(session, "foo")
-    assert_success(response)
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-    response = delete_cookie(session, "foo")
-    assert_success(response)
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-    response = delete_cookie(session, "foo")
-    assert_success(response)
-    assert_dialog_handled(session, "dismiss #3")
-
-
-def test_handle_prompt_missing_value(session, create_dialog):
-    session.url = inline("<title>WD doc title</title>")
-    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
-
-    response = delete_cookie(session, "foo")
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
-
-    response = delete_cookie(session, "foo")
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
-
-    response = delete_cookie(session, "foo")
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #3")
-
-
 def test_unknown_cookie(session):
     response = delete_cookie(session, "stilton")
     assert_success(response)
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/delete_cookie/user_prompts.py
@@ -0,0 +1,101 @@
+from tests.support.asserts import assert_error, assert_dialog_handled
+from tests.support.fixtures import create_dialog
+from tests.support.inline import inline
+
+
+def delete_cookie(session, name):
+    return session.transport.send("DELETE", "/session/%s/cookie/%s" % (session.session_id, name))
+
+
+def test_handle_prompt_dismiss_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_accept_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_ignore():
+    """TODO"""
+
+
+def test_handle_prompt_accept(new_session, add_browser_capabilites):
+    """
+    2. Handle any user prompts and return its value if it is an error.
+
+    [...]
+
+    In order to handle any user prompts a remote end must take the
+    following steps:
+
+      [...]
+
+      2. Perform the following substeps based on the current session's
+      user prompt handler:
+
+        [...]
+
+        - accept state
+           Accept the current user prompt.
+
+    """
+    _, session = new_session({"capabilities": {
+        "alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
+    session.url = inline("<title>WD doc title</title>")
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+    response = delete_cookie(session, "foo")
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+    response = delete_cookie(session, "foo")
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+    response = delete_cookie(session, "foo")
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_missing_value(session, create_dialog):
+    """
+    2. Handle any user prompts and return its value if it is an error.
+
+    [...]
+
+    In order to handle any user prompts a remote end must take the
+    following steps:
+
+      [...]
+
+      2. Perform the following substeps based on the current session's
+      user prompt handler:
+
+        [...]
+
+        - missing value default state
+           1. Dismiss the current user prompt.
+           2. Return error with error code unexpected alert open.
+
+    """
+    session.url = inline("<title>WD doc title</title>")
+    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
+
+    response = delete_cookie(session, "foo")
+
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
+
+    response = delete_cookie(session, "foo")
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
+
+    response = delete_cookie(session, "foo")
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")
--- 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,10 +1,8 @@
-# META: timeout=long
-
 import json
 
 from tests.support.asserts import assert_success
 
 
 _window_id = "window-fcc6-11e5-b4f8-330a88ab9d7f"
 _frame_id = "frame-075b-4da1-b6ba-e579c2d3230a"
 
--- a/testing/web-platform/tests/webdriver/tests/fullscreen_window/fullscreen.py
+++ b/testing/web-platform/tests/webdriver/tests/fullscreen_window/fullscreen.py
@@ -1,20 +1,9 @@
-# META: timeout=long
-
-from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
-from tests.support.fixtures import create_dialog
-from tests.support.inline import inline
-
-
-alert_doc = inline("<script>window.alert()</script>")
-
-
-def read_global(session, name):
-    return session.execute_script("return %s;" % name)
+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):
@@ -33,120 +22,16 @@ def test_no_browsing_context(session, cr
 
     """
     session.window_handle = create_window()
     session.close()
     response = fullscreen(session)
     assert_error(response, "no such window")
 
 
-def test_handle_prompt_dismiss_and_notify():
-    """TODO"""
-
-
-def test_handle_prompt_accept_and_notify():
-    """TODO"""
-
-
-def test_handle_prompt_ignore():
-    """TODO"""
-
-
-def test_handle_prompt_accept(new_session, add_browser_capabilites):
-    """
-    2. Handle any user prompts and return its value if it is an error.
-
-    [...]
-
-    In order to handle any user prompts a remote end must take the
-    following steps:
-
-      [...]
-
-      2. Perform the following substeps based on the current session's
-      user prompt handler:
-
-        [...]
-
-        - accept state
-           Accept the current user prompt.
-
-    """
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
-    session.url = inline("<title>WD doc title</title>")
-    create_dialog(session)("alert", text="accept #1", result_var="accept1")
-
-    response = fullscreen(session)
-
-    assert_dialog_handled(session, "accept #1")
-    assert read_global(session, "accept1") == None
-
-    expected_title = read_global(session, "document.title")
-    create_dialog(session)("confirm", text="accept #2", result_var="accept2")
-
-    response = fullscreen(session)
-
-    assert_dialog_handled(session, "accept #2")
-    assert read_global(session, "accept2"), True
-
-    create_dialog(session)("prompt", text="accept #3", result_var="accept3")
-
-    response = fullscreen(session)
-
-    assert_dialog_handled(session, "accept #3")
-    assert read_global(session, "accept3") == "" or read_global(session, "accept3") == "undefined"
-
-
-def test_handle_prompt_missing_value(session, create_dialog):
-    """
-    2. Handle any user prompts and return its value if it is an error.
-
-    [...]
-
-    In order to handle any user prompts a remote end must take the
-    following steps:
-
-      [...]
-
-      2. Perform the following substeps based on the current session's
-      user prompt handler:
-
-        [...]
-
-        - missing value default state
-           1. Dismiss the current user prompt.
-           2. Return error with error code unexpected alert open.
-
-    """
-    session.url = inline("<title>WD doc title</title>")
-    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
-
-    response = fullscreen(session)
-
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #1")
-    assert read_global(session, "dismiss1") == None
-
-    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
-
-    response = fullscreen(session)
-
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #2")
-    assert read_global(session, "dismiss2") == False
-
-    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
-
-    response = fullscreen(session)
-
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #3")
-    assert read_global(session, "dismiss3") == None
-
-
 def test_fullscreen(session):
     """
     4. Call fullscreen an element with the current top-level browsing
     context's active document's document element.
 
     """
     response = fullscreen(session)
     assert_success(response)
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/fullscreen_window/user_prompts.py
@@ -0,0 +1,116 @@
+from tests.support.asserts import assert_error, assert_dialog_handled
+from tests.support.fixtures import create_dialog
+from tests.support.inline import inline
+
+
+def read_global(session, name):
+    return session.execute_script("return %s;" % name)
+
+
+def fullscreen(session):
+    return session.transport.send("POST", "session/%s/window/fullscreen" % session.session_id)
+
+
+def test_handle_prompt_dismiss_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_accept_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_ignore():
+    """TODO"""
+
+
+def test_handle_prompt_accept(new_session, add_browser_capabilites):
+    """
+    2. Handle any user prompts and return its value if it is an error.
+
+    [...]
+
+    In order to handle any user prompts a remote end must take the
+    following steps:
+
+      [...]
+
+      2. Perform the following substeps based on the current session's
+      user prompt handler:
+
+        [...]
+
+        - accept state
+           Accept the current user prompt.
+
+    """
+    _, session = new_session({"capabilities": {
+        "alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
+    session.url = inline("<title>WD doc title</title>")
+    create_dialog(session)("alert", text="accept #1", result_var="accept1")
+
+    fullscreen(session)
+
+    assert_dialog_handled(session, "accept #1")
+    assert read_global(session, "accept1") is None
+
+    read_global(session, "document.title")
+    create_dialog(session)("confirm", text="accept #2", result_var="accept2")
+
+    fullscreen(session)
+
+    assert_dialog_handled(session, "accept #2")
+    assert read_global(session, "accept2"), True
+
+    create_dialog(session)("prompt", text="accept #3", result_var="accept3")
+
+    fullscreen(session)
+
+    assert_dialog_handled(session, "accept #3")
+    assert read_global(session, "accept3") == "" or read_global(session, "accept3") == "undefined"
+
+
+def test_handle_prompt_missing_value(session, create_dialog):
+    """
+    2. Handle any user prompts and return its value if it is an error.
+
+    [...]
+
+    In order to handle any user prompts a remote end must take the
+    following steps:
+
+      [...]
+
+      2. Perform the following substeps based on the current session's
+      user prompt handler:
+
+        [...]
+
+        - missing value default state
+           1. Dismiss the current user prompt.
+           2. Return error with error code unexpected alert open.
+
+    """
+    session.url = inline("<title>WD doc title</title>")
+    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
+
+    response = fullscreen(session)
+
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+    assert read_global(session, "dismiss1") is None
+
+    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
+
+    response = fullscreen(session)
+
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+    assert read_global(session, "dismiss2") is False
+
+    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
+
+    response = fullscreen(session)
+
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")
+    assert read_global(session, "dismiss3") is None
--- 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,10 +1,9 @@
-from tests.support.asserts import assert_error, assert_dialog_handled, assert_same_element
-from tests.support.fixtures import create_dialog
+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):
@@ -25,147 +24,37 @@ def assert_is_active_element(session, re
     from_js = session.execute_script("return document.activeElement")
 
     if response.body["value"] is None:
         assert from_js is None
     else:
         assert_same_element(session, response.body["value"], from_js)
 
 
-# > 1. If the current browsing context is no longer open, return error with
-# >    error code no such window.
 def test_closed_context(session, create_window):
+    """
+    > 1. If the current browsing context is no longer open, return error with
+    >    error code no such window.
+    """
     new_window = create_window()
     session.window_handle = new_window
     session.close()
 
     response = get_active_element(session)
     assert_error(response, "no such window")
 
 
-# [...]
-# 2. Handle any user prompts and return its value if it is an error.
-# [...]
-# In order to handle any user prompts a remote end must take the following
-# steps:
-# 2. Run the substeps of the first matching user prompt handler:
-#
-#    [...]
-#    - dismiss state
-#      1. Dismiss the current user prompt.
-#    [...]
-#
-# 3. Return success.
-def test_handle_prompt_dismiss(new_session, add_browser_capabilites):
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "dismiss"})}})
-    session.url = inline("<body><p>Hello, World!</p></body>")
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    response = get_active_element(session)
-    assert_is_active_element(session, response)
-    assert_dialog_handled(session, "dismiss #1")
-    assert session.execute_script("return dismiss1") is None
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    response = get_active_element(session)
-    assert_is_active_element(session, response)
-    assert_dialog_handled(session, "dismiss #2")
-    assert read_global(session, "dismiss2") is False
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    response = get_active_element(session)
-    assert_is_active_element(session, response)
-    assert_dialog_handled(session, "dismiss #3")
-    assert read_global(session, "dismiss3") is None
-
-
-# [...]
-# 2. Handle any user prompts and return its value if it is an error.
-# [...]
-# In order to handle any user prompts a remote end must take the following
-# steps:
-# 2. Run the substeps of the first matching user prompt handler:
-#
-#    [...]
-#    - accept state
-#      1. Accept the current user prompt.
-#    [...]
-#
-# 3. Return success.
-def test_handle_prompt_accept(new_session, add_browser_capabilites):
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
-    session.url = inline("<body><p>Hello, World!</p></body>")
-    create_dialog(session)("alert", text="accept #1", result_var="accept1")
-
-    response = get_active_element(session)
-    assert_is_active_element(session, response)
-    assert_dialog_handled(session, "accept #1")
-    assert read_global(session, "accept1") is None
-
-    create_dialog(session)("confirm", text="accept #2", result_var="accept2")
-
-    response = get_active_element(session)
-    assert_is_active_element(session, response)
-    assert_dialog_handled(session, "accept #2")
-    assert read_global(session, "accept2") is True
-
-    create_dialog(session)("prompt", text="accept #3", result_var="accept3")
-
-    response = get_active_element(session)
-    assert_is_active_element(session, response)
-    assert_dialog_handled(session, "accept #3")
-    assert read_global(session, "accept3") == "" or read_global(session, "accept3") == "undefined"
-
-
-# [...]
-# 2. Handle any user prompts and return its value if it is an error.
-# [...]
-# In order to handle any user prompts a remote end must take the following
-# steps:
-# 2. Run the substeps of the first matching user prompt handler:
-#
-#    [...]
-#    - missing value default state
-#    - not in the table of simple dialogs
-#      1. Dismiss the current user prompt.
-#      2. Return error with error code unexpected alert open.
-def test_handle_prompt_missing_value(session, create_dialog):
-    session.url = inline("<body><p>Hello, World!</p></body>")
-
-    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
-
-    response = get_active_element(session)
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #1")
-    assert session.execute_script("return dismiss1") is None
-
-    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
-
-    response = get_active_element(session)
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #2")
-    assert session.execute_script("return dismiss2") is False
-
-    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
-
-    response = get_active_element(session)
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #3")
-    assert session.execute_script("return dismiss3") is None
-
-
-# > [...]
-# > 3. Let active element be the active element of the current browsing
-# >    context's document element.
-# > 4. Let active web element be the JSON Serialization of active element.
-# > 5. Return success with data active web element.
 def test_success_document(session):
+    """
+    > [...]
+    > 3. Let active element be the active element of the current browsing
+    >    context's document element.
+    > 4. Let active web element be the JSON Serialization of active element.
+    > 5. Return success with data active web element.
+    """
     session.url = inline("""
         <body>
             <h1>Heading</h1>
             <input />
             <input />
             <input style="opacity: 0" />
             <p>Another element</p>
         </body>""")
--- a/testing/web-platform/tests/webdriver/tests/get_current_url/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_current_url/get.py
@@ -23,24 +23,16 @@ def get_current_url(session):
 def test_get_current_url_no_browsing_context(session, create_window):
     # 7.2 step 1
     session.window_handle = create_window()
     session.close()
 
     result = get_current_url(session)
     assert_error(result, "no such window")
 
-
-def test_get_current_url_alert_prompt(session):
-    # 7.2 step 2
-    session.url = alert_doc
-
-    result = get_current_url(session)
-    assert_error(result, "unexpected alert open")
-
 def test_get_current_url_matches_location(session):
     # 7.2 step 3
     url = session.execute_script("return window.location.href")
 
     result = get_current_url(session)
     assert_success(result, url)
 
 def test_get_current_url_payload(session):
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/get_current_url/user_prompts.py
@@ -0,0 +1,77 @@
+from tests.support.asserts import assert_error, assert_dialog_handled
+from tests.support.fixtures import create_dialog
+from tests.support.inline import inline
+
+
+def read_global(session, name):
+    return session.execute_script("return %s;" % name)
+
+
+def get_current_url(session):
+    return session.transport.send("GET", "session/%s/url" % session.session_id)
+
+
+def test_handle_prompt_dismiss_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_accept_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_ignore():
+    """TODO"""
+
+
+def test_handle_prompt_accept(new_session, add_browser_capabilites):
+    _, session = new_session({"capabilities": {
+        "alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
+    session.url = inline("<title>WD doc title</title>")
+    create_dialog(session)("alert", text="accept #1", result_var="accept1")
+
+    get_current_url(session)
+
+    assert_dialog_handled(session, "accept #1")
+    assert read_global(session, "accept1") is None
+
+    read_global(session, "document.title")
+    create_dialog(session)("confirm", text="accept #2", result_var="accept2")
+
+    get_current_url(session)
+
+    assert_dialog_handled(session, "accept #2")
+    assert read_global(session, "accept2"), True
+
+    create_dialog(session)("prompt", text="accept #3", result_var="accept3")
+
+    get_current_url(session)
+
+    assert_dialog_handled(session, "accept #3")
+    assert read_global(session, "accept3") == "" or read_global(session, "accept3") == "undefined"
+
+
+def test_handle_prompt_missing_value(session, create_dialog):
+    session.url = inline("<title>WD doc title</title>")
+    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
+
+    response = get_current_url(session)
+
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+    assert read_global(session, "dismiss1") is None
+
+    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
+
+    response = get_current_url(session)
+
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+    assert read_global(session, "dismiss2") is False
+
+    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
+
+    response = get_current_url(session)
+
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")
+    assert read_global(session, "dismiss3") is None
--- 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,146 +1,52 @@
-# META: timeout=long
-
 import pytest
 
-from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
-from tests.support.fixtures import create_dialog
+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))
 
 
-# 13.2 Get Element Attribute
-
 def test_no_browsing_context(session, create_window):
-    # 13.2 step 1
     session.window_handle = create_window()
     session.close()
 
     result = get_element_attribute(session, "foo", "id")
-
     assert_error(result, "no such window")
 
-
-def test_handle_prompt_dismiss(new_session, add_browser_capabilites):
-    # 13.2 step 2
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "dismiss"})}})
-    session.url = inline("<input id=foo>")
-    element = session.find.css("#foo", all=False)
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = get_element_attribute(session, element.id, "id")
-
-    assert_success(result, "foo")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = get_element_attribute(session, element.id, "id")
-
-    assert_success(result, "foo")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = get_element_attribute(session, element.id, "id")
-
-    assert_success(result, "foo")
-    assert_dialog_handled(session, "dismiss #3")
-
-
-def test_handle_prompt_accept(new_session, add_browser_capabilites):
-    # 13.2 step 2
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
-    session.url = inline("<input id=foo>")
-    element = session.find.css("#foo", all=False)
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = get_element_attribute(session, element.id, "id")
-
-    assert_success(result, "foo")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = get_element_attribute(session, element.id, "id")
-
-    assert_success(result, "foo")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = get_element_attribute(session, element.id, "id")
-
-    assert_success(result, "foo")
-    assert_dialog_handled(session, "dismiss #3")
-
-
-def test_handle_prompt_missing_value(session):
-    # 13.2 step 2
-    session.url = inline("<input id=foo>")
-    element = session.find.css("#foo", all=False)
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = get_element_attribute(session, element.id, "id")
-
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = get_element_attribute(session, element.id, "id")
-
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = get_element_attribute(session, element.id, "id")
-
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #3")
-
-
 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):
-    # 13.2 step 4
     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)
-    assert False == session.execute_script("return document.querySelector('input').checked")
 
     # 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()
     assert True == session.execute_script("return document.querySelector('input').checked")
     result = get_element_attribute(session, element.id, "input")
     assert_success(result, None)
 
 
 @pytest.mark.parametrize("tag,attrs", [
     ("audio", ["autoplay", "controls", "loop", "muted"]),
@@ -159,27 +65,24 @@ def test_normal(session):
     ("option", ["disabled", "selected"]),
     ("script", ["async", "defer"]),
     ("select", ["autofocus", "disabled", "multiple", "required"]),
     ("textarea", ["autofocus", "disabled", "readonly", "required"]),
     ("track", ["default"]),
     ("video", ["autoplay", "controls", "loop", "muted"])
 ])
 def test_boolean_attribute(session, tag, attrs):
-    # 13.2 Step 5
     for attr in attrs:
         session.url = inline("<{0} {1}>".format(tag, attr))
-
         element = session.find.css(tag, all=False)
         result = result = get_element_attribute(session, element.id, attr)
         assert_success(result, "true")
 
 
 def test_global_boolean_attributes(session):
-    # 13.2 Step 5
     session.url = inline("<p hidden>foo")
     element = session.find.css("p", all=False)
     result = result = get_element_attribute(session, element.id, "hidden")
 
     assert_success(result, "true")
 
     session.url = inline("<p>foo")
     element = session.find.css("p", all=False)
--- 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,136 +1,55 @@
-# META: timeout=long
-
-from tests.support.asserts import assert_error, assert_dialog_handled, assert_success
+from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
-from tests.support.fixtures import create_dialog
 
 _input = inline("<input id=i1>")
 
 
 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))
 
 
 def test_no_browsing_context(session, create_window):
-    # 13.3 step 1
     session.window_handle = create_window()
     session.close()
 
     result = get_element_property(session, "foo", "id")
     assert_error(result, "no such window")
 
 
-def test_handle_prompt_dismiss(new_session, add_browser_capabilites):
-    # 13.3 step 2
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "dismiss"})}})
-    session.url = inline("<input id=foo>")
-    element = session.find.css("#foo", all=False)
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = get_element_property(session, element.id, "id")
-    assert_success(result, "foo")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = get_element_property(session, element.id, "id")
-    assert_success(result, "foo")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = get_element_property(session, element.id, "id")
-    assert_success(result, "foo")
-    assert_dialog_handled(session, "dismiss #3")
-
-
-
-def test_handle_prompt_accept(new_session, add_browser_capabilites):
-    # 13.3 step 2
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
-    session.url = inline("<input id=foo>")
-    element = session.find.css("#foo", all=False)
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = get_element_property(session, element.id, "id")
-    assert_success(result, "foo")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = get_element_property(session, element.id, "id")
-    assert_success(result, "foo")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = get_element_property(session, element.id, "id")
-    assert_success(result, "foo")
-    assert_dialog_handled(session, "dismiss #3")
-
-
-def test_handle_prompt_missing_value(session):
-    # 13.3 step 2
-    session.url = inline("<input id=foo>")
-    element = session.find.css("#foo", all=False)
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = get_element_property(session, element.id, "id")
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = get_element_property(session, element.id, "id")
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = get_element_property(session, element.id, "id")
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #3")
-
 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):
-    # 13.3 step 4
     session.url = _input
     element = session.find.css("input", all=False)
     session.refresh()
 
     result = get_element_property(session, element.id, "id")
     assert_error(result, "stale element reference")
 
 
-def test_element_non_existent(session):
-    # 13.3 step 5-7
+def test_property_non_existent(session):
     session.url = _input
     element = session.find.css("input", all=False)
 
     result = get_element_property(session, element.id, "foo")
     assert_success(result, None)
-    assert None == session.execute_script("return arguments[0].foo",
-                                          args=[element])
+
+    assert session.execute_script("return arguments[0].foo", args=[element]) is None
 
 
 def test_element(session):
-    # 13.3 step 5-7
     session.url = inline("<input type=checkbox>")
     element = session.find.css("input", all=False)
     element.click()
     assert session.execute_script("return arguments[0].hasAttribute('checked')", args=(element,)) is False
 
     result = get_element_property(session, element.id, "checked")
     assert_success(result, True)
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/get_element_property/user_prompts.py
@@ -0,0 +1,87 @@
+from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
+from tests.support.fixtures import create_dialog
+from tests.support.inline import inline
+
+
+def read_global(session, name):
+    return session.execute_script("return %s;" % name)
+
+
+def get_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))
+
+
+def test_handle_prompt_dismiss(new_session, add_browser_capabilites):
+    # 13.3 step 2
+    _, session = new_session({"capabilities": {
+        "alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "dismiss"})}})
+    session.url = inline("<input id=foo>")
+    element = session.find.css("#foo", all=False)
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = get_property(session, element.id, "id")
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = get_property(session, element.id, "id")
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = get_property(session, element.id, "id")
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_accept(new_session, add_browser_capabilites):
+    _, session = new_session({"capabilities": {
+        "alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
+    session.url = inline("<input id=foo>")
+    element = session.find.css("#foo", all=False)
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = get_property(session, element.id, "id")
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = get_property(session, element.id, "id")
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = get_property(session, element.id, "id")
+    assert_success(result, "foo")
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_missing_value(session):
+    session.url = inline("<input id=foo>")
+    element = session.find.css("#foo", all=False)
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = get_property(session, element.id, "id")
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = get_property(session, element.id, "id")
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = get_property(session, element.id, "id")
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")
--- 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,13 +1,10 @@
-# META: timeout=long
-
-from tests.support.asserts import assert_error, assert_dialog_handled, assert_success
+from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
-from tests.support.fixtures import create_dialog
 
 
 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))
 
@@ -16,90 +13,16 @@ def test_no_browsing_context(session, cr
     # 13.6 step 1
     session.window_handle = create_window()
     session.close()
 
     result = get_element_tag_name(session, "foo")
     assert_error(result, "no such window")
 
 
-def test_handle_prompt_dismiss(new_session, add_browser_capabilites):
-    # 13.6 step 2
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "dismiss"})}})
-    session.url = inline("<input id=foo>")
-    element = session.find.css("#foo", all=False)
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = get_element_tag_name(session, element.id)
-    assert_success(result, "input")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = get_element_tag_name(session, element.id)
-    assert_success(result, "input")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = get_element_tag_name(session, element.id)
-    assert_success(result, "input")
-    assert_dialog_handled(session, "dismiss #3")
-
-
-def test_handle_prompt_accept(new_session, add_browser_capabilites):
-    # 13.6 step 2
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
-    session.url = inline("<input id=foo>")
-    element = session.find.css("#foo", all=False)
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = get_element_tag_name(session, element.id)
-    assert_success(result, "input")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = get_element_tag_name(session, element.id)
-    assert_success(result, "input")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = get_element_tag_name(session, element.id)
-    assert_success(result, "input")
-    assert_dialog_handled(session, "dismiss #3")
-
-
-def test_handle_prompt_missing_value(session):
-    # 13.6 step 2
-    session.url = inline("<input id=foo>")
-    element = session.find.css("#foo", all=False)
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = get_element_tag_name(session, element.id)
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = get_element_tag_name(session, element.id)
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = get_element_tag_name(session, element.id)
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #3")
-
-
 def test_element_not_found(session):
     # 13.6 Step 3
     result = get_element_tag_name(session, "foo")
     assert_error(result, "no such element")
 
 
 def test_element_stale(session):
     # 13.6 step 4
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/get_element_tag_name/user_prompts.py
@@ -0,0 +1,85 @@
+from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
+from tests.support.fixtures import create_dialog
+from tests.support.inline import inline
+
+
+def read_global(session, name):
+    return session.execute_script("return %s;" % name)
+
+
+def get_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="foo"))
+
+
+def test_handle_prompt_dismiss(new_session, add_browser_capabilites):
+    _, session = new_session({"capabilities": {
+        "alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "dismiss"})}})
+    session.url = inline("<input id=foo>")
+    element = session.find.css("#foo", all=False)
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = get_tag_name(session, element.id)
+    assert_success(result, "input")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = get_tag_name(session, element.id)
+    assert_success(result, "input")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = get_tag_name(session, element.id)
+    assert_success(result, "input")
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_accept(new_session, add_browser_capabilites):
+    _, session = new_session({"capabilities": {
+        "alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
+    session.url = inline("<input id=foo>")
+    element = session.find.css("#foo", all=False)
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = get_tag_name(session, element.id)
+    assert_success(result, "input")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = get_tag_name(session, element.id)
+    assert_success(result, "input")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = get_tag_name(session, element.id)
+    assert_success(result, "input")
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_missing_value(session):
+    session.url = inline("<input id=foo>")
+    element = session.find.css("#foo", all=False)
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = get_tag_name(session, element.id)
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = get_tag_name(session, element.id)
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = get_tag_name(session, element.id)
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")
--- a/testing/web-platform/tests/webdriver/tests/get_title/get.py
+++ b/testing/web-platform/tests/webdriver/tests/get_title/get.py
@@ -1,10 +1,9 @@
-from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
-from tests.support.fixtures import create_dialog
+from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 from tests.support.wait import wait
 
 
 def read_global(session, name):
     return session.execute_script("return %s;" % name)
 
 
@@ -17,121 +16,16 @@ def test_no_browsing_context(session, cr
     new_window = create_window()
     session.window_handle = new_window
     session.close()
 
     result = get_title(session)
     assert_error(result, "no such window")
 
 
-def test_title_handle_prompt_dismiss(new_session, add_browser_capabilites):
-    _, session = new_session({"capabilities": {
-        "alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "dismiss"})}})
-    session.url = inline("<title>WD doc title</title>")
-
-    expected_title = read_global(session, "document.title")
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = get_title(session)
-    assert_success(result, expected_title)
-    assert_dialog_handled(session, "dismiss #1")
-    assert read_global(session, "dismiss1") is None
-
-    expected_title = read_global(session, "document.title")
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = get_title(session)
-    assert_success(result, expected_title)
-    assert_dialog_handled(session, "dismiss #2")
-    assert read_global(session, "dismiss2") is False
-
-    expected_title = read_global(session, "document.title")
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = get_title(session)
-    assert_success(result, expected_title)
-    assert_dialog_handled(session, "dismiss #3")
-    assert read_global(session, "dismiss3") is None
-
-
-def test_title_handle_prompt_accept(new_session, add_browser_capabilites):
-    _, session = new_session({"capabilities": {
-        "alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
-    session.url = inline("<title>WD doc title</title>")
-    create_dialog(session)("alert", text="accept #1", result_var="accept1")
-
-    expected_title = read_global(session, "document.title")
-
-    result = get_title(session)
-    assert_success(result, expected_title)
-    assert_dialog_handled(session, "accept #1")
-    assert read_global(session, "accept1") is None
-
-    expected_title = read_global(session, "document.title")
-    create_dialog(session)("confirm", text="accept #2", result_var="accept2")
-
-    result = get_title(session)
-    assert_success(result, expected_title)
-    assert_dialog_handled(session, "accept #2")
-    assert read_global(session, "accept2") is True
-
-    expected_title = read_global(session, "document.title")
-    create_dialog(session)("prompt", text="accept #3", result_var="accept3")
-
-    result = get_title(session)
-    assert_success(result, expected_title)
-    assert_dialog_handled(session, "accept #3")
-    assert read_global(session, "accept3") == "" or read_global(session, "accept3") == "undefined"
-
-
-def test_title_handle_prompt_missing_value(session, create_dialog):
-    session.url = inline("<title>WD doc title</title>")
-    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = get_title(session)
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #1")
-    assert read_global(session, "dismiss1") is None
-
-    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = get_title(session)
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #2")
-    assert read_global(session, "dismiss2") is False
-
-    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = get_title(session)
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #3")
-    assert read_global(session, "dismiss3") is None
-
-# The behavior of the `window.print` function is platform-dependent and may not
-# trigger the creation of a dialog at all. Therefore, this test should only be
-# run in contexts that support the dialog (a condition that may not be
-# determined automatically).
-# def test_title_with_non_simple_dialog(session):
-#    document = "<title>With non-simple dialog</title><h2>Hello</h2>"
-#    spawn = """
-#        var done = arguments[0];
-#        setTimeout(function() {
-#            done();
-#        }, 0);
-#        setTimeout(function() {
-#            window['print']();
-#        }, 0);
-#    """
-#    session.url = inline(document)
-#    session.execute_async_script(spawn)
-#
-#    result = get_title(session)
-#    assert_error(result, "unexpected alert open")
-
-
 def test_title_from_top_context(session):
     session.url = inline("<title>Foobar</title><h2>Hello</h2>")
 
     result = get_title(session)
     assert_success(result, read_global(session, "document.title"))
 
 
 def test_title_with_duplicate_element(session):
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/get_title/user_prompts.py
@@ -0,0 +1,118 @@
+from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
+from tests.support.fixtures import create_dialog
+from tests.support.inline import inline
+
+
+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_title_handle_prompt_dismiss(new_session, add_browser_capabilites):
+    _, session = new_session({"capabilities": {
+        "alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "dismiss"})}})
+    session.url = inline("<title>WD doc title</title>")
+
+    expected_title = read_global(session, "document.title")
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = get_title(session)
+    assert_success(result, expected_title)
+    assert_dialog_handled(session, "dismiss #1")
+    assert read_global(session, "dismiss1") is None
+
+    expected_title = read_global(session, "document.title")
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = get_title(session)
+    assert_success(result, expected_title)
+    assert_dialog_handled(session, "dismiss #2")
+    assert read_global(session, "dismiss2") is False
+
+    expected_title = read_global(session, "document.title")
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = get_title(session)
+    assert_success(result, expected_title)
+    assert_dialog_handled(session, "dismiss #3")
+    assert read_global(session, "dismiss3") is None
+
+
+def test_title_handle_prompt_accept(new_session, add_browser_capabilites):
+    _, session = new_session({"capabilities": {
+        "alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
+    session.url = inline("<title>WD doc title</title>")
+    create_dialog(session)("alert", text="accept #1", result_var="accept1")
+
+    expected_title = read_global(session, "document.title")
+
+    result = get_title(session)
+    assert_success(result, expected_title)
+    assert_dialog_handled(session, "accept #1")
+    assert read_global(session, "accept1") is None
+
+    expected_title = read_global(session, "document.title")
+    create_dialog(session)("confirm", text="accept #2", result_var="accept2")
+
+    result = get_title(session)
+    assert_success(result, expected_title)
+    assert_dialog_handled(session, "accept #2")
+    assert read_global(session, "accept2") is True
+
+    expected_title = read_global(session, "document.title")
+    create_dialog(session)("prompt", text="accept #3", result_var="accept3")
+
+    result = get_title(session)
+    assert_success(result, expected_title)
+    assert_dialog_handled(session, "accept #3")
+    assert read_global(session, "accept3") == "" or read_global(session, "accept3") == "undefined"
+
+
+def test_title_handle_prompt_missing_value(session, create_dialog):
+    session.url = inline("<title>WD doc title</title>")
+    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = get_title(session)
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+    assert read_global(session, "dismiss1") is None
+
+    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = get_title(session)
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+    assert read_global(session, "dismiss2") is False
+
+    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = get_title(session)
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")
+    assert read_global(session, "dismiss3") is None
+
+
+# The behavior of the `window.print` function is platform-dependent and may not
+# trigger the creation of a dialog at all. Therefore, this test should only be
+# run in contexts that support the dialog (a condition that may not be
+# determined automatically).
+# def test_title_with_non_simple_dialog(session):
+#    document = "<title>With non-simple dialog</title><h2>Hello</h2>"
+#    spawn = """
+#        var done = arguments[0];
+#        setTimeout(function() {
+#            done();
+#        }, 0);
+#        setTimeout(function() {
+#            window['print']();
+#        }, 0);
+#    """
+#    session.url = inline(document)
+#    session.execute_async_script(spawn)
+#
+#    result = get_title(session)
+#    assert_error(result, "unexpected alert open")
--- 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,10 +1,9 @@
-from tests.support.asserts import assert_error, assert_dialog_handled, assert_success
-from tests.support.fixtures import create_dialog
+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(
@@ -18,109 +17,16 @@ def test_no_browsing_context(session, cr
 
     """
     session.window_handle = create_window()
     session.close()
     response = get_window_rect(session)
     assert_error(response, "no such window")
 
 
-def test_handle_prompt_dismiss_and_notify():
-    """TODO"""
-
-
-def test_handle_prompt_accept_and_notify():
-    """TODO"""
-
-
-def test_handle_prompt_ignore():
-    """TODO"""
-
-
-def test_handle_prompt_accept(new_session, add_browser_capabilites):
-    """
-    2. Handle any user prompts and return its value if it is an error.
-
-    [...]
-
-    In order to handle any user prompts a remote end must take the
-    following steps:
-
-      [...]
-
-      2. Perform the following substeps based on the current session's
-      user prompt handler:
-
-        [...]
-
-        - accept state
-           Accept the current user prompt.
-
-    """
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
-    session.url = inline("<title>WD doc title</title>")
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-    response = get_window_rect(session)
-    assert response.status == 200
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-    response = get_window_rect(session)
-    assert response.status == 200
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-    response = get_window_rect(session)
-    assert response.status == 200
-    assert_dialog_handled(session, "dismiss #3")
-
-
-def test_handle_prompt_missing_value(session, create_dialog):
-    """
-    2. Handle any user prompts and return its value if it is an error.
-
-    [...]
-
-    In order to handle any user prompts a remote end must take the
-    following steps:
-
-      [...]
-
-      2. Perform the following substeps based on the current session's
-      user prompt handler:
-
-        [...]
-
-        - missing value default state
-           1. Dismiss the current user prompt.
-           2. Return error with error code unexpected alert open.
-
-    """
-    session.url = inline("<title>WD doc title</title>")
-    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
-
-    response = get_window_rect(session)
-
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
-
-    response = get_window_rect(session)
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
-
-    response = get_window_rect(session)
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #3")
-
-
 def test_payload(session):
     """
     3. Return success with the JSON serialization of the current top-level
     browsing context's window rect.
 
     [...]
 
     A top-level browsing context's window rect is defined as a
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/get_window_rect/user_prompts.py
@@ -0,0 +1,65 @@
+from tests.support.asserts import assert_error, assert_dialog_handled
+from tests.support.fixtures import create_dialog
+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)))
+
+
+def test_handle_prompt_dismiss_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_accept_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_ignore():
+    """TODO"""
+
+
+def test_handle_prompt_accept(new_session, add_browser_capabilites):
+    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
+    session.url = inline("<title>WD doc title</title>")
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+    response = get_window_rect(session)
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+    response = get_window_rect(session)
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+    response = get_window_rect(session)
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_missing_value(session, create_dialog):
+    session.url = inline("<title>WD doc title</title>")
+    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
+
+    response = get_window_rect(session)
+
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
+
+    response = get_window_rect(session)
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
+
+    response = get_window_rect(session)
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")
--- 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,16 +1,12 @@
-# META: timeout=long
-
-from tests.support.asserts import assert_error, assert_dialog_handled, assert_success
+from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
-from tests.support.fixtures import create_dialog
 
 
-alert_doc = inline("<script>window.alert()</script>")
 check_doc = inline("<input id=checked type=checkbox checked/><input id=notChecked type=checkbox/>")
 option_doc = inline("""<select>
                         <option id=notSelected>r-</option>
                         <option id=selected selected>r+</option>
                        </select>
                     """)
 
 
@@ -25,90 +21,16 @@ def test_no_browsing_context(session, cr
     # 13.1 step 1
     session.window_handle = create_window()
     session.close()
 
     result = is_element_selected(session, "foo")
     assert_error(result, "no such window")
 
 
-def test_handle_prompt_dismiss(new_session, add_browser_capabilites):
-    # 13.1 step 2
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "dismiss"})}})
-    session.url = inline("<input id=foo>")
-    element = session.find.css("#foo", all=False)
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = is_element_selected(session, element.id)
-    assert_success(result, False)
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = is_element_selected(session, element.id)
-    assert_success(result, False)
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = is_element_selected(session, element.id)
-    assert_success(result, False)
-    assert_dialog_handled(session, "dismiss #3")
-
-
-def test_handle_prompt_accept(new_session, add_browser_capabilites):
-    # 13.1 step 2
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
-    session.url = inline("<input id=foo>")
-    element = session.find.css("#foo", all=False)
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = is_element_selected(session, element.id)
-    assert_success(result, False)
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = is_element_selected(session, element.id)
-    assert_success(result, False)
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = is_element_selected(session, element.id)
-    assert_success(result, False)
-    assert_dialog_handled(session, "dismiss #3")
-
-
-def test_handle_prompt_missing_value(session):
-    # 13.1 step 2
-    session.url = inline("<input id=foo>")
-    element = session.find.css("#foo", all=False)
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = is_element_selected(session, element.id)
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = is_element_selected(session, element.id)
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = is_element_selected(session, element.id)
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #3")
-
-
 def test_element_stale(session):
     # 13.1 step 4
     session.url = check_doc
     element = session.find.css("#checked", all=False)
     session.refresh()
 
     result = is_element_selected(session, element.id)
     assert_error(result, "stale element reference")
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/is_element_selected/user_prompts.py
@@ -0,0 +1,84 @@
+from tests.support.asserts import assert_error, assert_dialog_handled, assert_success
+from tests.support.inline import inline
+from tests.support.fixtures import create_dialog
+
+
+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_handle_prompt_dismiss(new_session, add_browser_capabilites):
+    # 13.1 step 2
+    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "dismiss"})}})
+    session.url = inline("<input id=foo>")
+    element = session.find.css("#foo", all=False)
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = is_element_selected(session, element.id)
+    assert_success(result, False)
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = is_element_selected(session, element.id)
+    assert_success(result, False)
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = is_element_selected(session, element.id)
+    assert_success(result, False)
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_accept(new_session, add_browser_capabilites):
+    # 13.1 step 2
+    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
+    session.url = inline("<input id=foo>")
+    element = session.find.css("#foo", all=False)
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = is_element_selected(session, element.id)
+    assert_success(result, False)
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = is_element_selected(session, element.id)
+    assert_success(result, False)
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = is_element_selected(session, element.id)
+    assert_success(result, False)
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_missing_value(session):
+    # 13.1 step 2
+    session.url = inline("<input id=foo>")
+    element = session.find.css("#foo", all=False)
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = is_element_selected(session, element.id)
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = is_element_selected(session, element.id)
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = is_element_selected(session, element.id)
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")
--- a/testing/web-platform/tests/webdriver/tests/maximize_window/maximize.py
+++ b/testing/web-platform/tests/webdriver/tests/maximize_window/maximize.py
@@ -1,18 +1,12 @@
-# META: timeout=long
-
-from tests.support.asserts import assert_error, assert_dialog_handled, assert_success
-from tests.support.fixtures import create_dialog
+from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
 
-alert_doc = inline("<script>window.alert()</script>")
-
-
 def maximize(session):
     return session.transport.send(
         "POST", "session/{session_id}/window/maximize".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.
@@ -29,109 +23,16 @@ def test_no_browsing_context(session, cr
 
     """
     session.window_handle = create_window()
     session.close()
     response = maximize(session)
     assert_error(response, "no such window")
 
 
-def test_handle_prompt_dismiss_and_notify():
-    """TODO"""
-
-
-def test_handle_prompt_accept_and_notify():
-    """TODO"""
-
-
-def test_handle_prompt_ignore():
-    """TODO"""
-
-
-def test_handle_prompt_accept(new_session, add_browser_capabilites):
-    """
-    3. Handle any user prompts and return its value if it is an error.
-
-    [...]
-
-    In order to handle any user prompts a remote end must take the
-    following steps:
-
-      [...]
-
-      2. Perform the following substeps based on the current session's
-      user prompt handler:
-
-        [...]
-
-        - accept state
-           Accept the current user prompt.
-
-    """
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
-    session.url = inline("<title>WD doc title</title>")
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-    response = maximize(session)
-    assert response.status == 200
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-    response = maximize(session)
-    assert response.status == 200
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-    response = maximize(session)
-    assert response.status == 200
-    assert_dialog_handled(session, "dismiss #3")
-
-
-def test_handle_prompt_missing_value(session, create_dialog):
-    """
-    3. Handle any user prompts and return its value if it is an error.
-
-    [...]
-
-    In order to handle any user prompts a remote end must take the
-    following steps:
-
-      [...]
-
-      2. Perform the following substeps based on the current session's
-      user prompt handler:
-
-        [...]
-
-        - missing value default state
-           1. Dismiss the current user prompt.
-           2. Return error with error code unexpected alert open.
-
-    """
-    session.url = inline("<title>WD doc title</title>")
-    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
-
-    response = maximize(session)
-
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
-
-    response = maximize(session)
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
-
-    response = maximize(session)
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #3")
-
-
 def test_fully_exit_fullscreen(session):
     """
     4. Fully exit fullscreen.
 
     [...]
 
     To fully exit fullscreen a document document, run these steps:
 
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/maximize_window/user_prompts.py
@@ -0,0 +1,62 @@
+from tests.support.asserts import assert_error, assert_dialog_handled
+from tests.support.fixtures import create_dialog
+from tests.support.inline import inline
+
+
+def maximize(session):
+    return session.transport.send(
+        "POST", "session/{session_id}/window/maximize".format(**vars(session)))
+
+
+def test_handle_prompt_dismiss_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_accept_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_ignore():
+    """TODO"""
+
+
+def test_handle_prompt_accept(new_session, add_browser_capabilites):
+    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
+    session.url = inline("<title>WD doc title</title>")
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+    response = maximize(session)
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+    response = maximize(session)
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+    response = maximize(session)
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_missing_value(session, create_dialog):
+    session.url = inline("<title>WD doc title</title>")
+    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
+
+    response = maximize(session)
+
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
+
+    response = maximize(session)
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
+
+    response = maximize(session)
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")
--- a/testing/web-platform/tests/webdriver/tests/minimize_window/minimize.py
+++ b/testing/web-platform/tests/webdriver/tests/minimize_window/minimize.py
@@ -1,16 +1,12 @@
-from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
-from tests.support.fixtures import create_dialog
+from tests.support.asserts import assert_error, assert_success
 from tests.support.inline import inline
 
 
-alert_doc = inline("<script>window.alert()</script>")
-
-
 def minimize(session):
     return session.transport.send(
         "POST", "session/{session_id}/window/minimize".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.
@@ -26,109 +22,16 @@ def test_no_browsing_context(session, cr
 
     """
     session.window_handle = create_window()
     session.close()
     response = minimize(session)
     assert_error(response, "no such window")
 
 
-def test_handle_prompt_dismiss_and_notify():
-    """TODO"""
-
-
-def test_handle_prompt_accept_and_notify():
-    """TODO"""
-
-
-def test_handle_prompt_ignore():
-    """TODO"""
-
-
-def test_handle_prompt_accept(new_session, add_browser_capabilites):
-    """
-    2. Handle any user prompts and return its value if it is an error.
-
-    [...]
-
-    In order to handle any user prompts a remote end must take the
-    following steps:
-
-      [...]
-
-      2. Perform the following substeps based on the current session's
-      user prompt handler:
-
-        [...]
-
-        - accept state
-           Accept the current user prompt.
-
-    """
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
-    session.url = inline("<title>WD doc title</title>")
-
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-    response = minimize(session)
-    assert response.status == 200
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-    response = minimize(session)
-    assert response.status == 200
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-    response = minimize(session)
-    assert response.status == 200
-    assert_dialog_handled(session, "dismiss #3")
-
-
-def test_handle_prompt_missing_value(session, create_dialog):
-    """
-    2. Handle any user prompts and return its value if it is an error.
-
-    [...]
-
-    In order to handle any user prompts a remote end must take the
-    following steps:
-
-      [...]
-
-      2. Perform the following substeps based on the current session's
-      user prompt handler:
-
-        [...]
-
-        - missing value default state
-           1. Dismiss the current user prompt.
-           2. Return error with error code unexpected alert open.
-
-    """
-    session.url = inline("<title>WD doc title</title>")
-    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
-
-    response = minimize(session)
-
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
-
-    response = minimize(session)
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
-
-    response = minimize(session)
-    assert_error(response, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #3")
-
-
 def test_fully_exit_fullscreen(session):
     """
     4. Fully exit fullscreen.
 
     [...]
 
     To fully exit fullscreen a document document, run these steps:
 
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/minimize_window/user_prompts.py
@@ -0,0 +1,62 @@
+from tests.support.asserts import assert_error, assert_dialog_handled
+from tests.support.fixtures import create_dialog
+from tests.support.inline import inline
+
+
+def minimize(session):
+    return session.transport.send(
+        "POST", "session/{session_id}/window/minimize".format(**vars(session)))
+
+
+def test_handle_prompt_dismiss_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_accept_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_ignore():
+    """TODO"""
+
+
+def test_handle_prompt_accept(new_session, add_browser_capabilites):
+    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
+    session.url = inline("<title>WD doc title</title>")
+
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+    response = minimize(session)
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+    response = minimize(session)
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+    response = minimize(session)
+    assert response.status == 200
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_missing_value(session, create_dialog):
+    session.url = inline("<title>WD doc title</title>")
+    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
+
+    response = minimize(session)
+
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
+
+    response = minimize(session)
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
+
+    response = minimize(session)
+    assert_error(response, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")
--- 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,18 +1,13 @@
 # META: timeout=long
 
 import pytest
 
-from tests.support.asserts import assert_error, assert_dialog_handled, assert_success
-from tests.support.fixtures import create_dialog
-from tests.support.inline import inline
-
-
-alert_doc = inline("<script>window.alert()</script>")
+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)
 
 
@@ -32,122 +27,16 @@ def test_current_top_level_browsing_cont
 
     """
     session.window_handle = create_window()
     session.close()
     response = set_window_rect(session, {})
     assert_error(response, "no such window")
 
 
-def test_handle_prompt_dismiss():
-    """TODO"""
-
-
-def test_handle_prompt_accept(new_session, add_browser_capabilites):
-    """
-    2. Handle any user prompts and return its value if it is an error.
-
-    [...]
-
-    In order to handle any user prompts a remote end must take the
-    following steps:
-
-      [...]
-
-      2. Perform the following substeps based on the current session's
-      user prompt handler:
-
-        [...]
-
-        - accept state
-           Accept the current user prompt.
-
-    """
-    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
-    original = session.window.rect
-
-    # step 2
-    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
-    result = set_window_rect(session, {"x": original["x"],
-                                       "y": original["y"]})
-    assert result.status == 200
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
-    result = set_window_rect(session, {"x": original["x"],
-                                       "y": original["y"]})
-    assert result.status == 200
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
-    result = set_window_rect(session, {"x": original["x"],
-                                       "y": original["y"]})
-    assert_success(result)
-    assert_dialog_handled(session, "dismiss #3")
-
-
-def test_handle_prompt_dismiss_and_notify():
-    """TODO"""
-
-
-def test_handle_prompt_accept_and_notify():
-    """TODO"""
-
-
-def test_handle_prompt_ignore():
-    """TODO"""
-
-
-def test_handle_prompt_missing_value(session, create_dialog):
-    """
-    2. Handle any user prompts and return its value if it is an error.
-
-    [...]
-
-    In order to handle any user prompts a remote end must take the
-    following steps:
-
-      [...]
-
-      2. Perform the following substeps based on the current session's
-      user prompt handler:
-
-        [...]
-
-        - missing value default state
-           1. Dismiss the current user prompt.
-           2. Return error with error code unexpected alert open.
-
-    """
-
-    original = session.window.rect
-
-    # step 2
-    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
-
-    result = set_window_rect(session, {"x": original["x"],
-                                       "y": original["y"]})
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #1")
-
-    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
-
-    result = set_window_rect(session, {"x": original["x"],
-                                       "y": original["y"]})
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #2")
-
-    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
-
-    result = set_window_rect(session, {"x": original["x"],
-                                       "y": original["y"]})
-    assert_error(result, "unexpected alert open")
-    assert_dialog_handled(session, "dismiss #3")
-
-
 @pytest.mark.parametrize("rect", [
     {"width": "a"},
     {"height": "b"},
     {"width": "a", "height": "b"},
     {"x": "a"},
     {"y": "b"},
     {"x": "a", "y": "b"},
     {"width": "a", "height": "b", "x": "a", "y": "b"},
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/webdriver/tests/set_window_rect/user_prompts.py
@@ -0,0 +1,73 @@
+from tests.support.asserts import assert_dialog_handled, assert_error, assert_success
+from tests.support.fixtures import create_dialog
+
+
+def set_window_rect(session, rect):
+    return session.transport.send(
+        "POST", "session/{session_id}/window/rect".format(**vars(session)),
+        rect)
+
+
+def test_handle_prompt_dismiss():
+    """TODO"""
+
+
+def test_handle_prompt_accept(new_session, add_browser_capabilites):
+    _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
+    original = session.window.rect
+
+    # step 2
+    create_dialog(session)("alert", text="dismiss #1", result_var="dismiss1")
+    result = set_window_rect(session, {"x": original["x"],
+                                       "y": original["y"]})
+    assert result.status == 200
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog(session)("confirm", text="dismiss #2", result_var="dismiss2")
+    result = set_window_rect(session, {"x": original["x"],
+                                       "y": original["y"]})
+    assert result.status == 200
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog(session)("prompt", text="dismiss #3", result_var="dismiss3")
+    result = set_window_rect(session, {"x": original["x"],
+                                       "y": original["y"]})
+    assert_success(result)
+    assert_dialog_handled(session, "dismiss #3")
+
+
+def test_handle_prompt_dismiss_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_accept_and_notify():
+    """TODO"""
+
+
+def test_handle_prompt_ignore():
+    """TODO"""
+
+
+def test_handle_prompt_missing_value(session, create_dialog):
+    original = session.window.rect
+
+    create_dialog("alert", text="dismiss #1", result_var="dismiss1")
+
+    result = set_window_rect(session, {"x": original["x"],
+                                       "y": original["y"]})
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #1")
+
+    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
+
+    result = set_window_rect(session, {"x": original["x"],
+                                       "y": original["y"]})
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #2")
+
+    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
+
+    result = set_window_rect(session, {"x": original["x"],
+                                       "y": original["y"]})
+    assert_error(result, "unexpected alert open")
+    assert_dialog_handled(session, "dismiss #3")