summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/old-tests/webdriver
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/old-tests/webdriver')
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/README.md38
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/base_test.py60
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/command_contexts/__init__.py0
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/command_contexts/open_and_close_window_test.py64
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/command_contexts/res/first-page.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/command_contexts/res/other-page.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/command_contexts/window_handle_test.py33
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/command_contexts/window_size_test.py35
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/cookie/__init__.py0
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/cookie/cookie_test.py57
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/cookie/res/cookie_container.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/ecmascript/ecmascript_test.py17
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/ecmascript/res/ecmascript_test.html2
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_location/__init__.py0
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_location/element_location_test.py60
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_location/res/elements.html10
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/__init__.py0
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/method_test.py107
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/properties.py17
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/0x0-pixels.html12
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/1x1-pixels.html12
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/a-with-href-attribute.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/absolute-children-ancestor-hidden-overflow.html16
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/body_empty.html4
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/body_implicit.html3
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/body_overflow_hidden.html4
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/body_visibility_hidden.html4
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/display-block.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-child-link.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-child-paragraph.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-child.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-dynamic.html10
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-parent-presedence-visibility.html15
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-parent-presedence.html14
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-dynamically-moved-outside-viewport.html15
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-hidden-by-other-element.html20
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-hidden-by-z-index.html29
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-moved-behind-other-element-by-transform.html31
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-moved-outside-viewport-by-transform.html15
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-outside-viewport.html13
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-partially-hidden-by-other-element.html23
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-selected.html89
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-color-style-attribute.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-custom-attribute.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-id-attribute.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-same-color-as-background.html10
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-same-color-as-parent-background.html18
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-style-attribute.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/element-without-attribute.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/elements_text.html10
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/get-element-attribute-extended.html72
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/hidden-input-type-checkbox-untogglable.html9
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/hidden-input-type-text-writing.html9
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/hidden.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/img-with-src-attribute.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/input-morphs-into-hidden.html10
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/input-type-hidden-unclickable.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/input-type-hidden.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/input-with-checked-attribute.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/input-without-checked-attribute.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/option-with-value-attribute.html7
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/option-without-value-attribute.html7
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/text-with-matching-color-and-background.html14
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/text-with-same-color-as-background.html12
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/text-with-same-color-as-parent-background.html14
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child-link.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child-paragraph.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child-presedence.html12
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-hidden.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-visible.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/x-auto-y-hidden.html30
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/x-hidden-y-auto.html30
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/x-hidden-y-hidden.html30
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/x-hidden-y-scroll.html30
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/x-scroll-y-hidden.html30
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/res/zero-sized-element-with-sizable-decendant.html14
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/selected_test.py210
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/element_state/visibility_test.py324
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/javascript/__init__.py0
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/javascript/execute_script_test.py129
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/javascript/res/execute_script_test.html2
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/javascript/res/return_array_of_dom_elements.html3
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/javascript/res/return_document_body.html2
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/javascript/res/return_node_list.html3
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/modal/__init__.py0
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/modal/alerts_quit_test.py26
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/modal/alerts_test.py148
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/modal/res/alerts.html53
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/__init__.py0
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/auth_tests.py42
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/forward.py24
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/forwardToNothing.py20
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/get_from_http_test.py60
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/invalid_cert_test.py28
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/refresh-page.py27
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/refresh_page.py27
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/res/1s-meta-redirect.html4
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/res/60s-meta-redirect.html4
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/res/authenticated.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/res/empty.html4
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/res/forwardNext.html6
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/res/forwardStart.html6
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/res/fragment.html9
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/res/instant-meta-redirect.html4
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/res/refreshPageDynamic.html10
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/res/refreshPageStatic.html6
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/navigation/res/self-signed.key28
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/network.py30
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/runtests.py14
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/runtests_p0.py42
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/screenshot/__init__.py1
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/screenshot/res/screenshot.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/screenshot/take_screenshot.py15
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/timeouts/__init__.py0
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/timeouts/implicit_waits_tests.py64
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/timeouts/page_load_timeouts_tests.py26
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/timeouts/res/implicit_waits_tests.html38
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/timeouts/res/page_load_timeouts_tests.html12
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/__init__.py0
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/clear_test.py53
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/click_test.py349
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/res/click.html45
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_contenteditable_page.html13
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_disabled_input_page.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_disabled_textarea_page.html13
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_readonly_input_page.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_readonly_textarea_page.html13
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_writable_input_page.html11
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_writable_textarea_page.html13
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/res/text-form-landing.html8
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/res/text-form.html25
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/user_input/sendkeys_test.py96
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/webdriver.cfg35
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/windows/__init__.py1
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/windows/res/win1.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/windows/res/win2.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/windows/res/win3.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/windows/res/win4.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/windows/res/win5.html5
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/windows/tabbing.py30
-rw-r--r--testing/web-platform/tests/old-tests/webdriver/windows/window_manipulation.py43
143 files changed, 3638 insertions, 0 deletions
diff --git a/testing/web-platform/tests/old-tests/webdriver/README.md b/testing/web-platform/tests/old-tests/webdriver/README.md
new file mode 100644
index 000000000..7a89fb78a
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/README.md
@@ -0,0 +1,38 @@
+# W3C Browser Automation Specification Tests
+
+This repository defines a set of conformance tests for the W3C web
+browser automation specification known as WebDriver. The purpose is
+for the different driver implementations to be tested to determine
+whether they meet the recognized standard.
+
+## How to run the tests
+
+1. Go to the WebDriver tests: `cd _WEBDRIVER_TEST_ROOT_`
+2. Run the tests: `python runtests.py`
+3. Run the test against a different config specified in webdriver.cfg:
+ `WD_BROWSER=chrome python runtests.py`
+
+To be run a specific test file you can just run `python test_file.py`
+
+Similarly you can specify a different browser to run against if in webdriver.cfg:
+ `WD_BROWSER=chrome python ecmascript/ecmascript_test.py`
+
+Note: that you will need likely need to start the driver's server before running.
+
+## Updating configuration
+
+The _webdriver.cfg_ file holds any configuration that the tests might
+require. Change the value of browser to your needs. This will then
+be picked up by WebDriverBaseTest when tests are run.
+
+Be sure not to commit your _webdriver.cfg_ changes when your create or modify tests.
+
+## How to write tests
+
+1. Create a test file per section from the specification.
+2. For each test there needs to be one or more corresponding HTML
+ files that will be used for testing. HTML files are not to be
+ reused between tests. HTML files and other support files
+ should be stored in a folder named 'res'.
+3. Test name should explain the intention of the test e.g. `def
+ test_navigate_and_return_title(self):`
diff --git a/testing/web-platform/tests/old-tests/webdriver/base_test.py b/testing/web-platform/tests/old-tests/webdriver/base_test.py
new file mode 100644
index 000000000..851099936
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/base_test.py
@@ -0,0 +1,60 @@
+import ConfigParser
+import json
+import os
+import sys
+import unittest
+
+from network import get_lan_ip
+
+repo_root = os.path.abspath(os.path.join(__file__, "../.."))
+sys.path.insert(1, os.path.join(repo_root, "tools", "webdriver"))
+sys.path.insert(1, os.path.join(repo_root, "tools", "wptserve"))
+from wptserve import server
+from selenium import webdriver
+
+
+class WebDriverBaseTest(unittest.TestCase):
+ @classmethod
+ def setUpClass(cls):
+ cls.driver = create_driver()
+
+ cls.webserver = server.WebTestHttpd(host=get_lan_ip())
+ cls.webserver.start()
+ cls.webserver.where_is = cls.webserver.get_url
+
+ @classmethod
+ def tearDownClass(cls):
+ cls.webserver.stop()
+ if cls.driver:
+ cls.driver.quit()
+
+
+def create_driver():
+ config = ConfigParser.ConfigParser()
+ config.read('webdriver.cfg')
+ section = os.environ.get("WD_BROWSER", 'firefox')
+ if config.has_option(section, 'url'):
+ url = config.get(section, "url")
+ else:
+ url = 'http://127.0.0.1:4444/wd/hub'
+ capabilities = None
+ if config.has_option(section, 'capabilities'):
+ try:
+ capabilities = json.loads(config.get(section, "capabilities"))
+ except:
+ pass
+ mode = 'compatibility'
+ if config.has_option(section, 'mode'):
+ mode = config.get(section, 'mode')
+ if section == 'firefox':
+ driver = webdriver.Firefox()
+ elif section == 'chrome':
+ driver = webdriver.Chrome()
+ elif section == 'edge':
+ driver = webdriver.Remote()
+ elif section == 'ie':
+ driver = webdriver.Ie()
+ elif section == 'selendroid':
+ driver = webdriver.Android()
+
+ return driver
diff --git a/testing/web-platform/tests/old-tests/webdriver/command_contexts/__init__.py b/testing/web-platform/tests/old-tests/webdriver/command_contexts/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/command_contexts/__init__.py
diff --git a/testing/web-platform/tests/old-tests/webdriver/command_contexts/open_and_close_window_test.py b/testing/web-platform/tests/old-tests/webdriver/command_contexts/open_and_close_window_test.py
new file mode 100644
index 000000000..61d04d93d
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/command_contexts/open_and_close_window_test.py
@@ -0,0 +1,64 @@
+import os
+import sys
+import random
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+repo_root = os.path.abspath(os.path.join(__file__, "../../.."))
+sys.path.insert(1, os.path.join(repo_root, "tools", "webdriver"))
+from webdriver import exceptions
+
+
+class OpenAndCloseWindowTest(base_test.WebDriverBaseTest):
+ def setUp(self):
+ self.driver.get(self.webserver.where_is("command_contexts/res/first-page.html"))
+
+ def tearDown(self):
+ handles = self.driver.get_window_handles()
+
+ for i in range(len(handles) - 1):
+ self.driver.switch_to_window(handles[i])
+ self.driver.close()
+
+ self.driver.switch_to_window(self.driver.get_window_handles()[0])
+
+ def test_open_new_window(self):
+ handles = self.driver.get_window_handles()
+ self.driver.find_element_by_id("open_new_window").click()
+ self.assertEquals(len(handles) + 1, len(self.driver.get_window_handles()))
+
+ def test_get_window_handles_returns_the_windows_that_have_been_opened(self):
+ self.driver.find_element_by_id("open_new_window").click()
+ handles = self.driver.get_window_handles()
+ self.driver.switch_to_window(handles[0])
+ url1 = self.driver.get_current_url()
+ self.driver.switch_to_window(handles[1])
+ url2 = self.driver.get_current_url()
+
+ if url1 == self.webserver.where_is("controlling_windows/res/other-page.html"):
+ self.assertEquals(url2, self.webserver.where_is("controlling_windows/res/first-page.html"))
+ elif url1 == self.webserver.where_is("controlling_windows/res/first-page.html"):
+ self.assertEquals(url2, self.webserver.where_is("controlling_windows/res/other-page.html"))
+ else:
+ self.fail("The wrong set of URLs were returned")
+
+ def test_close_window(self):
+ open_windows = len(self.driver.get_window_handles())
+
+ self.driver.find_element_by_id("open_new_window").click()
+ self.assertEquals(1 + open_windows, len(self.driver.get_window_handles()))
+
+ self.driver.close()
+ self.assertEquals(open_windows, len(self.driver.get_window_handles()))
+
+ def test_command_sent_to_closed_window_returns_no_such_window_exception(self):
+ self.driver.find_element_by_id("open_new_window").click()
+ self.driver.close()
+
+ with self.assertRaises(exceptions.NoSuchWindowException):
+ self.driver.get_window_handle()
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/command_contexts/res/first-page.html b/testing/web-platform/tests/old-tests/webdriver/command_contexts/res/first-page.html
new file mode 100644
index 000000000..e4aa13ebd
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/command_contexts/res/first-page.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <meta charset="utf-8" />
+ <title>First Page</title>
+</head>
+<body>
+ <a href="./other-page.html" target="_blank" id="open_new_window">Open new window</a>
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/command_contexts/res/other-page.html b/testing/web-platform/tests/old-tests/webdriver/command_contexts/res/other-page.html
new file mode 100644
index 000000000..4bb487452
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/command_contexts/res/other-page.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <meta charset="utf-8" />
+ <title>Other Page</title>
+</head>
+<body>
+ <a href="./other-page.html" target="_blank" id="open_new_window">Open new window</a>
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/command_contexts/window_handle_test.py b/testing/web-platform/tests/old-tests/webdriver/command_contexts/window_handle_test.py
new file mode 100644
index 000000000..6d8e569f0
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/command_contexts/window_handle_test.py
@@ -0,0 +1,33 @@
+import os
+import sys
+import random
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+repo_root = os.path.abspath(os.path.join(__file__, "../../.."))
+sys.path.insert(1, os.path.join(repo_root, "tools", "webdriver"))
+from webdriver import exceptions
+
+
+class WindowHandleTest(base_test.WebDriverBaseTest):
+ def setUp(self):
+ self.driver.get(self.webserver.where_is("command_contexts/res/first-page.html"))
+
+ def test_window_handle_is_not_current(self):
+ handle = self.driver.get_window_handle()
+ self.assertNotEquals(handle, "current")
+
+ def test_window_handles_are_unique(self):
+ number_of_windows = 20
+ new_window_button = self.driver.find_element_by_id("open_new_window")
+ for i in range(0, number_of_windows):
+ new_window_button.click()
+
+ handles = self.driver.get_window_handles()
+ if len(handles) > len(set(handles)):
+ self.fail('At least one window handle was repeated')
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/command_contexts/window_size_test.py b/testing/web-platform/tests/old-tests/webdriver/command_contexts/window_size_test.py
new file mode 100644
index 000000000..955e9fea0
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/command_contexts/window_size_test.py
@@ -0,0 +1,35 @@
+import os
+import sys
+import random
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+repo_root = os.path.abspath(os.path.join(__file__, "../../.."))
+sys.path.insert(1, os.path.join(repo_root, "tools", "webdriver"))
+from webdriver import exceptions
+
+class WindowSizeTest(base_test.WebDriverBaseTest):
+
+ def test_set_and_get_window_size(self):
+ self.driver.get(self.webserver.where_is("command_contexts/res/first-page.html"))
+
+ initial_dimensions = self.driver.get_window_size()
+
+ new_dimensions = {
+ "height": initial_dimensions["height"] - 100,
+ "width": initial_dimensions["width"] - 100}
+
+ try:
+ self.driver.set_window_size(new_dimensions["height"], new_dimensions["width"])
+
+ actual_dimensions = self.driver.get_window_size()
+
+ self.assertDictEqual(new_dimensions, actual_dimensions)
+ except exceptions.UnsupportedOperationException:
+ pass
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/cookie/__init__.py b/testing/web-platform/tests/old-tests/webdriver/cookie/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/cookie/__init__.py
diff --git a/testing/web-platform/tests/old-tests/webdriver/cookie/cookie_test.py b/testing/web-platform/tests/old-tests/webdriver/cookie/cookie_test.py
new file mode 100644
index 000000000..e57d46713
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/cookie/cookie_test.py
@@ -0,0 +1,57 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+from selenium.common import exceptions
+
+
+class CookieTest(base_test.WebDriverBaseTest):
+ def setUp(self):
+ self.driver.get(self.webserver.where_is("cookie/res/cookie_container.html"))
+
+ def test_can_create_a_well_formed_cookie( self ):
+ self.driver.add_cookie({'name': 'foo', 'value': 'bar'})
+
+ def test_cookies_should_allow_secure_to_be_set( self ):
+ name = 'foo'
+ self.driver.add_cookie({'name': name,
+ 'value': 'bar',
+ 'path': '/',
+ 'secure': (True)})
+ self.assertTrue(self.driver.get_cookie(name)[0]['secure'])
+
+ def test_secure_defaults_to_false( self ):
+ name = 'foo'
+ value = 'bar'
+
+ self.driver.add_cookie({ 'name': name,
+ 'value': value})
+
+ self.assertFalse(self.driver.get_cookie(name)[0]['secure'])
+
+ def test_should_throw_an_exception_when_semicolon_exists_in_the_cookie_attribute(self):
+ invalid_name = 'foo;bar'
+ try:
+ self.driver.add_cookie({'name': invalid_name, 'value': 'foobar'})
+ self.fail( 'should have thrown exceptions.' )
+
+ except exceptions.UnableToSetCookieException:
+ pass
+ except exceptions.InvalidCookieDomainException:
+ pass
+
+ def test_should_throw_an_exception_the_name_is_null(self):
+ try:
+ self.driver.add_cookie({'name': None, 'value': 'foobar'})
+ self.fail( 'should have thrown exceptions.' )
+
+ except exceptions.UnableToSetCookieException:
+ pass
+ except exceptions.InvalidCookieDomainException:
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/cookie/res/cookie_container.html b/testing/web-platform/tests/old-tests/webdriver/cookie/res/cookie_container.html
new file mode 100644
index 000000000..bb6b209bb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/cookie/res/cookie_container.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Cookie Container</title>
+<body>
+</body>
diff --git a/testing/web-platform/tests/old-tests/webdriver/ecmascript/ecmascript_test.py b/testing/web-platform/tests/old-tests/webdriver/ecmascript/ecmascript_test.py
new file mode 100644
index 000000000..89764bf68
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/ecmascript/ecmascript_test.py
@@ -0,0 +1,17 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+
+class EcmasScriptTest(base_test.WebDriverBaseTest):
+ def test_that_ecmascript_returns_document_title(self):
+ self.driver.get(self.webserver.where_is("ecmascript/res/ecmascript_test.html"))
+ result = self.driver.execute_script("return document.title;");
+ self.assertEquals("ecmascript test", result);
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/ecmascript/res/ecmascript_test.html b/testing/web-platform/tests/old-tests/webdriver/ecmascript/res/ecmascript_test.html
new file mode 100644
index 000000000..346e2ef75
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/ecmascript/res/ecmascript_test.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<title>ecmascript test</title> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_location/__init__.py b/testing/web-platform/tests/old-tests/webdriver/element_location/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_location/__init__.py
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_location/element_location_test.py b/testing/web-platform/tests/old-tests/webdriver/element_location/element_location_test.py
new file mode 100644
index 000000000..aff548ea5
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_location/element_location_test.py
@@ -0,0 +1,60 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+class ElementLocationTest(base_test.WebDriverBaseTest):
+ def test_find_element_by_name(self):
+ self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
+ e = self.driver.find_element_by_name("name")
+ self.assertEquals("name", e.text)
+
+ def test_find_element_by_css_selector(self):
+ self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
+ e = self.driver.find_element_by_css_selector("#id")
+ self.assertEquals("id", e.text)
+
+ def test_find_element_by_link_text(self):
+ self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
+ e = self.driver.find_element_by_link_text("link text")
+ self.assertEquals("link text", e.text)
+
+ def test_find_element_by_partial_link_text(self):
+ self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
+ e = self.driver.find_element_by_partial_link_text("link tex")
+ self.assertEquals("link text", e.text)
+
+ def test_find_element_by_xpath(self):
+ self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
+ e = self.driver.find_element_by_xpath("//*[@id='id']")
+ self.assertEquals("id", e.text)
+
+ def test_find_elements_by_name(self):
+ self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
+ e = self.driver.find_elements_by_name("name")
+ self.assertEquals("name", e[0].text)
+
+ def test_find_elements_by_css_selector(self):
+ self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
+ e = self.driver.find_elements_by_css_selector("#id")
+ self.assertEquals("id", e[0].text)
+
+ def test_find_elements_by_link_text(self):
+ self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
+ e = self.driver.find_elements_by_link_text("link text")
+ self.assertEquals("link text", e[0].text)
+
+ def test_find_elements_by_partial_link_text(self):
+ self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
+ e = self.driver.find_elements_by_partial_link_text("link tex")
+ self.assertEquals("link text", e[0].text)
+
+ def test_find_elements_by_xpath(self):
+ self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
+ e = self.driver.find_elements_by_xpath("//*[@id='id']")
+ self.assertEquals("id", e[0].text)
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_location/res/elements.html b/testing/web-platform/tests/old-tests/webdriver/element_location/res/elements.html
new file mode 100644
index 000000000..45b7c2370
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_location/res/elements.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+
+<title>Element location</title>
+
+<body>
+ <div id="id">id</div>
+ <div id="name" name="name">name</div>
+ <a id="link">link text</a>
+</body>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/__init__.py b/testing/web-platform/tests/old-tests/webdriver/element_state/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/__init__.py
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/method_test.py b/testing/web-platform/tests/old-tests/webdriver/element_state/method_test.py
new file mode 100644
index 000000000..85b240c7a
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/method_test.py
@@ -0,0 +1,107 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+
+class GetElementAttributeTest(base_test.WebDriverBaseTest):
+ def test_get_element_attribute(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-with-id-attribute.html"))
+ el = self.driver.find_element_by_css_selector("div")
+ self.assertEqual("myId", el.get_attribute("id"))
+
+ def test_style_attribute(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-with-style-attribute.html"))
+ el = self.driver.find_element_by_css_selector("div")
+ expected_style = """
+ font-family: \"Gill Sans Extrabold\",Helvetica,sans-serif;
+ line-height: 1.2; font-weight: bold;
+ """
+ self.assertEqual(expected_style, el.get_attribute("style"))
+
+ def test_color_serialization_of_style_attribute(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-with-color-style-attribute.html"))
+ el = self.driver.find_element_by_css_selector("div")
+ self.assertEqual("color: rgba(255, 0, 0, 1.0);", el.get_attribute("style"))
+
+ def test_true_if_boolean_attribute_present(self):
+ self.driver.get(self.webserver.where_is("element_state/res/input-with-checked-attribute.html"))
+ el = self.driver.find_element_by_css_selector("input")
+ self.assertEqual("true", el.get_attribute("checked"))
+
+ def test_none_if_boolean_attribute_absent(self):
+ self.driver.get(self.webserver.where_is("element_state/res/input-without-checked-attribute.html"))
+ el = self.driver.find_element_by_css_selector("input")
+ self.assertIsNone(el.get_attribute("checked"))
+
+ def test_option_with_attribute_value(self):
+ self.driver.get(self.webserver.where_is("element_state/res/option-with-value-attribute.html"))
+ el = self.driver.find_element_by_css_selector("option")
+ self.assertEqual("value1", el.get_attribute("value"))
+
+ def test_option_without_value_attribute(self):
+ self.driver.get(self.webserver.where_is("element_state/res/option-without-value-attribute.html"))
+ el = self.driver.find_element_by_css_selector("option")
+ self.assertEqual("Value 1", el.get_attribute("value"))
+
+ def test_a_href_attribute(self):
+ self.driver.get(self.webserver.where_is("element_state/res/a-with-href-attribute.html"))
+ el = self.driver.find_element_by_css_selector("a")
+ self.assertEqual("http://web-platform.test:8000/path#fragment", el.get_attribute("href"))
+
+ def test_img_src_attribute(self):
+ self.driver.get(self.webserver.where_is("element_state/res/img-with-src-attribute.html"))
+ el = self.driver.find_element_by_css_selector("img")
+ self.assertEqual("http://web-platform.test:8000/images/blue.png", el.get_attribute("src"))
+
+ def test_custom_attribute(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-with-custom-attribute.html"))
+ el = self.driver.find_element_by_css_selector("div")
+ self.assertEqual("attribute value", el.get_attribute("webdriver-custom-attribute"))
+
+ def test_attribute_not_present(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-without-attribute.html"))
+ el = self.driver.find_element_by_css_selector("div")
+ self.assertIsNone(el.get_attribute("class"))
+
+ def test_find_attribute_with_special_characters(self):
+ self.driver.get(self.webserver.where_is("element_state/res/get-element-attribute-extended.html"))
+ element = self.driver.find_element_by_id("id_special_char_attribute_name")
+ attribute = element.get_attribute("*")
+ self.assertEquals("special_char_attribute_name", attribute)
+
+ def test_find_attribute_with_special_char_name_and_value(self):
+ self.driver.get(self.webserver.where_is("element_state/res/get-element-attribute-extended.html"))
+ element = self.driver.find_element_by_id("id_special_char_attribute_name_and_value")
+ attribute = element.get_attribute("@")
+ self.assertEquals("(", attribute)
+
+ def test_find_attribute_with_numeric_name(self):
+ self.driver.get(self.webserver.where_is("element_state/res/get-element-attribute-extended.html"))
+ element = self.driver.find_element_by_id("id_attribute_name_numeric")
+ attribute = element.get_attribute("1")
+ self.assertEquals("numeric attribute name", attribute)
+
+ def test_find_attribute_with_numeric_value(self):
+ self.driver.get(self.webserver.where_is("element_state/res/get-element-attribute-extended.html"))
+ element = self.driver.find_element_by_id("id_attribute_value_numeric")
+ attribute = element.get_attribute("one")
+ self.assertEquals("2", attribute)
+
+ def test_find_attribute_with_negative_numeric_name(self):
+ self.driver.get(self.webserver.where_is("element_state/res/get-element-attribute-extended.html"))
+ element = self.driver.find_element_by_id("id_attribute_negative_numeric_name")
+ attribute = element.get_attribute("-5")
+ self.assertEquals("attribute name is -5", attribute)
+
+ def test_find_attribute_with_negative_numeric_value(self):
+ self.driver.get(self.webserver.where_is("element_state/res/get-element-attribute-extended.html"))
+ element = self.driver.find_element_by_id("id_attribute_negative_numeric_value")
+ attribute = element.get_attribute("negative_numeric_value")
+ self.assertEquals("-9", attribute)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/properties.py b/testing/web-platform/tests/old-tests/webdriver/element_state/properties.py
new file mode 100644
index 000000000..a76770085
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/properties.py
@@ -0,0 +1,17 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+
+class GetElementPropertiesTest(base_test.WebDriverBaseTest):
+ def test_get_element_text(self):
+ self.driver.get(self.webserver.where_is("element_state/res/elements_text.html"))
+ e = self.driver.find_element_by_name("name")
+ self.assertEquals("name", e.text)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/0x0-pixels.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/0x0-pixels.html
new file mode 100644
index 000000000..3b081ca09
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/0x0-pixels.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset='utf-8'>
+<title>0x0 pixel element</title>
+
+<style>
+div {
+ height: 0;
+ width: 0;
+}
+</style>
+
+<div>This element is not visible.</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/1x1-pixels.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/1x1-pixels.html
new file mode 100644
index 000000000..f9b2cbc3c
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/1x1-pixels.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset='utf-8'>
+<title>1x1 pixel element</title>
+
+<style>
+p {
+ height: 1px;
+ width: 1px;
+}
+</style>
+
+<p>This element is visible.</p>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/a-with-href-attribute.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/a-with-href-attribute.html
new file mode 100644
index 000000000..7722426a3
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/a-with-href-attribute.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>"a" element with not fully qualified url</title>
+
+<a href="//web-platform.test:8000/path#fragment">&nbsp;</a> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/absolute-children-ancestor-hidden-overflow.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/absolute-children-ancestor-hidden-overflow.html
new file mode 100644
index 000000000..fcf104414
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/absolute-children-ancestor-hidden-overflow.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Parent node visible with absolutely positioned children, where ancestor overflow is hidden</title>
+
+<style>
+ body {
+ overflow: hidden;
+ height: 0;
+ width: 0;
+ }
+ .child { position: absolute }
+</style>
+
+<div id=parent>
+ <div class=child>grated</div>
+ <div class=child>cheese</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/body_empty.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/body_empty.html
new file mode 100644
index 000000000..0f4dff691
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/body_empty.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>BODY element has no children. MUST be reported displayed</title>
+<body/>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/body_implicit.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/body_implicit.html
new file mode 100644
index 000000000..f45815380
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/body_implicit.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>BODY tag is omitted; BODY element MUST be reported displayed</title>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/body_overflow_hidden.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/body_overflow_hidden.html
new file mode 100644
index 000000000..1411ef37b
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/body_overflow_hidden.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>BODY element with style=overflow:hidden. MUST be reported displayed</title>
+<body style="overflow:hidden"/>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/body_visibility_hidden.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/body_visibility_hidden.html
new file mode 100644
index 000000000..ce4d41036
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/body_visibility_hidden.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>BODY element with style=visibility:hidden. MUST be reported displayed</title>
+<body style="visibility:hidden"/>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-block.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-block.html
new file mode 100644
index 000000000..0f31557e6
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-block.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset='utf-8'>
+<title>display: block;</title>
+
+<p>This element is visible.</p>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-child-link.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-child-link.html
new file mode 100644
index 000000000..88bdef6b5
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-child-link.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>display: none applies to child node links</title>
+
+<style>
+#parent { display: none }
+</style>
+
+<div id="parent">
+ <a id="child">hidden</a>
+</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-child-paragraph.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-child-paragraph.html
new file mode 100644
index 000000000..31ab16da4
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-child-paragraph.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>display: none applies to child node paragraphs</title>
+
+<style>
+#parent { display: none }
+</style>
+
+<div id="parent">
+ <p id="child">hidden</p>
+</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-child.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-child.html
new file mode 100644
index 000000000..b45ea0e5a
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-child.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>display: none applies to child nodes</title>
+
+<style>
+#parent { display: none }
+</style>
+
+<div id="parent">
+ <div id="child">Brie is good</div>
+</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-dynamic.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-dynamic.html
new file mode 100644
index 000000000..074f0b3c1
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-dynamic.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>display: none set dynamically</title>
+
+<p id="hidden">Should not be visible</span>
+
+<script>
+ var hidden = document.getElementById("hidden");
+ hidden.style.display = "none";
+</script>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-parent-presedence-visibility.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-parent-presedence-visibility.html
new file mode 100644
index 000000000..37ca02391
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-parent-presedence-visibility.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>display: none on parent takes presedence over visibility: visible on child node</title>
+
+<style>
+ #parent { display: none }
+ #child { visibility: visible }
+</style>
+
+<div id="parent">
+ <div id="child">
+ hidden
+ </div>
+</div>
+in \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-parent-presedence.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-parent-presedence.html
new file mode 100644
index 000000000..0f166d1e5
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none-parent-presedence.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>display: none on parent takes presedence</title>
+
+<style>
+ #parent { display: none }
+ #child { dipslay: block }
+</style>
+
+<div id="parent">
+ <div id="child">
+ hidden
+ </div>
+</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none.html
new file mode 100644
index 000000000..469fc934b
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/display-none.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset='utf-8'>
+<title>display: none;</title>
+
+<style>
+p {
+ display: none;
+}
+</style>
+
+<p>This element is not visible.</p>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-dynamically-moved-outside-viewport.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-dynamically-moved-outside-viewport.html
new file mode 100644
index 000000000..e31912bfd
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-dynamically-moved-outside-viewport.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element outside viewport</title>
+
+<style>
+ div { position: absolute }
+</style>
+
+<div>hidden</div>
+
+<script>
+ var el = document.getElementsByTagName("div")[0];
+ el.style.top = "-500px";
+ el.style.left = "-500px";
+</script>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-hidden-by-other-element.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-hidden-by-other-element.html
new file mode 100644
index 000000000..a2cf645a3
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-hidden-by-other-element.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element hidden by other element</title>
+
+<style>
+ div {
+ position: absolute;
+ height: 100px;
+ width: 100px;
+ }
+
+ #overlay {
+ background: blue;
+ }
+
+ #hidden { background: red }
+</style>
+
+<div id="hidden"></div>
+<div id="overlay"></div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-hidden-by-z-index.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-hidden-by-z-index.html
new file mode 100644
index 000000000..05e8eebeb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-hidden-by-z-index.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element hidden by z-index</title>
+
+<style>
+ * { position: relative }
+
+ #overlay,
+ #hidden {
+ height: 50px;
+ width: 50px;
+ }
+
+ #overlay {
+ background: blue;
+
+ z-index: 1;
+ }
+
+ #hidden {
+ background: red;
+ top: -50px;
+
+ z-index: -1;
+ }
+</style>
+
+<div id="overlay"></div>
+<div id="hidden"></div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-moved-behind-other-element-by-transform.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-moved-behind-other-element-by-transform.html
new file mode 100644
index 000000000..f91e729de
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-moved-behind-other-element-by-transform.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element moved behind other element by transform</title>
+
+<style>
+ * { position: relative }
+
+ #overlay {
+ height: 50px;
+ width: 50px;
+ background: blue;
+ z-index: 1;
+ }
+
+ #hidden {
+ height: 50px;
+ width: 50px;
+ background: red;
+ z-index: -1;
+
+ transform: translate(0, -50px);
+
+ /* fix your browsers god damnit */
+ -webkit-transform: translate(0, -50px);
+ -moz-transform: translate(0x, -50px);
+ }
+</style>
+
+<div id="overlay"></div>
+<div id="hidden"></div>
+
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-moved-outside-viewport-by-transform.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-moved-outside-viewport-by-transform.html
new file mode 100644
index 000000000..51f6ee89f
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-moved-outside-viewport-by-transform.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element moved outside viewpor by transform</title>
+
+<style>
+ div {
+ transform: translate(-200px, -200px);
+
+ /* fix your browsers god damnit */
+ -webkit-transform: translate(-200px, -200px);
+ -moz-transform: translate(-200px, -200px);
+ }
+</style>
+
+<div>Cheddar!</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-outside-viewport.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-outside-viewport.html
new file mode 100644
index 000000000..e3382ad09
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-outside-viewport.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element outside viewport</title>
+
+<style>
+ div {
+ position: absolute;
+ top: -500px;
+ left: -500px;
+ }
+</style>
+
+<div>hidden</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-partially-hidden-by-other-element.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-partially-hidden-by-other-element.html
new file mode 100644
index 000000000..3d0325928
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-partially-hidden-by-other-element.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element partially hidden by other element</title>
+
+<style>
+ div {
+ height: 100px;
+ width: 100px;
+ }
+
+ #partial {
+ background: yellow;
+ }
+
+ #other {
+ background: blue;
+ margin-top: -50px;
+ margin-left: 50px;
+ }
+</style>
+
+<div id="partial"></div>
+<div id="other"></div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-selected.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-selected.html
new file mode 100644
index 000000000..c2ad98924
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-selected.html
@@ -0,0 +1,89 @@
+<html>
+<body>
+<select>
+ <option id="selected-1">selected-1</option>
+</select>
+<select>
+ <option id="selected-2">selected-2</option>
+ <option id="unselected-1">unselected-1</option>
+</select>
+<select disabled>
+ <option id="unselected-2">unselected-2</option>
+ <option id="selected-3" selected>selected-3</option>
+ <option id="unselected-3">unselected-3</option>
+</select>
+<select>
+ <option id="unselected-4" checked>unselected-4</option>
+ <option id="unselected-5">unselected-5</option>
+ <option id="selected-4" selected>selected-4</option>
+</select>
+<select>
+ <option id="unselected-6" selected>unselected-6</option>
+ <option id="selected-5">selected-5</option>
+</select>
+<script>
+ document.getElementById("selected-5").selected = true;
+</script>
+<select multiple>
+ <option id="unselected-7">unselected-7</option>
+ <option id="unselected-8">unselected-8</option>
+</select>
+<select multiple>
+ <option id="selected-6" selected>selected-6</option>
+ <option id="unselected-9" selected>unselected-9</option>
+ <option id="selected-7">selected-7</option>
+</select>
+<script>
+ document.getElementById("unselected-9").selected = false;
+ document.getElementById("selected-7").selected = true;
+</script>
+
+<h1>Input Checkbox Elements</h1>
+<input type="checkbox" id="selected-8" />selected-8
+<script>
+ document.getElementById("selected-8").checked = true;
+</script>
+<input type="checkbox" id="selected-9" checked />selected-9
+<script>
+ document.getElementById("selected-9").indeterminate = true;
+</script>
+<input type="checkbox" id="unselected-10" />unselected-10
+<input type="checkbox" id="unselected-11" checked />unselected-11
+<script>
+ document.getElementById("unselected-11").checked = false;
+</script>
+<input type="checkbox" id="unselected-12" />unselected-12
+<script>
+ document.getElementById("unselected-12").indeterminate = true;
+</script>
+<input type="checkbox" id="unselected-13" selected />unselected-13
+<input type="checkbox" id="selected-10" checked />selected-10
+
+<h1>Input Radio Elements</h1>
+<br>Group 1:<br>
+<input type="radio" name="group1" id="selected-11" checked />selected-11
+<br>Group 2:<br>
+<input type="radio" name="group2" id="selected-12" />selected-12
+<script>
+ document.getElementById("selected-12").checked = true;
+</script>
+<br>Group 3:<br>
+<input type="radio" name="group3" id="unselected-14" />unselected-14
+<input type="radio" name="group3" id="selected-13" checked />selected-13
+<br>Group 4:<br>
+<input type="radio" name="group4" id="unselected-15" checked />unselected-15
+<input type="radio" name="group4" id="selected-14" checked />selected-14
+<br>Group 5:<br>
+<input type="radio" name="group5" id="unselected-16" />unselected-16
+<input type="radio" name="group5" id="unselected-17" checked />unselected-17
+<script>
+ document.getElementById("unselected-17").checked = false;
+</script>
+<br>Group 6<br>
+<input type="radio" name="group6" id="selected-15" />selected-15
+<input type="radio" name="group6" id="unselected-18" checked />unselected-18
+<script>
+ document.getElementById("selected-15").checked = true;
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-color-style-attribute.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-color-style-attribute.html
new file mode 100644
index 000000000..acf2fc095
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-color-style-attribute.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element with color style attribute</title>
+
+<div style="color: red">&nbsp;</div> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-custom-attribute.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-custom-attribute.html
new file mode 100644
index 000000000..8f84b97ff
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-custom-attribute.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element with custom attribute</title>
+
+<div webdriver-custom-attribute="attribute value">&nbsp;</div> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-id-attribute.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-id-attribute.html
new file mode 100644
index 000000000..7512344f5
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-id-attribute.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element with id attribute</title>
+
+<div id="myId">&nbsp;</div> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-same-color-as-background.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-same-color-as-background.html
new file mode 100644
index 000000000..aaea9a935
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-same-color-as-background.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element with same color as background</title>
+
+<style>
+ body, div { background: white }
+ div { width: 50px; height: 50px; }
+</style>
+
+<div>&nbsp;</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-same-color-as-parent-background.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-same-color-as-parent-background.html
new file mode 100644
index 000000000..80a4118df
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-same-color-as-parent-background.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element with same color as background</title>
+
+<style>
+ #overlay,
+ #hidden {
+ background: blue;
+ width: 50px; height: 50px;
+ }
+
+ #hidden {
+ margin-top: -50px;
+ }
+</style>
+
+<div id="overlay"></div>
+<div id="hidden"></div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-style-attribute.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-style-attribute.html
new file mode 100644
index 000000000..b163a751a
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-with-style-attribute.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element with style attribute</title>
+
+<div style='font-family: "Gill Sans Extrabold", Helvetica, sans-serif; line-height: 1.2; font-weight:bold'>&nbsp;</div> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-without-attribute.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-without-attribute.html
new file mode 100644
index 000000000..b03d4545b
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/element-without-attribute.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Element without attribute</title>
+
+<div>&nbsp;</div> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/elements_text.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/elements_text.html
new file mode 100644
index 000000000..45b7c2370
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/elements_text.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+
+<title>Element location</title>
+
+<body>
+ <div id="id">id</div>
+ <div id="name" name="name">name</div>
+ <a id="link">link text</a>
+</body>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/get-element-attribute-extended.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/get-element-attribute-extended.html
new file mode 100644
index 000000000..1fff60f03
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/get-element-attribute-extended.html
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Get Element Attribute Extended</title>
+
+<span id=my_id_with_a_relatively_long_name_test class=my_id_with_a_relatively_long_name_test_class>Span</span>
+<span id=my-id>Span</span>
+
+<div class=container>
+ <div id=div1 name=div-name>
+ <div id=div1-1_div1>
+ <h1 id=h1_div1.1_div1 class=span-class>h1 element, id:h1_div1.1_div1</h1>
+ </div>
+ </div>
+
+ <div class=div-depth-2>
+ <div class=div-depth-3>
+ <div class=div-depth-4>
+ <span id=my_id_with_a_relatively_long_name_test class=my_id_with_a_relatively_long_name_test_class>Span</span>
+ </div>
+ </div>
+ </div>
+
+ <div>
+ <a>anchor text 123</a>
+ <a>anchor text 123</a>
+
+ <select>
+ <option id="opt-1" style="font-size: 11px; display: block;" selected>My Option 1</option>
+ <option class="opt" >My Option 2</option>
+ <option value="one">My Option 3</option>
+ </select>
+ </div>
+
+ <a id="no-vi-1" class="cant-see" style="display:none">no visibility</a><br/>
+ <a id="no-vi-2" style="display:none">no visibility</a><br/>
+ <a id="no-vi-2" style="display:none">no visibility</a><br/>
+
+ <span id=my_id_with_a_relatively_long_name_test2>Span</span>
+ <span id="id.period">Span</span>
+</div>
+
+<div id=id_attribute_accesskey accesskey=nothing></div>
+
+<!-- Multiple elements with same class -->
+
+<div id=id_div_multiple_elements_same_class_nested_depth_0 class=multiple_elements_same_class_nested>
+ <div id=id_multiple_elements_same_class_nested_div_depth_1 class=multiple_elements_same_class_nested>
+ <div id=id_multiple_elements_same_class_nested_div_depth_2 class=multiple_elements_same_class_nested>
+ </div>
+ </div>
+</div>
+
+<!-- Attribute name with special characters -->
+<div id=id_special_char_attribute_name *=special_char_attribute_name></div>
+
+<!-- Attribute value with special characters -->
+<div id=id_special_char_attribute_value name="*"></div>
+
+<!-- Attribute value and name with special characters -->
+<div id=id_special_char_attribute_name_and_value @="("></div>
+
+<!-- Attribute name is numeric. -->
+<div id"id_attribute_name_numeric 1="numeric attribute name"></div>
+
+<!-- Attribute value is numeric. -->
+<div id=id_attribute_value_numeric one=2></div>
+
+<!-- Attribute name is negative numeric. -->
+<div id=id_attribute_negative_numeric_name -5="attribute name is -5"></div>
+
+<!-- Attribute value is negative numeric. -->
+<div id=id_attribute_negative_numeric_value negative_numeric_value=-9></div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/hidden-input-type-checkbox-untogglable.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/hidden-input-type-checkbox-untogglable.html
new file mode 100644
index 000000000..7e7c2e238
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/hidden-input-type-checkbox-untogglable.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Hidden INPUT @type="checkbox" is untogglable</title>
+
+<style>
+ input { display: none }
+</style>
+
+<input type="checkbox" />
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/hidden-input-type-text-writing.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/hidden-input-type-text-writing.html
new file mode 100644
index 000000000..a1db85009
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/hidden-input-type-text-writing.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Typing in hidden input is impossible</title>
+
+<style>
+ input { display: none }
+</style>
+
+<input type="text" />
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/hidden.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/hidden.html
new file mode 100644
index 000000000..0e8097e97
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/hidden.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<div id='singleHidden' hidden>This will not be visible</div>
+<div id='parent' hidden>
+ <div id='child'>My parent is hidden so you can't see me</div>
+</div> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/img-with-src-attribute.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/img-with-src-attribute.html
new file mode 100644
index 000000000..057bb9bf5
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/img-with-src-attribute.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>"img" element with not fully qualified url</title>
+
+<img src="//web-platform.test:8000/images/blue.png">&nbsp;</a> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-morphs-into-hidden.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-morphs-into-hidden.html
new file mode 100644
index 000000000..98b954855
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-morphs-into-hidden.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>INPUT motphs into @type="hidden"</title>
+
+<input />
+
+<script>
+ var input = document.getElementsByTagName("input")[0];
+ input.type = "hidden";
+</script>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-type-hidden-unclickable.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-type-hidden-unclickable.html
new file mode 100644
index 000000000..b06822b10
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-type-hidden-unclickable.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>INPUT @type="hidden" is unclickable</title>
+
+<input type="hidden" />
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-type-hidden.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-type-hidden.html
new file mode 100644
index 000000000..b7195709d
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-type-hidden.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>INPUT @type="hidden" are always hidden</title>
+
+<input type="hidden" />
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-with-checked-attribute.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-with-checked-attribute.html
new file mode 100644
index 000000000..d7aad5ea5
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-with-checked-attribute.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Input with checked attribute</title>
+
+<input type=checkbox checked="false">&nbsp;</input> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-without-checked-attribute.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-without-checked-attribute.html
new file mode 100644
index 000000000..9f1d5ad35
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/input-without-checked-attribute.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Input without checked attribute</title>
+
+<input type=checkbox>&nbsp;</input> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/option-with-value-attribute.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/option-with-value-attribute.html
new file mode 100644
index 000000000..5ef08c405
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/option-with-value-attribute.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Option with value attribute</title>
+
+<select>
+ <option value="value1">Value 1</option>
+</select> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/option-without-value-attribute.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/option-without-value-attribute.html
new file mode 100644
index 000000000..5f6087ddd
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/option-without-value-attribute.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Option without value attribute</title>
+
+<select>
+ <option>Value 1</option>
+</select> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/text-with-matching-color-and-background.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/text-with-matching-color-and-background.html
new file mode 100644
index 000000000..d6591ef04
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/text-with-matching-color-and-background.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Text with matching color and background</title>
+
+<style>
+ p {
+ background: blue;
+ color: blue;
+ }
+</style>
+
+<p>
+ This on the other hand, should be visible
+</p>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/text-with-same-color-as-background.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/text-with-same-color-as-background.html
new file mode 100644
index 000000000..e6290d576
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/text-with-same-color-as-background.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Text with same color as background</title>
+
+<style>
+ body { background: white }
+ p { color: white }
+</style>
+
+<p>
+ Shouldn't be visible.
+</p>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/text-with-same-color-as-parent-background.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/text-with-same-color-as-parent-background.html
new file mode 100644
index 000000000..f7480f509
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/text-with-same-color-as-parent-background.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Text with same color as parent background</title>
+
+<style>
+ #parent { background: gray }
+ p { color: gray }
+</style>
+
+<div id="parent">
+ <p>
+ Should not be visible
+ </p>
+</div>g
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child-link.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child-link.html
new file mode 100644
index 000000000..638c3c9ee
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child-link.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>visibility: hidden applies to child node of type A</title>
+
+<style>
+#parent { visibility: hidden }
+</style>
+
+<div id="parent">
+ <a id="child" href="#">Brie is good</a>
+</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child-paragraph.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child-paragraph.html
new file mode 100644
index 000000000..8f703ba54
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child-paragraph.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>visibility: hidden applies to child nodes of type P</title>
+
+<style>
+#parent { visibility: hidden }
+</style>
+
+<div id="parent">
+ <p id="child">Brie is good</p>
+</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child-presedence.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child-presedence.html
new file mode 100644
index 000000000..adf679c8a
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child-presedence.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>visibility: visible on child node takes presedence</title>
+
+<style>
+#parent { visibility: hidden }
+#child { visibility: visible }
+</style>
+
+<div id="parent">
+ <div id="child">Brie is good</div>
+</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child.html
new file mode 100644
index 000000000..5464025fa
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-child.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>visibility: hidden applies to child nodes</title>
+
+<style>
+#parent { visibility: hidden }
+</style>
+
+<div id="parent">
+ <div id="child">Brie is good</div>
+</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-hidden.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-hidden.html
new file mode 100644
index 000000000..24e89499f
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-hidden.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset='utf-8'>
+<title>visibility: hidden;</title>
+
+<style>
+p {
+ visibility: hidden;
+}
+</style>
+
+<p>This element is not visible.</p>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-visible.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-visible.html
new file mode 100644
index 000000000..e0c090217
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/visibility-visible.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset='utf-8'>
+<title>visibility: visible;</title>
+
+<p>This element is visible.</p>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-auto-y-hidden.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-auto-y-hidden.html
new file mode 100644
index 000000000..e9ce24c73
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-auto-y-hidden.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Page with overflow</title>
+ <style>
+ #over {
+ width:400px;
+ height: 300px;
+ overflow-x: auto;
+ overflow-y: hidden;
+ }
+ </style>
+</head>
+<body>
+ <div id="over">
+ <div style="width: 5000px;">
+ <div style="width: 100%; text-align: right;" ><a href="#" id="right" onclick="document.getElementById('right-clicked').textContent='ok'">Click right</a></div>
+ </div>
+ <div style="height: 5000px; width: 5000px;">
+ Right clicked: <span id="right-clicked"></span></br>
+ Bottom clicked: <span id="bottom-clicked"></span></br>
+ Bottom-right clicked: <span id="bottom-right-clicked"></span></br>
+ </div>
+ <div style="width: 5000px;">
+ <div style="width: 100%; text-align: right;" ><a href="#" id="bottom-right" onclick="document.getElementById('bottom-right-clicked').textContent='ok'">Click bottom-right</a></div>
+ </div>
+ <a href="#" id="bottom" onclick="document.getElementById('bottom-clicked').textContent='ok'">Click bottom</a>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-hidden-y-auto.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-hidden-y-auto.html
new file mode 100644
index 000000000..22b5049ff
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-hidden-y-auto.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Page with overflow</title>
+ <style>
+ #over {
+ width:400px;
+ height: 300px;
+ overflow-x: hidden;
+ overflow-y: auto;
+ }
+ </style>
+</head>
+<body>
+ <div id="over">
+ <div style="width: 5000px;">
+ <div style="width: 100%; text-align: right;" ><a href="#" id="right" onclick="document.getElementById('right-clicked').textContent='ok'">Click right</a></div>
+ </div>
+ <div style="height: 5000px; width: 5000px;">
+ Right clicked: <span id="right-clicked"></span></br>
+ Bottom clicked: <span id="bottom-clicked"></span></br>
+ Bottom-right clicked: <span id="bottom-right-clicked"></span></br>
+ </div>
+ <div style="width: 5000px;">
+ <div style="width: 100%; text-align: right;" ><a href="#" id="bottom-right" onclick="document.getElementById('bottom-right-clicked').textContent='ok'">Click bottom-right</a></div>
+ </div>
+ <a href="#" id="bottom" onclick="document.getElementById('bottom-clicked').textContent='ok'">Click bottom</a>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-hidden-y-hidden.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-hidden-y-hidden.html
new file mode 100644
index 000000000..c26b48aea
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-hidden-y-hidden.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Page with overflow</title>
+ <style>
+ #over {
+ width:400px;
+ height: 300px;
+ overflow-x: hidden;
+ overflow-y: hidden;
+ }
+ </style>
+</head>
+<body>
+ <div id="over">
+ <div style="width: 5000px;">
+ <div style="width: 100%; text-align: right;" ><a href="#" id="right" onclick="document.getElementById('right-clicked').textContent='ok'">Click right</a></div>
+ </div>
+ <div style="height: 5000px; width: 5000px;">
+ Right clicked: <span id="right-clicked"></span></br>
+ Bottom clicked: <span id="bottom-clicked"></span></br>
+ Bottom-right clicked: <span id="bottom-right-clicked"></span></br>
+ </div>
+ <div style="width: 5000px;">
+ <div style="width: 100%; text-align: right;" ><a href="#" id="bottom-right" onclick="document.getElementById('bottom-right-clicked').textContent='ok'">Click bottom-right</a></div>
+ </div>
+ <a href="#" id="bottom" onclick="document.getElementById('bottom-clicked').textContent='ok'">Click bottom</a>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-hidden-y-scroll.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-hidden-y-scroll.html
new file mode 100644
index 000000000..b98b79a7e
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-hidden-y-scroll.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Page with overflow</title>
+ <style>
+ #over {
+ width:400px;
+ height: 300px;
+ overflow-x: hidden;
+ overflow-y: scroll;
+ }
+ </style>
+</head>
+<body>
+ <div id="over">
+ <div style="width: 5000px;">
+ <div style="width: 100%; text-align: right;" ><a href="#" id="right" onclick="document.getElementById('right-clicked').textContent='ok'">Click right</a></div>
+ </div>
+ <div style="height: 5000px; width: 5000px;">
+ Right clicked: <span id="right-clicked"></span></br>
+ Bottom clicked: <span id="bottom-clicked"></span></br>
+ Bottom-right clicked: <span id="bottom-right-clicked"></span></br>
+ </div>
+ <div style="width: 5000px;">
+ <div style="width: 100%; text-align: right;" ><a href="#" id="bottom-right" onclick="document.getElementById('bottom-right-clicked').textContent='ok'">Click bottom-right</a></div>
+ </div>
+ <a href="#" id="bottom" onclick="document.getElementById('bottom-clicked').textContent='ok'">Click bottom</a>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-scroll-y-hidden.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-scroll-y-hidden.html
new file mode 100644
index 000000000..9348681ac
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/x-scroll-y-hidden.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Page with overflow</title>
+ <style>
+ #over {
+ width:400px;
+ height: 300px;
+ overflow-x: scroll;
+ overflow-y: hidden;
+ }
+ </style>
+</head>
+<body>
+ <div id="over">
+ <div style="width: 5000px;">
+ <div style="width: 100%; text-align: right;" ><a href="#" id="right" onclick="document.getElementById('right-clicked').textContent='ok'">Click right</a></div>
+ </div>
+ <div style="height: 5000px; width: 5000px;">
+ Right clicked: <span id="right-clicked"></span></br>
+ Bottom clicked: <span id="bottom-clicked"></span></br>
+ Bottom-right clicked: <span id="bottom-right-clicked"></span></br>
+ </div>
+ <div style="width: 5000px;">
+ <div style="width: 100%; text-align: right;" ><a href="#" id="bottom-right" onclick="document.getElementById('bottom-right-clicked').textContent='ok'">Click bottom-right</a></div>
+ </div>
+ <a href="#" id="bottom" onclick="document.getElementById('bottom-clicked').textContent='ok'">Click bottom</a>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/res/zero-sized-element-with-sizable-decendant.html b/testing/web-platform/tests/old-tests/webdriver/element_state/res/zero-sized-element-with-sizable-decendant.html
new file mode 100644
index 000000000..f7e37f855
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/res/zero-sized-element-with-sizable-decendant.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Zero sized element with sizable decendant</title>
+
+<style>
+ #parent { width: 0; height: 0; }
+ #child { width: 100; height: 100; background-color: blue; }
+</style>
+
+<div id="parent">
+ <div id="child">
+ &nbsp;
+ </div>
+</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/selected_test.py b/testing/web-platform/tests/old-tests/webdriver/element_state/selected_test.py
new file mode 100644
index 000000000..9c80f29f6
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/selected_test.py
@@ -0,0 +1,210 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+
+class GetElementSelectedTest(base_test.WebDriverBaseTest):
+ def test_selected_1(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-1")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_2(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-2")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_3(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-3")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_4(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-4")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_5(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-5")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_6(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-6")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_7(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-7")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_8(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-8")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_9(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-9")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_10(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-10")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_11(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-11")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_12(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-12")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_13(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-13")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_14(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-14")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_selected_15(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("selected-15")
+
+ self.assertEquals(element.is_selected(), True)
+
+ def test_unselected_1(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-1")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_2(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-2")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_3(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-3")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_4(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-4")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_5(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-5")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_6(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-6")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_7(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-7")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_8(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-8")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_9(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-9")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_10(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-10")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_11(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-11")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_12(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-12")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_13(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-13")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_14(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-14")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_15(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-15")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_16(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-16")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_17(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-17")
+
+ self.assertEquals(element.is_selected(), False)
+
+ def test_unselected_18(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
+ element = self.driver.find_element_by_id("unselected-18")
+
+ self.assertEquals(element.is_selected(), False)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/element_state/visibility_test.py b/testing/web-platform/tests/old-tests/webdriver/element_state/visibility_test.py
new file mode 100644
index 000000000..58218a7ff
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/element_state/visibility_test.py
@@ -0,0 +1,324 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+from selenium.common import exceptions
+
+
+class NaturalNonVisibleElementsTest(base_test.WebDriverBaseTest):
+ def test_0x0_pixel_element_is_not_visible(self):
+ self.driver.get(self.webserver.where_is("element_state/res/0x0-pixels.html"))
+ el = self.driver.find_element_by_css_selector("div")
+ self.assertFalse(el.is_displayed())
+
+ def test_0x0_pixel_text_node_is_visible(self):
+ self.driver.get(self.webserver.where_is("element_state/res/0x0-pixels-text-node.html"))
+ el = self.driver.find_element_by_css_selector("p")
+ self.assertTrue(el.is_displayed())
+
+ def test_1x1_pixel_element(self):
+ self.driver.get(self.webserver.where_is("element_state/res/1x1-pixels.html"))
+ el = self.driver.find_element_by_css_selector("p")
+ self.assertTrue(el.is_displayed())
+
+ def test_zero_sized_element_is_shown_if_decendant_has_size(self):
+ self.driver.get(self.webserver.where_is("element_state/res/zero-sized-element-with-sizable-decendant.html"))
+ parent = self.driver.find_element_by_css_selector("#parent")
+ child = self.driver.find_element_by_css_selector("#child")
+
+ self.assertTrue(parent.is_displayed())
+ self.assertTrue(child.is_displayed())
+
+ def test_input_type_hidden_is_never_visible(self):
+ self.driver.get(self.webserver.where_is("element_state/res/input-type-hidden.html"))
+ input = self.driver.find_element_by_css_selector("input")
+ self.assertFalse(input.is_displayed())
+
+ def test_input_morphs_into_hidden(self):
+ self.driver.get(self.webserver.where_is("element_state/res/input-morphs-into-hidden.html"))
+ input = self.driver.find_element_by_css_selector("input")
+ self.assertFalse(input.is_displayed())
+
+ def test_parent_node_visible_when_all_children_are_absolutely_positioned_and_overflow_is_hidden(self):
+ pass
+
+ def test_parent_of_absolutely_positioned_elements_visible_where_ancestor_overflow_is_hidden(self):
+ """When a parent's ancestor hides any overflow, absolutely positioned child elements are
+ still visible. The parent container is also considered visible by webdriver for this
+ reason because it is interactable."""
+
+ self.driver.get(self.webserver.where_is("element_state/res/absolute-children-ancestor-hidden-overflow.html"))
+
+ children = self.driver.find_elements_by_css_selector(".child")
+ assert all(child.is_displayed() for child in children)
+
+ parent = self.driver.find_element_by_css_selector("#parent")
+ assert parent.is_displayed()
+
+ def test_element_hidden_by_overflow_x_is_not_visible(self):
+ # TODO(andreastt): This test should probably be split in three. Also it's making two
+ # assertions.
+ pages = ["element_state/res/x-hidden-y-hidden.html",
+ "element_state/res/x-hidden-y-scroll.html",
+ "element_state/res/x-hidden-y-auto.html"]
+
+ for page in pages:
+ self.driver.get(self.webserver.where_is(page))
+ right = self.driver.find_element_by_css_selector("#right")
+ bottom_right = self.driver.find_element_by_css_selector("#bottom-right")
+
+ self.assertFalse(right.is_displayed())
+ self.assertFalse(bottom_right.is_displayed())
+
+ def test_element_hidden_by_overflow_y_is_not_visible(self):
+ # TODO(andreastt): This test should probably be split in three. Also it's making two
+ # assertions.
+ pages = ["element_state/res/x-hidden-y-hidden.html",
+ "element_state/res/x-scroll-y-hidden.html",
+ "element_state/res/x-auto-y-hidden.html"]
+
+ for page in pages:
+ self.driver.get(self.webserver.where_is(page))
+ bottom = self.driver.find_element_by_css_selector("#bottom")
+ bottom_right = self.driver.find_element_by_css_selector("#bottom-right")
+
+ self.assertFalse(bottom.is_displayed())
+ self.assertFalse(bottom_right.is_displayed())
+
+ def test_parent_node_visible_when_all_children_are_absolutely_position_and_overflow_is_hidden(self):
+ pass
+
+ def test_element_scrollable_by_overflow_x_is_visible(self):
+ pass
+
+ def test_element_scrollable_by_overflow_y_is_visible(self):
+ pass
+
+ def test_element_scrollable_by_overflow_x_and_y_is_visible(self):
+ pass
+
+ def test_element_scrollable_by_overflow_y_is_visible(self):
+ pass
+
+ def test_element_outside_viewport(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-outside-viewport.html"))
+ hidden = self.driver.find_element_by_css_selector("div")
+ self.assertFalse(hidden.is_displayed())
+
+ def test_element_dynamically_moved_outside_viewport(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-dynamically-moved-outside-viewport.html"))
+ hidden = self.driver.find_element_by_css_selector("div")
+ self.assertFalse(hidden.is_displayed())
+
+ def test_element_hidden_by_other_element(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-hidden-by-other-element.html"))
+ overlay = self.driver.find_element_by_css_selector("#overlay")
+ hidden = self.driver.find_element_by_css_selector("#hidden")
+
+ self.assertTrue(overlay.is_displayed())
+ self.assertFalse(hidden.is_displayed())
+
+ def test_element_partially_hidden_by_other_element(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-partially-hidden-by-other-element.html"))
+ partial = self.driver.find_element_by_css_selector("#partial")
+ self.assertTrue(partial.is_displayed())
+
+ def test_element_hidden_by_z_index(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-hidden-by-z-index.html"))
+ overlay = self.driver.find_element_by_css_selector("#overlay")
+ hidden = self.driver.find_element_by_css_selector("#hidden")
+
+ self.assertTrue(overlay.is_displayed())
+ self.assertFalse(hidden.is_displayed())
+
+ def test_element_moved_outside_viewport_by_transform(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-moved-outside-viewport-by-transform.html"))
+ el = self.driver.find_element_by_css_selector("div")
+ self.assertFalse(el.is_displayed())
+
+ def test_element_moved_behind_other_element_by_transform(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-moved-behind-other-element-by-transform.html"))
+ overlay = self.driver.find_element_by_css_selector("#overlay")
+ hidden = self.driver.find_element_by_css_selector("#hidden")
+
+ self.assertTrue(overlay.is_displayed())
+ self.assertFalse(hidden.is_displayed())
+
+ def test_text_with_same_color_as_background(self):
+ self.driver.get(self.webserver.where_is("element_state/res/text-with-same-color-as-background.html"))
+ p = self.driver.find_element_by_css_selector("p")
+ self.assertFalse(p.is_displayed())
+
+ def test_text_with_same_color_as_parent_background(self):
+ self.driver.get(self.webserver.where_is("element_state/res/text-with-same-color-as-parent-background.html"))
+ p = self.driver.find_element_by_css_selector("p")
+ self.assertFalse(p.is_displayed())
+
+ def test_text_with_matching_color_and_background(self):
+ self.driver.get(self.webserver.where_is("element_state/res/text-with-matching-color-and-background.html"))
+ p = self.driver.find_element_by_css_selector("p")
+ self.assertTrue(p.is_displayed())
+
+ def test_element_with_same_color_as_background(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-with-same-color-as-background.html"))
+ el = self.driver.find_element_by_css_selector("div")
+ self.assertFalse(el.is_displayed())
+
+ def test_element_with_same_color_as_parent_background(self):
+ self.driver.get(self.webserver.where_is("element_state/res/element-with-same-color-as-parent-background.html"))
+ hidden = self.driver.find_element_by_css_selector("#hidden")
+ self.assertFalse(hidden.is_displayed())
+
+
+class BodyElementIsAlwaysDisplayedTest(base_test.WebDriverBaseTest):
+ def assert_body_is_displayed_on(self, page):
+ self.driver.get(self.webserver.where_is(page))
+ body = self.driver.find_element_by_css_selector("body")
+ assert body.is_displayed()
+
+ def test_implicit(self):
+ self.assert_body_is_displayed_on("element_state/res/body_implicit.html")
+
+ def test_empty(self):
+ self.assert_body_is_displayed_on("element_state/res/body_empty.html")
+
+ def test_visibility_hidden(self):
+ self.assert_body_is_displayed_on("element_state/res/body_visibility_hidden.html")
+
+ def test_overflow_hidden(self):
+ self.assert_body_is_displayed_on("element_state/res/body_overflow_hidden.html")
+
+
+class DisplayTest(base_test.WebDriverBaseTest):
+ def test_display_block(self):
+ self.driver.get(self.webserver.where_is("element_state/res/display-block.html"))
+ el = self.driver.find_element_by_css_selector("p")
+ self.assertTrue(el.is_displayed())
+
+ def test_display_none(self):
+ self.driver.get(self.webserver.where_is("element_state/res/display-none.html"))
+ el = self.driver.find_element_by_css_selector("p")
+ self.assertFalse(el.is_displayed())
+
+ def test_display_none_hides_child_node(self):
+ self.driver.get(self.webserver.where_is("element_state/res/display-none-child.html"))
+ parent = self.driver.find_element_by_css_selector("#parent")
+ child = self.driver.find_element_by_css_selector("#child")
+
+ self.assertFalse(parent.is_displayed())
+ self.assertFalse(child.is_displayed())
+
+ def test_display_none_hides_child_node_link(self):
+ self.driver.get(self.webserver.where_is("element_state/res/display-none-child-link.html"))
+ child = self.driver.find_element_by_css_selector("#child")
+ self.assertFalse(child.is_displayed())
+
+ def test_display_none_hides_child_node_paragraph(self):
+ self.driver.get(self.webserver.where_is("element_state/res/display-none-child-paragraph.html"))
+ child = self.driver.find_element_by_css_selector("#child")
+ self.assertFalse(child.is_displayed())
+
+ def test_display_none_on_parent_takes_presedence(self):
+ self.driver.get(self.webserver.where_is("element_state/res/display-none-parent-presedence.html"))
+ child = self.driver.find_element_by_css_selector("#child")
+ self.assertFalse(child.is_displayed())
+
+ def test_display_none_on_parent_takes_presedence_over_visibility_visible(self):
+ self.driver.get(self.webserver.where_is("element_state/res/display-none-parent-presedence-visibility.html"))
+ child = self.driver.find_element_by_css_selector("#child")
+ self.assertFalse(child.is_displayed())
+
+ def test_display_none_hidden_dynamically(self):
+ self.driver.get(self.webserver.where_is("element_state/res/display-none-dynamic.html"))
+ hidden = self.driver.find_element_by_css_selector("#hidden")
+ self.assertFalse(hidden.is_displayed())
+
+
+class VisibilityTest(base_test.WebDriverBaseTest):
+ def test_element_state_hidden(self):
+ self.driver.get(self.webserver.where_is("element_state/res/visibility-hidden.html"))
+ el = self.driver.find_element_by_css_selector("p")
+ self.assertFalse(el.is_displayed())
+
+ def test_element_state_visible(self):
+ self.driver.get(self.webserver.where_is("element_state/res/visibility-visible.html"))
+ el = self.driver.find_element_by_css_selector("p")
+ self.assertTrue(el.is_displayed())
+
+ def test_visibility_hidden_hides_child_node(self):
+ self.driver.get(self.webserver.where_is("element_state/res/visibility-child.html"))
+ parent = self.driver.find_element_by_css_selector("#parent")
+ child = self.driver.find_element_by_css_selector("#child")
+
+ self.assertFalse(parent.is_displayed())
+ self.assertFalse(child.is_displayed())
+
+ def test_visibility_hidden_hides_child_node_link(self):
+ self.driver.get(self.webserver.where_is("element_state/res/visibility-child-link.html"))
+ parent = self.driver.find_element_by_css_selector("#parent")
+ child = self.driver.find_element_by_css_selector("#child")
+
+ self.assertFalse(parent.is_displayed())
+ self.assertFalse(child.is_displayed())
+
+ def test_visibility_hidden_hides_child_node_paragraph(self):
+ self.driver.get(self.webserver.where_is("element_state/res/visibility-child-paragraph.html"))
+ parent = self.driver.find_element_by_css_selector("#parent")
+ child = self.driver.find_element_by_css_selector("#child")
+
+ self.assertFalse(parent.is_displayed())
+ self.assertFalse(child.is_displayed())
+
+ def test_visibility_hidden_on_child_takes_precedence(self):
+ self.driver.get(self.webserver.where_is("element_state/res/visibility-child-presedence.html"))
+ child = self.driver.find_element_by_css_selector("#child")
+ self.assertTrue(child.is_displayed())
+
+ def test_visibility_hidden_on_parent_takes_precedence_over_display_block(self):
+ pass
+
+ def test_visibility_hidden_set_dynamically(self):
+ pass
+
+ def test_should_show_element_not_visible_with_hidden_attribute(self):
+ self.driver.get(self.webserver.where_is("element_state/res/hidden.html"))
+ singleHidden = self.driver.find_element_by_css_selector('#singleHidden')
+ self.assertFalse(singleHidden.is_displayed())
+
+ def test_should_show_element_not_visible_when_parent_element_has_hidden_attribute(self):
+ self.driver.get(self.webserver.where_is("element_state/res/hidden.html"))
+ child = self.driver.find_element_by_css_selector('#child')
+ self.assertFalse(child.is_displayed())
+
+
+class VisibilityInteractionTest(base_test.WebDriverBaseTest):
+ def test_input_hidden_is_unclickable(self):
+ self.driver.get(self.webserver.where_is("element_state/res/input-type-hidden-unclickable.html"))
+ input = self.driver.find_element_by_css_selector("input")
+
+ with self.assertRaises(exceptions.ElementNotVisibleException):
+ input.click()
+
+ def test_hidden_input_checkbox_is_untogglable(self):
+ self.driver.get(self.webserver.where_is("element_state/res/hidden-input-type-checkbox-untogglable.html"))
+ checkbox = self.driver.find_element_by_css_selector("input")
+
+ with self.assertRaises(exceptions.ElementNotVisibleException):
+ checkbox.click()
+
+ def test_typing_in_hidden_input_is_impossible(self):
+ self.driver.get(self.webserver.where_is("element_state/res/hidden-input-type-text-writing.html"))
+ textfield = self.driver.find_element_by_css_selector("input")
+
+ with self.assertRaises(exceptions.ElementNotVisibleException):
+ textfield.send_keys("Koha is a popular Indian cheese")
+
+
+class OpacityTest(base_test.WebDriverBaseTest):
+ pass
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/javascript/__init__.py b/testing/web-platform/tests/old-tests/webdriver/javascript/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/javascript/__init__.py
diff --git a/testing/web-platform/tests/old-tests/webdriver/javascript/execute_script_test.py b/testing/web-platform/tests/old-tests/webdriver/javascript/execute_script_test.py
new file mode 100644
index 000000000..dd7cfca94
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/javascript/execute_script_test.py
@@ -0,0 +1,129 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+from selenium.webdriver.remote.webelement import WebElement
+
+
+class ExecuteScriptTest(base_test.WebDriverBaseTest):
+ def test_ecmascript_translates_null_return_to_none(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+ result = self.driver.execute_script("return null;")
+ self.assertIsNone(result)
+
+ def test_ecmascript_translates_undefined_return_to_none(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+ result = self.driver.execute_script("var undef; return undef;")
+ self.assertIsNone(result)
+
+ def test_can_return_numbers_from_scripts(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+ self.assertEquals(1, self.driver.execute_script("return 1;"))
+ self.assertEquals(3.14, self.driver.execute_script("return 3.14;"))
+
+ def test_can_return_strings_from_scripts(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+ self.assertEquals("hello, world!",
+ self.driver.execute_script("return 'hello, world!'"))
+
+ def test_can_return_booleans_from_scripts(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+ self.assertTrue(self.driver.execute_script("return true;"))
+ self.assertFalse(self.driver.execute_script("return false;"))
+
+ def test_can_return_an_array_of_primitives(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+
+ result = self.driver.execute_script("return [1, false, null, 3.14]")
+ self.assertListEqual([1, False, None, 3.14], result)
+
+ def test_can_return_nested_arrays(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+ result = self.driver.execute_script("return [[1, 2, [3]]]")
+
+ self.assertIsInstance(result, list)
+ self.assertEquals(1, len(result))
+
+ result = result[0]
+ self.assertListEqual([1, 2], result[:2])
+ self.assertListEqual([3], result[2])
+
+ def test_can_return_object_literals(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+
+ result = self.driver.execute_script("return {}")
+ self.assertDictEqual({}, result)
+
+ result = self.driver.execute_script("return {a: 1, b: false, c: null}")
+ self.assertDictEqual({
+ "a": 1,
+ "b": False,
+ "c": None
+ }, result)
+
+ def test_can_return_complex_object_literals(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+ result = self.driver.execute_script("return {a:{b: 'hello'}}")
+ self.assertIsInstance(result, dict)
+ self.assertIsInstance(result['a'], dict)
+ self.assertDictEqual({"b": "hello"}, result["a"])
+
+ def test_dom_element_return_value_is_translated_to_a_web_element(self):
+ self.driver.get(self.webserver.where_is(
+ "javascript/res/return_document_body.html"))
+
+ result = self.driver.execute_script("return document.body")
+ self.assertEquals(result.text, "Hello, world!")
+
+ def test_return_an_array_of_dom_elements(self):
+ self.driver.get(self.webserver.where_is(
+ "javascript/res/return_array_of_dom_elements.html"))
+
+ result = self.driver.execute_script(
+ "var nodes = document.getElementsByTagName('div');"
+ "return [nodes[0], nodes[1]]")
+
+ self.assertIsInstance(result, list)
+ self.assertEquals(2, len(result))
+ self.assertEquals("a", result[0].text)
+ self.assertEquals("b", result[1].text)
+
+ def test_node_list_return_value_is_translated_to_list_of_web_elements(self):
+ self.driver.get(self.webserver.where_is(
+ "javascript/res/return_array_of_dom_elements.html"))
+
+ result = self.driver.execute_script(
+ "return document.getElementsByTagName('div');")
+
+ self.assertIsInstance(result, list)
+ self.assertEquals(2, len(result))
+ self.assertEquals("a", result[0].text)
+ self.assertEquals("b", result[1].text)
+
+ def test_return_object_literal_with_dom_element_property(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+ result = self.driver.execute_script("return {a: document.body}")
+ self.assertIsInstance(result, dict)
+ self.assertEquals("body", result["a"].tag_name)
+
+ def test_scripts_execute_in_anonymous_function_and_do_not_pollute_global_scope(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+ self.driver.execute_script("var x = 1;")
+ self.assertEquals("undefined", self.driver.execute_script("return typeof x;"));
+
+ def test_scripts_can_modify_context_window_object(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+ self.driver.execute_script("window.x = 1;")
+ self.assertEquals("number", self.driver.execute_script("return typeof x;"));
+ self.assertEquals(1, self.driver.execute_script("return x;"));
+
+ def test_that_ecmascript_returns_document_title(self):
+ self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
+ result = self.driver.execute_script("return document.title;")
+ self.assertEquals("executeScript test", result)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/javascript/res/execute_script_test.html b/testing/web-platform/tests/old-tests/webdriver/javascript/res/execute_script_test.html
new file mode 100644
index 000000000..9491b441a
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/javascript/res/execute_script_test.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<title>executeScript test</title> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/javascript/res/return_array_of_dom_elements.html b/testing/web-platform/tests/old-tests/webdriver/javascript/res/return_array_of_dom_elements.html
new file mode 100644
index 000000000..32827f950
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/javascript/res/return_array_of_dom_elements.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html>
+<div id="one">a</div>
+<div id="two">b</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/javascript/res/return_document_body.html b/testing/web-platform/tests/old-tests/webdriver/javascript/res/return_document_body.html
new file mode 100644
index 000000000..ba1eab446
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/javascript/res/return_document_body.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<div>Hello, world!</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/javascript/res/return_node_list.html b/testing/web-platform/tests/old-tests/webdriver/javascript/res/return_node_list.html
new file mode 100644
index 000000000..32827f950
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/javascript/res/return_node_list.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html>
+<div id="one">a</div>
+<div id="two">b</div>
diff --git a/testing/web-platform/tests/old-tests/webdriver/modal/__init__.py b/testing/web-platform/tests/old-tests/webdriver/modal/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/modal/__init__.py
diff --git a/testing/web-platform/tests/old-tests/webdriver/modal/alerts_quit_test.py b/testing/web-platform/tests/old-tests/webdriver/modal/alerts_quit_test.py
new file mode 100644
index 000000000..83f7d1450
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/modal/alerts_quit_test.py
@@ -0,0 +1,26 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+from selenium.common import exceptions
+from selenium.webdriver.support import wait
+
+
+class AlertsQuitTest(base_test.WebDriverBaseTest):
+ def setUp(self):
+ self.wait = wait.WebDriverWait(self.driver, 5, ignored_exceptions=[exceptions.NoAlertPresentException])
+ self.driver.get(self.webserver.where_is('modal/res/alerts.html'))
+
+ def test_can_quit_when_an_alert_is_present(self):
+ self.driver.find_element_by_css_selector('#alert').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ self.driver.quit()
+ with self.assertRaises(Exception):
+ alert.accept()
+ AlertsQuitTest.driver = None
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/modal/alerts_test.py b/testing/web-platform/tests/old-tests/webdriver/modal/alerts_test.py
new file mode 100644
index 000000000..5f6f8a9f5
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/modal/alerts_test.py
@@ -0,0 +1,148 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+from selenium.common import exceptions
+from selenium.webdriver.support import wait
+
+class AlertsTest(base_test.WebDriverBaseTest):
+ def setUp(self):
+ self.wait = wait.WebDriverWait(self.driver, 5, ignored_exceptions = [exceptions.NoAlertPresentException])
+ self.driver.get(self.webserver.where_is('modal/res/alerts.html'))
+
+ def tearDown(self):
+ try:
+ self.driver.switch_to_alert().dismiss()
+ except exceptions.NoAlertPresentException:
+ pass
+
+ # Alerts
+ def test_should_allow_user_to_accept_an_alert(self):
+ self.driver.find_element_by_css_selector('#alert').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.accept()
+ self.driver.current_url
+
+ def test_should_allow_user_to_accept_an_alert_with_no_text(self):
+ self.driver.find_element_by_css_selector('#empty-alert').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.accept()
+ self.driver.current_url
+
+ def test_should_allow_user_to_dismiss_an_alert(self):
+ self.driver.find_element_by_css_selector('#alert').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.dismiss()
+ self.driver.current_url
+
+ def test_should_allow_user_to_get_text_of_an_alert(self):
+ self.driver.find_element_by_css_selector('#alert').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.text
+ alert.accept()
+ self.assertEquals('cheese', value)
+
+ def test_setting_the_value_of_an_alert_throws(self):
+ self.driver.find_element_by_css_selector('#alert').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ with self.assertRaises(exceptions.ElementNotVisibleException):
+ alert.send_keys('cheese')
+ alert.accept()
+
+ def test_alert_should_not_allow_additional_commands_if_dismissed(self):
+ self.driver.find_element_by_css_selector('#alert').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.accept()
+ with self.assertRaises(exceptions.NoAlertPresentException):
+ alert.text
+
+ # Prompts
+ def test_should_allow_user_to_accept_a_prompt(self):
+ self.driver.find_element_by_css_selector('#prompt').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.accept()
+ self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == '')
+
+ def test_should_allow_user_to_dismiss_a_prompt(self):
+ self.driver.find_element_by_css_selector('#prompt').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.dismiss()
+ self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'null')
+
+ def test_should_allow_user_to_set_the_value_of_a_prompt(self):
+ self.driver.find_element_by_css_selector('#prompt').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.send_keys('cheese')
+ alert.accept()
+ self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'cheese')
+
+ def test_should_allow_user_to_get_text_of_a_prompt(self):
+ self.driver.find_element_by_css_selector('#prompt').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.text
+ alert.accept()
+ self.assertEquals('Enter something', value)
+
+ def test_prompt_should_not_allow_additional_commands_if_dismissed(self):
+ self.driver.find_element_by_css_selector('#prompt').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.accept()
+ with self.assertRaises(exceptions.NoAlertPresentException):
+ alert.text
+
+ def test_prompt_should_use_default_value_if_no_keys_sent(self):
+ self.driver.find_element_by_css_selector('#prompt-with-default').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.accept()
+ self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'This is a default value')
+
+ def test_prompt_should_have_null_value_if_dismissed(self):
+ self.driver.find_element_by_css_selector('#prompt-with-default').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.dismiss()
+ self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'null')
+
+ # Confirmations
+ def test_should_allow_user_to_accept_a_confirm(self):
+ self.driver.find_element_by_css_selector('#confirm').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.accept()
+ self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'true')
+
+ def test_should_allow_user_to_dismiss_a_confirm(self):
+ self.driver.find_element_by_css_selector('#confirm').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.dismiss()
+ self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'false')
+
+ def test_setting_the_value_of_a_confirm_throws(self):
+ self.driver.find_element_by_css_selector('#confirm').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ with self.assertRaises(exceptions.ElementNotVisibleException):
+ alert.send_keys('cheese')
+ alert.accept()
+
+ def test_should_allow_user_to_get_text_of_a_confirm(self):
+ self.driver.find_element_by_css_selector('#confirm').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.text
+ alert.accept()
+ self.assertEquals('cheese', value)
+
+ def test_confirm_should_not_allow_additional_commands_if_dismissed(self):
+ self.driver.find_element_by_css_selector('#confirm').click()
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ alert.accept()
+ with self.assertRaises(exceptions.NoAlertPresentException):
+ alert.text
+
+"""
+ def test_switch_to_missing_alert_fails(self):
+ with self.assertRaises(exceptions.NoAlertPresentException):
+ self.driver.switch_to_alert()
+"""
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/modal/res/alerts.html b/testing/web-platform/tests/old-tests/webdriver/modal/res/alerts.html
new file mode 100644
index 000000000..36c5dc139
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/modal/res/alerts.html
@@ -0,0 +1,53 @@
+<html>
+<!-- Padding to account for small screens of mobile devices -->
+<style>
+ p {margin-top:48px;}
+</style>
+<head>
+ <title>Testing Alerts</title>
+
+ <script type="text/javascript">
+ function setInnerText(id, value) {
+ document.getElementById(id).innerHTML = '<p>' + value + '</p>';
+ }
+
+ function displayPrompt() {
+ setInnerText('text', prompt('Enter something'));
+ }
+
+ function displayPromptWithDefault() {
+ setInnerText('text', prompt('Enter something', 'This is a default value'));
+ }
+
+ function displayTwoPrompts() {
+ setInnerText('text1', prompt('First'));
+ setInnerText('text2', prompt('Second'));
+ }
+
+ function displayConfirm() {
+ setInnerText('text', confirm('cheese'));
+ }
+ </script>
+</head>
+<body>
+
+<h1>Testing Alerts and Stuff</h1>
+
+<p>This tests alerts: <a href="#" id="alert" onclick="alert('cheese');">click me</a></p>
+
+<p>This tests alerts: <a href="#" id="empty-alert" onclick="alert('');">click me</a></p>
+
+<p>Let's make the <a href="#" id="prompt" onclick="displayPrompt();">prompt happen</a></p>
+
+<p>Let's make the <a href="#" id="prompt-with-default" onclick="displayPromptWithDefault();">prompt with default happen</a></p>
+
+<p>Let's make TWO <a href="#" id="double-prompt" onclick="displayTwoPrompts();">prompts happen</a></p>
+
+<p>This tests confirm: <a href="#" id="confirm" onclick="displayConfirm();">test confirm</a></p>
+
+<div id="text"></div>
+<div id="text1"></div>
+<div id="text2"></div>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/__init__.py b/testing/web-platform/tests/old-tests/webdriver/navigation/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/__init__.py
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/auth_tests.py b/testing/web-platform/tests/old-tests/webdriver/navigation/auth_tests.py
new file mode 100644
index 000000000..52a18cdb8
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/auth_tests.py
@@ -0,0 +1,42 @@
+import os
+import sys
+import unittest
+import ConfigParser
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+from selenium.common import exceptions
+from wptserve import server
+from wptserve.router import any_method
+from wptserve.handlers import basic_auth_handler
+
+class WebDriverAuthTest(unittest.TestCase):
+
+ # Set up class to start HTTP Server that responds to
+ # test URLs with various 401 responses
+ @classmethod
+ def setUpClass(cls):
+ cls.driver = base_test.create_driver()
+ cls.webserver = server.WebTestHttpd(routes=[(any_method, "*", basic_auth_handler)])
+ cls.webserver.start()
+
+ @classmethod
+ def tearDownClass(cls):
+ cls.driver.quit()
+ cls.webserver.stop()
+
+ # Test that when 401 is seen by browser, a WebDriver response is still sent
+ def test_response_401_auth_basic(self):
+ page = self.webserver.get_url('navigation/res/authenticated.html')
+ self.driver.set_page_load_timeout(5)
+ try:
+ self.driver.get( page )
+ # if we got a responses instead of timeout, that's success
+ self.assertTrue(True)
+ except exceptions.TimeoutException:
+ self.fail("Did not get response from browser.")
+ except:
+ self.fail("Unexpected failure. Please investigate.")
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/forward.py b/testing/web-platform/tests/old-tests/webdriver/navigation/forward.py
new file mode 100644
index 000000000..67ca83227
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/forward.py
@@ -0,0 +1,24 @@
+import unittest
+import sys
+import os
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+
+class ForwardTest(base_test.WebDriverBaseTest):
+ # Get a static page that must be the same upon refresh
+ def test_forward(self):
+ self.driver.get(self.webserver.where_is('navigation/res/forwardStart.html'))
+ self.driver.get(self.webserver.where_is('navigation/res/forwardNext.html'))
+ nextbody = self.driver.find_element_by_css_selector("body").text
+ self.driver.back()
+ currbody = self.driver.find_element_by_css_selector("body").text
+ self.assertNotEqual(nextbody, currbody)
+ self.driver.forward()
+ currbody = self.driver.find_element_by_css_selector("body").text
+ self.assertEqual(nextbody, currbody)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/forwardToNothing.py b/testing/web-platform/tests/old-tests/webdriver/navigation/forwardToNothing.py
new file mode 100644
index 000000000..99759681a
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/forwardToNothing.py
@@ -0,0 +1,20 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+
+class ForwardToNothingTest(base_test.WebDriverBaseTest):
+ # Get a static page that must be the same upon refresh
+ def test_forwardToNothing(self):
+ self.driver.get(self.webserver.where_is('navigation/forwardStart.html'))
+ body = self.driver.find_element_by_css_selector("body").text
+ self.driver.forward()
+ currbody = self.driver.find_element_by_css_selector("body").text
+ self.assertEqual(body, currbody)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/get_from_http_test.py b/testing/web-platform/tests/old-tests/webdriver/navigation/get_from_http_test.py
new file mode 100644
index 000000000..d28a0d0b1
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/get_from_http_test.py
@@ -0,0 +1,60 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+
+class GetFromHttpTest(base_test.WebDriverBaseTest):
+ def testGetUrlWithNoRedirectionOverHttp(self):
+ page = self.webserver.where_is('navigation/res/empty.html')
+ self.driver.get(page)
+ url = self.driver.current_url
+ self.assertEquals(page, url)
+
+
+ def testGetWillFollowTheLocationHeader(self):
+ page = self.webserver.where_is('navigation/redirect')
+ self.driver.get(page)
+ expected = self.webserver.where_is('navigation/res/empty.html')
+ url = self.driver.current_url
+ self.assertEquals(expected, url)
+
+
+ def testGetWillFollowMetaRefreshThatRefreshesInstantly(self):
+ page = self.webserver.where_is('navigation/res/instant-meta-redirect.html')
+ self.driver.get(page)
+ expected = self.webserver.where_is('navigation/res/empty.html')
+ url = self.driver.current_url
+ self.assertEquals(expected, url)
+
+
+ def testGetWillFollowMetaRefreshThatRefreshesAfterOneSecond(self):
+ page = self.webserver.where_is('navigation/res/1s-meta-redirect.html')
+ self.driver.get(page)
+ expected = self.webserver.where_is('navigation/res/empty.html')
+ url = self.driver.current_url
+ self.assertEquals(expected, url)
+
+
+ def testGetWillNotFollowMetaRefreshThatRefreshesAfterMoreThanOneSecond(self):
+ page = self.webserver.where_is('navigation/res/60s-meta-redirect.html')
+ self.driver.get(page)
+ url = self.driver.current_url
+ self.assertEquals(page, url)
+
+
+ def testGetFragmentInCurrentDocumentDoesNotReloadPage(self):
+ page = self.webserver.where_is("navigation/res/fragment.html")
+ fragment_page = "%s#%s" % (page, "fragment")
+
+ self.driver.get(page)
+ self.driver.execute_script("state = true")
+
+ self.driver.get(fragment_page)
+ self.assertEquals(True, self.driver.execute_script("return state"))
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/invalid_cert_test.py b/testing/web-platform/tests/old-tests/webdriver/navigation/invalid_cert_test.py
new file mode 100644
index 000000000..b980146ee
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/invalid_cert_test.py
@@ -0,0 +1,28 @@
+import BaseHTTPServer
+import os
+import ssl
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+
+here = os.path.dirname(os.path.abspath(__file__))
+
+
+class InvalidCertTest(base_test.WebDriverBaseTest):
+ def testCanNavigateToSiteWithSelfSignedCert(self):
+ self.webserver.httpd.socket = ssl.wrap_socket(
+ self.webserver.httpd.socket,
+ certfile=os.path.join(here, 'res/self-signed.key'),
+ server_side=True)
+ expected = self.webserver.where_is(
+ 'navigation/res/empty.html').replace('http:', 'https:', 1)
+
+ self.driver.get(expected)
+ self.assertEquals(expected, self.driver.current_url)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/refresh-page.py b/testing/web-platform/tests/old-tests/webdriver/navigation/refresh-page.py
new file mode 100644
index 000000000..b0638e568
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/refresh-page.py
@@ -0,0 +1,27 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+
+class RefreshPageTest(base_test.WebDriverBaseTest):
+ # Get a static page that must be the same upon refresh
+ def test_refreshPage(self):
+ self.driver.get(self.webserver.where_is('navigation/res/refreshPageStatic.html'))
+ body = self.driver.find_element_by_css("body").text
+ self.driver.execute_script("document.getElementById('body').innerHTML=''")
+ self.driver.refresh()
+ newbody = self.driver.find_element_by_css("body").text
+ self.assertEqual(body, newbody)
+
+ self.driver.get(self.webserver.where_is('navigation/res/refreshPageDynamic.html'))
+ body = self.driver.find_element_by_css("body").text
+ self.driver.refresh()
+ newbody = self.driver.find_element_by_css("body").text
+ self.assertNotEqual(body, newbody)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/refresh_page.py b/testing/web-platform/tests/old-tests/webdriver/navigation/refresh_page.py
new file mode 100644
index 000000000..1e1899008
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/refresh_page.py
@@ -0,0 +1,27 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+
+class RefreshPageTest(base_test.WebDriverBaseTest):
+ # Get a static page that must be the same upon refresh
+ def test_refreshPage(self):
+ self.driver.get(self.webserver.where_is('navigation/res/refreshPageStatic.html'))
+ body = self.driver.find_element_by_css_selector("body").text
+ self.driver.execute_script("document.getElementById('body').innerHTML=''")
+ self.driver.refresh()
+ newbody = self.driver.find_element_by_css_selector("body").text
+ self.assertEqual(body, newbody)
+
+ self.driver.get(self.webserver.where_is('navigation/res/refreshPageDynamic.html'))
+ body = self.driver.find_element_by_css_selector("body").text
+ self.driver.refresh()
+ newbody = self.driver.find_element_by_css_selector("body").text
+ self.assertNotEqual(body, newbody)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/res/1s-meta-redirect.html b/testing/web-platform/tests/old-tests/webdriver/navigation/res/1s-meta-redirect.html
new file mode 100644
index 000000000..44fd332bd
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/res/1s-meta-redirect.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<meta http-equiv="Refresh" content="1; URL=empty.html">
+<title>meta-redirect</title>
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/res/60s-meta-redirect.html b/testing/web-platform/tests/old-tests/webdriver/navigation/res/60s-meta-redirect.html
new file mode 100644
index 000000000..9e56bc96a
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/res/60s-meta-redirect.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<meta http-equiv="Refresh" content="60; URL=empty.html">
+<title>meta-redirect</title>
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/res/authenticated.html b/testing/web-platform/tests/old-tests/webdriver/navigation/res/authenticated.html
new file mode 100644
index 000000000..c77449344
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/res/authenticated.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+
+<title>authentication successful</title>
+<h1>You're in!</h1> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/res/empty.html b/testing/web-platform/tests/old-tests/webdriver/navigation/res/empty.html
new file mode 100644
index 000000000..da58ac21d
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/res/empty.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+
+<title>Cheese</title>
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/res/forwardNext.html b/testing/web-platform/tests/old-tests/webdriver/navigation/res/forwardNext.html
new file mode 100644
index 000000000..edd77f866
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/res/forwardNext.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<body id=body>
+This is the next page.
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/res/forwardStart.html b/testing/web-platform/tests/old-tests/webdriver/navigation/res/forwardStart.html
new file mode 100644
index 000000000..3ab4f3cdd
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/res/forwardStart.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<body>
+This is the start page.
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/res/fragment.html b/testing/web-platform/tests/old-tests/webdriver/navigation/res/fragment.html
new file mode 100644
index 000000000..bd09434a6
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/res/fragment.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>Fragment</title>
+
+<script>
+ var state = false;
+</script>
+
+<p id="fragment">I wish I were a pea, alas I am only a fragment.</p> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/res/instant-meta-redirect.html b/testing/web-platform/tests/old-tests/webdriver/navigation/res/instant-meta-redirect.html
new file mode 100644
index 000000000..c6ad7c9f2
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/res/instant-meta-redirect.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<meta http-equiv="Refresh" content="0; URL=empty.html">
+<title>meta-redirect</title>
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/res/refreshPageDynamic.html b/testing/web-platform/tests/old-tests/webdriver/navigation/res/refreshPageDynamic.html
new file mode 100644
index 000000000..bedd20c35
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/res/refreshPageDynamic.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<body id="body">
+This is a dynamic page. It will always have different content if refreshed.
+<div id="dynamic"></div>
+</body>
+</html>
+<script>
+document.getElementById('dynamic').innerHTML = Math.random();
+</script> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/res/refreshPageStatic.html b/testing/web-platform/tests/old-tests/webdriver/navigation/res/refreshPageStatic.html
new file mode 100644
index 000000000..7d339aa9d
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/res/refreshPageStatic.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<body id="body">
+This is a static page. It will always have the same content if refreshed.
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/navigation/res/self-signed.key b/testing/web-platform/tests/old-tests/webdriver/navigation/res/self-signed.key
new file mode 100644
index 000000000..bca61cdf7
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/navigation/res/self-signed.key
@@ -0,0 +1,28 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQDoww50sF8aKYNe1owbtsEilK2KOZx2F1Iv+EElpO7N2hDarIBu
+9f87H+03b5RpI9oCSFCo67wTdCJ0A4B8SLwV2SUZY78CGJB1A8kXqP04tz0S0SYD
+2TQRliwTxx1r7pDv1VmLc7XZRE6n6FFKTEjKmdUhCwHuQfC1sOkCXqSzFQIDAQAB
+AoGAS5XcAeSsXXCRqqB9SxqjyTkCydo/htG37L/vV+whaFOiGYDfDClyQp7xh4kC
+Zsovp4IYP2Kd5qtV7NqeRL3R5Z/Dxf6+6G4HdbI7np5m7A7cU32hMIzxi5M55Lo6
+gveNgHb3uy+R+tZTyab6saUxFy1DqbMh/2ga4lbatRm7JdkCQQD9C8+Q3nN8FkH4
+sKbOnHsKEV27459EYz7WnENiwhcYByBt7vw9BPM/LrO4UzWtgNjtRtxBpFeVT/V+
+dF7OZuH/AkEA63qhJcs6Ru3G29R3kJ82ttyHU1INawB/7od3bKp3rE+jUwNG7ZbQ
+mtRdPTI02/OOeqZKeo46JX3D57gfMRDC6wJABZk/TGs/jt1HNGNkLWoU5tIfisqs
+eWzgtQrcCtFUhXmS5BvHhOoZH6q+2zMsGtyg8A8DTIiAT5NnURbuCg8IrQJAd3kh
+d85zw/byFSjofPz6wq6DDngsDKUVQ42BvyWCUG+bewvHmdYSAuxKXjkx7oLVQE9M
+rH+q6sizc8bMNJW/fwJBAPcobQ59ZGAEWrnDdtbWnNS1ieSV8p6u7sg20HvrUIPS
+TIQXeems9IKu0xs0dnLXNucm4ur8MnE7snkvWZnx2C8=
+-----END RSA PRIVATE KEY-----
+-----BEGIN CERTIFICATE-----
+MIICAzCCAWwCCQCc6Lx6zkc0BDANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKQ2FsaWZvcm5pYTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0
+cyBQdHkgTHRkMCAXDTEzMDcxMjIyMzMxNVoYDzIyODcwNDI2MjIzMzE1WjBFMQsw
+CQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEhMB8GA1UECgwYSW50ZXJu
+ZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDo
+ww50sF8aKYNe1owbtsEilK2KOZx2F1Iv+EElpO7N2hDarIBu9f87H+03b5RpI9oC
+SFCo67wTdCJ0A4B8SLwV2SUZY78CGJB1A8kXqP04tz0S0SYD2TQRliwTxx1r7pDv
+1VmLc7XZRE6n6FFKTEjKmdUhCwHuQfC1sOkCXqSzFQIDAQABMA0GCSqGSIb3DQEB
+BQUAA4GBAD6atn+xbACigA9+EmcZo2bpAzxLAuXOAVEBM6J7Nrd8pk1D3PRP0QPg
+UxjIDQ7ZqEWwLAcKb6AIfWwJ2Wj7q5LSX5nEFnUXggpywfUNTuZaR/fquUVnhMaO
+tF8fQB9AYSa1WjqUbIKlns3Z2RhUv2DSEifi6UNjsf2UpmDTxtkN
+-----END CERTIFICATE-----
diff --git a/testing/web-platform/tests/old-tests/webdriver/network.py b/testing/web-platform/tests/old-tests/webdriver/network.py
new file mode 100644
index 000000000..0674b989d
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/network.py
@@ -0,0 +1,30 @@
+# this comes from this stack overflow post:
+# http://stackoverflow.com/a/1947766/725944
+
+# module for getting the lan ip address of the computer
+
+import os
+import socket
+
+if os.name != "nt":
+ import fcntl
+ import struct
+ def get_interface_ip(ifname):
+ sckt = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ return socket.inet_ntoa(fcntl.ioctl(
+ sckt.fileno(),
+ 0x8915, # SIOCGIFADDR
+ struct.pack('256s', ifname[:15])
+ )[20:24])
+
+def get_lan_ip():
+ ip = socket.gethostbyname(socket.gethostname())
+ if ip.startswith("127.") and os.name != "nt":
+ interfaces = ["eth0","eth1","eth2","wlan0","wlan1","wifi0","ath0","ath1","ppp0"]
+ for ifname in interfaces:
+ try:
+ ip = get_interface_ip(ifname)
+ break
+ except IOError:
+ pass
+ return ip
diff --git a/testing/web-platform/tests/old-tests/webdriver/runtests.py b/testing/web-platform/tests/old-tests/webdriver/runtests.py
new file mode 100644
index 000000000..1cd9a3836
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/runtests.py
@@ -0,0 +1,14 @@
+import unittest
+
+from unittest import TestLoader, TextTestRunner, TestSuite
+
+if __name__ == "__main__":
+
+ loader = TestLoader()
+ suite = TestSuite((
+ loader.discover(".", pattern="*.py")
+ ))
+
+ runner = TextTestRunner(verbosity=2)
+ runner.run(suite)
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/runtests_p0.py b/testing/web-platform/tests/old-tests/webdriver/runtests_p0.py
new file mode 100644
index 000000000..dc52c14be
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/runtests_p0.py
@@ -0,0 +1,42 @@
+import unittest
+
+from unittest import TestLoader, TextTestRunner, TestSuite
+
+from cookie import cookie_test
+from navigation import forward
+from navigation import forwardToNothing
+from navigation import get_from_http_test
+from navigation import refresh_page
+from element_location import element_location_test
+from element_state import visibility_test
+from element_state import method_test
+from element_state import properties
+from javascript import execute_script_test
+from user_input import clear_test
+from windows import window_manipulation
+from windows import tabbing
+
+
+
+if __name__ == "__main__":
+
+ loader = TestLoader()
+ suite = TestSuite((
+ loader.loadTestsFromModule(cookie_test),
+ loader.loadTestsFromModule(forward),
+ loader.loadTestsFromModule(forwardToNothing),
+ loader.loadTestsFromModule(element_location_test),
+ loader.loadTestsFromModule(visibility_test),
+ loader.loadTestsFromModule(execute_script_test),
+ loader.loadTestsFromModule(clear_test),
+ loader.loadTestsFromModule(method_test),
+ loader.loadTestsFromModule(properties),
+ loader.loadTestsFromModule(refresh_page),
+ loader.loadTestsFromModule(get_from_http_test),
+ loader.loadTestsFromModule(window_manipulation),
+ loader.loadTestsFromModule(tabbing)
+ ))
+
+ runner = TextTestRunner(verbosity=2)
+ runner.run(suite)
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/screenshot/__init__.py b/testing/web-platform/tests/old-tests/webdriver/screenshot/__init__.py
new file mode 100644
index 000000000..0c8107beb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/screenshot/__init__.py
@@ -0,0 +1 @@
+__author__ = 'b-redeg'
diff --git a/testing/web-platform/tests/old-tests/webdriver/screenshot/res/screenshot.html b/testing/web-platform/tests/old-tests/webdriver/screenshot/res/screenshot.html
new file mode 100644
index 000000000..057bb9bf5
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/screenshot/res/screenshot.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>"img" element with not fully qualified url</title>
+
+<img src="//web-platform.test:8000/images/blue.png">&nbsp;</a> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/screenshot/take_screenshot.py b/testing/web-platform/tests/old-tests/webdriver/screenshot/take_screenshot.py
new file mode 100644
index 000000000..20ff2bff2
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/screenshot/take_screenshot.py
@@ -0,0 +1,15 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+
+class ScreenShotTest(base_test.WebDriverBaseTest):
+ # Get a static page that must be the same upon refresh
+ def test_screenShot(self):
+ self.driver.get(self.webserver.where_is('screenshot/res/screen.html'))
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/timeouts/__init__.py b/testing/web-platform/tests/old-tests/webdriver/timeouts/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/timeouts/__init__.py
diff --git a/testing/web-platform/tests/old-tests/webdriver/timeouts/implicit_waits_tests.py b/testing/web-platform/tests/old-tests/webdriver/timeouts/implicit_waits_tests.py
new file mode 100644
index 000000000..5faa0ad12
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/timeouts/implicit_waits_tests.py
@@ -0,0 +1,64 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+from selenium.common import exceptions
+
+
+class ImplicitWaitsTests(base_test.WebDriverBaseTest):
+ def setUp(self):
+ self.driver.get(self.webserver.where_is('timeouts/res/implicit_waits_tests.html'))
+
+ def test_find_element_by_id(self):
+ add = self.driver.find_element_by_css_selector("#adder")
+ self.driver.implicitly_wait(3)
+ add.click()
+ self.driver.find_element_by_css_selector("#box0") # All is well if this doesn't throw.
+
+ def test_should_still_fail_to_find_an_element_when_implicit_waits_are_enabled(self):
+ self.driver.implicitly_wait(0.5)
+ try:
+ self.driver.find_element_by_css_selector("#box0")
+ self.fail("Expected NoSuchElementException to have been thrown")
+ except exceptions.NoSuchElementException as e:
+ pass
+ except Exception as e:
+ self.fail("Expected NoSuchElementException but got " + str(e))
+
+ def test_should_return_after_first_attempt_to_find_one_after_disabling_implicit_waits(self):
+ self.driver.implicitly_wait(3)
+ self.driver.implicitly_wait(0)
+ try:
+ self.driver.find_element_by_css_selector("#box0")
+ self.fail("Expected NoSuchElementException to have been thrown")
+ except exceptions.NoSuchElementException as e:
+ pass
+ except Exception as e:
+ self.fail("Expected NoSuchElementException but got " + str(e))
+
+ def test_should_implicitly_wait_until_at_least_one_element_is_found_when_searching_for_many(self):
+ add = self.driver.find_element_by_css_selector("#adder")
+ self.driver.implicitly_wait(2)
+ add.click()
+ add.click()
+ elements = self.driver.find_elements_by_css_selector(".redbox")
+ self.assertTrue(len(elements) >= 1)
+
+ def test_should_still_fail_to_find_an_element_by_class_when_implicit_waits_are_enabled(self):
+ self.driver.implicitly_wait(0.5)
+ elements = self.driver.find_elements_by_css_selector(".redbox")
+ self.assertEqual(0, len(elements))
+
+ def test_should_return_after_first_attempt_to_find_many_after_disabling_implicit_waits(self):
+ add = self.driver.find_element_by_css_selector("#adder")
+ self.driver.implicitly_wait(1.1)
+ self.driver.implicitly_wait(0)
+ add.click()
+ elements = self.driver.find_elements_by_css_selector(".redbox")
+ self.assertEqual(0, len(elements))
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/timeouts/page_load_timeouts_tests.py b/testing/web-platform/tests/old-tests/webdriver/timeouts/page_load_timeouts_tests.py
new file mode 100644
index 000000000..2f0d3beeb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/timeouts/page_load_timeouts_tests.py
@@ -0,0 +1,26 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+from selenium.common import exceptions
+
+
+class PageLoadTimeoutTest(base_test.WebDriverBaseTest):
+ def test_should_timeout_on_page_load_taking_too_long(self):
+ self.driver.set_page_load_timeout(0.01)
+ with self.assertRaises(exceptions.TimeoutException):
+ self.load_page()
+
+ def test_should_not_timeout_on_page_load(self):
+ self.driver.set_page_load_timeout(30)
+ self.load_page()
+ pass
+
+ def load_page(self):
+ self.driver.get(self.webserver.where_is('timeouts/res/page_load_timeouts_tests.html'))
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/timeouts/res/implicit_waits_tests.html b/testing/web-platform/tests/old-tests/webdriver/timeouts/res/implicit_waits_tests.html
new file mode 100644
index 000000000..ce39877fa
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/timeouts/res/implicit_waits_tests.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title></title>
+ <script type="text/javascript">
+ var next = 0;
+
+ function addMore() {
+ var box = document.createElement('DIV');
+ box.id = 'box' + next++;
+ box.className = 'redbox';
+ box.style.width = '150px';
+ box.style.height = '150px';
+ box.style.backgroundColor = 'red';
+ box.style.border = '1px solid black';
+ box.style.margin = '5px';
+
+ window.setTimeout(function() {
+ document.body.appendChild(box);
+ }, 1000);
+ }
+
+ function reveal() {
+ var elem = document.getElementById('revealed');
+ window.setTimeout(function() {
+ elem.style.display = '';
+ }, 1000);
+ }
+ </script>
+ </head>
+ <body>
+ <input id="adder" type="button" value="Add a box!" onclick="addMore()"/>
+
+ <input id="reveal" type="button" value="Reveal a new input" onclick="reveal();" />
+
+ <input id="revealed" style="display:none;" />
+ </body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/timeouts/res/page_load_timeouts_tests.html b/testing/web-platform/tests/old-tests/webdriver/timeouts/res/page_load_timeouts_tests.html
new file mode 100644
index 000000000..555e19b70
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/timeouts/res/page_load_timeouts_tests.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Hello WebDriver</title>
+</head>
+<body>
+ <h1>Page Load Timeouts Test</h1>
+ <div>
+ Say Cheese
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/__init__.py b/testing/web-platform/tests/old-tests/webdriver/user_input/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/__init__.py
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/clear_test.py b/testing/web-platform/tests/old-tests/webdriver/user_input/clear_test.py
new file mode 100644
index 000000000..34e82e159
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/clear_test.py
@@ -0,0 +1,53 @@
+# -*- mode: python; fill-column: 100; comment-column: 100; -*-
+
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+from selenium.common import exceptions
+
+
+class ElementClearTest(base_test.WebDriverBaseTest):
+ def test_writable_text_input_element_should_clear(self):
+ self.driver.get(self.webserver.where_is("user_input/res/element_clear_writable_input_page.html"))
+ e = self.driver.find_element_by_css_selector("#writableTextInput")
+ e.clear()
+ self.assertEquals("", e.get_attribute("value"))
+
+ def test_disabled_text_input_element_should_not_clear(self):
+ self.driver.get(self.webserver.where_is("user_input/res/element_clear_disabled_input_page.html"))
+ e = self.driver.find_element_by_css_selector("#disabledTextInput")
+ self.assertRaises(exceptions.InvalidElementStateException, lambda: e.clear())
+
+ def test_read_only_text_input_element_should_not_clear(self):
+ self.driver.get(self.webserver.where_is("user_input/res/element_clear_readonly_input_page.html"))
+ e = self.driver.find_element_by_css_selector("#readOnlyTextInput")
+ self.assertRaises(exceptions.InvalidElementStateException, lambda: e.clear())
+
+ def test_writable_text_area_element_should_clear(self):
+ self.driver.get(self.webserver.where_is("user_input/res/element_clear_writable_textarea_page.html"))
+ e = self.driver.find_element_by_css_selector("#writableTextArea")
+ e.clear()
+ self.assertEquals("", e.get_attribute("value"))
+
+ def test_disabled_text_area_element_should_not_clear(self):
+ self.driver.get(self.webserver.where_is("user_input/res/element_clear_disabled_textarea_page.html"))
+ e = self.driver.find_element_by_css_selector("#disabledTextArea")
+ self.assertRaises(exceptions.InvalidElementStateException, lambda: e.clear())
+
+ def test_read_only_text_input_element_should_not_clear(self):
+ self.driver.get(self.webserver.where_is("user_input/res/element_clear_readonly_textarea_page.html"))
+ e = self.driver.find_element_by_css_selector("#readOnlyTextArea")
+ self.assertRaises(exceptions.InvalidElementStateException, lambda: e.clear())
+
+ def test_content_editable_area_should_clear(self):
+ self.driver.get(self.webserver.where_is("user_input/res/element_clear_contenteditable_page.html"))
+ e = self.driver.find_element_by_css_selector("#contentEditableElement")
+ e.clear()
+ self.assertEquals("", e.text)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/click_test.py b/testing/web-platform/tests/old-tests/webdriver/user_input/click_test.py
new file mode 100644
index 000000000..c151f9bcd
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/click_test.py
@@ -0,0 +1,349 @@
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+repo_root = os.path.abspath(os.path.join(__file__, "../../.."))
+sys.path.insert(1, os.path.join(repo_root, "tools", "webdriver"))
+from webdriver import exceptions, wait
+
+
+class ClickTest(base_test.WebDriverBaseTest):
+ def setUp(self):
+ self.wait = wait.WebDriverWait(self.driver, 5, ignored_exceptions = [exceptions.NoSuchAlertException])
+ self.driver.get(self.webserver.where_is('modal/res/alerts.html'))
+
+ def tearDown(self):
+ try:
+ self.driver.switch_to_alert().dismiss()
+ except exceptions.NoSuchAlertException:
+ pass
+
+ def test_click_div(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("div")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "div")
+
+ def test_click_p(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("p")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "p")
+
+ def test_click_h1(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("h1")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "h1")
+
+ def test_click_pre(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("pre")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "pre")
+
+ def test_click_ol(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("ol")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "ol")
+
+ def test_click_ul(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("ul")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "ul")
+
+ def test_click_a(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("a")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "a")
+
+ def test_click_img(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("img")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "img")
+
+ def test_click_video(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("video")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "video")
+
+ def test_click_canvas(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("canvas")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "canvas")
+
+ def test_click_progress(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("progress")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "progress")
+
+ def test_click_textarea(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("textarea")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "textarea")
+
+ def test_click_button(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("button")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "button")
+
+ def test_click_svg(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("svg")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "svg")
+
+ def test_click_input_range(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_range")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_range")
+
+ def test_click_input_button(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_button")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_button")
+
+ def test_click_input_submit(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_submit")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_submit")
+
+ def test_click_input_reset(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_reset")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_reset")
+
+ def test_click_input_checkbox(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_checkbox")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_checkbox")
+
+ def test_click_input_radio(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_radio")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_radio")
+
+ def test_click_input_text(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_text")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_text")
+
+ def test_click_input_number(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_number")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_number")
+
+ def test_click_input_tel(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_tel")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_tel")
+
+ def test_click_input_url(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_url")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_url")
+
+ def test_click_input_email(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_email")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_email")
+
+ def test_click_input_search(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_search")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_search")
+
+ def test_click_input_image(self):
+ self.driver.get(self.webserver.where_is("user_input/res/click.html"))
+
+ element = self.driver.find_element_by_id("input_image")
+ element.click()
+
+ alert = self.wait.until(lambda x: x.switch_to_alert())
+ value = alert.get_text()
+ alert.accept()
+
+ self.assertEquals(value, "input_image")
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/res/click.html b/testing/web-platform/tests/old-tests/webdriver/user_input/res/click.html
new file mode 100644
index 000000000..3517bfca8
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/res/click.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <meta charset="utf-8" />
+ <title></title>
+ <style>
+ .testcase {
+ background-color: #DDD;
+ margin: 30px;
+ min-width: 500px;
+ min-height: 70px;
+ }
+ </style>
+</head>
+<body>
+ <div id="div" class="testcase" onclick="alert('div')">div</div>
+ <p id="p" class="testcase" onclick="alert('p')">p</p>
+ <h1 id="h1" class="testcase" onclick="alert('h1')">h1</h1>
+ <pre id="pre" class="testcase" onclick="alert('pre')">pre</pre>
+ <ol id="ol" class="testcase" onclick="alert('ol')">ol</ol>
+ <ul id="ul" class="testcase" onclick="alert('ul')">ul</ul>
+ <a id="a" class="testcase" onclick="alert('a')">a</a>
+ <img id="img" class="testcase" onclick="alert('img')" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAHJSSURBVHhe7d0HdFVV1gfwTSpJIJUklFASSCGh95ZGr1J0xN6wjAV1xoKKCiKIvXfH7jj2LioECKEjvSZA6B1CCimk8uVcDh9JSHnlvnf3vff/W4vF2RfHkfdSds45e+9G5yoRAAAAAJiGi/wdAAAAAEwCCSAAAACAySABBAAAADAZJIAAAAAAJoMEEAAAAMBkkAACAAAAmAwSQAAAAACTQQIIAAAAYDJIAAEAAABMBgkgAAAAgMkgAQQAAAAwGSSAAAAAACaDBBAAAADAZJAAAgAAAJgMEkAAAAAAk0ECCAAAAGAySAABAAAATAYJIAAAAIDJIAEEAAAAMBkkgAAAAAAmgwQQAAAAwGSQAAIAAACYDBJAAAAAAJNBAggAAABgMkgAAQAAAEwGCSAAAACAySABBAAAADAZJIAAAAAAJoMEEAAAAMBkkAACAAAAmAwSQAAAAACTQQIIAAAAYDJIAAEAAABMBgkgAAAAgMkgAQQAAAAwGSSAAAAAACaDBBAAAADAZJAAAgAAAJgMEkAAAAAAk0ECCAAAAGAySAABAAAATAYJIAAAAIDJIAEEAAAAMBkkgAAAAAAmgwQQAAAAwGSQAAIAAACYDBJAAAAAAJNBAggAAABgMkgAAQAAAEwGCSAAAACAySABBAAAADAZJIAAAAAAJoMEEAAAAMBkkAACAAAAmAwSQAAAAACTQQIIAAAAYDJIAAEAAABMBgkgAAAAgMkgAQQAAAAwGSSAAAAAACaDBBAAAADAZJAAAgAAAJgMEkAAAAAAk0ECCAAAAGAySAABAAAATAYJIAAAAIDJIAEEAAAAMBkkgAAAAAAmgwQQAAAAwGSQAAIAAACYDBJAAAAAAJNBAggAAABgMkgAAQAAAEwGCSAAAACAySABBAAAADAZJIAAAAAAJoMEEAAAAMBkkAACAAAAmAwSQAAAAACTQQIIAAAAYDJIAAEAAABMBgkgAAAAgMkgAQQAAAAwGSSAAAAAACaDBBAAAADAZJAAAgAAAJgMEkAAAAAAk0ECCAAAAGAySAABAAAATAYJIAAAAIDJIAEEAAAAMBkkgAAAAAAmgwQQAAAAwGSQAAIAAACYDBJAAAAAAJNBAggAAABgMkgAAQAAAEwGCSAAAACAySABBAAAAF1Iz8iQK7BXo3OV5Npm+WdLqbC4VEZ8NPP1IpdGjWQEF2SdOUvlFRUy4sHN1YUCmzSWEXAjvkqczCuUEYBl8DUY1DZy5Ej64YcfyNvbWz7h72xxMRUVFlZ+HT2n/Hc3bszje50qCeAPqzPp8f+tlREfH96ZSP2jm8sILrj7w6W0eMsRGfHg5u5Ka+dOJA83V/kEOFmXeZyufyNVRgCWWTRzHDX31883auBt6dKllJCQQJu3bKbOnTrLp3xkZWXR2nXraNXKlbRt2zbl1/bt2+WfVhcVFUWdO3em2NhY6tu3L/Xp04eCg4PlnzqHKkfA/aN4JllLtvNKcrgY0qmlXPFRVlpOq3YekxFws2THUbkCANDGrFmzlN9379qt/M6BSPo+/fRTGjZsGDVr1oxGjhhBM2fOpG+//bbO5E/YuXMnff/99/T000/T2LFjKSQkhOLj4+k///kPHT9+XP5TjqVKAtgiwIciw/xkxMfC7fimVZtBMS3kipdUvF9sLWC2YwwA5pKWlkYpKSnKOoPBPcADBw7QI488QqGhoXTTTTf9/3+bPZYtW0a33XYbNW/enO6++24lSXQkVY6Ahbf+3FL5q+5sVyu/PzqSwkP5Jadam/TyX5R+IEdGPIQEelPqk+NkBFwczS6gIU/9JiMAy+EIuGE5OTm0Y8cO2rNnj/Lr5MmTdPr0acrPz6dGjRopv/z8/CgoKIhatGhB7dq1o/CIcIqJjtHVPTh7DR06lBYuXKisr7vuOvr888+VtbOJ9+Wll15SdvnqIxLDHj16UHR0tPLeNWnShFxcXaggv4Dy8vIoMzOTNm/e3GAye9ddd9HMp56i4GbN5BP1qJYAbj2QRVe+bH8GrLZHJnalGxJjZAQXvDt/K70+b5uM+Pjp4eEU1TJARsDBV8t20azv1ssIwHJIAC9VXlFOq1etpnnz5tFff/1Fa9fafn9e3BsTR4/JycnUv39/wyaEYvcvMTFRRqTcmxP365xN/Hdce+21dOjQIfmkOvFn48ePV96Xtm3byqf1y87OVj4GFixYoBz/irgmkTy+++67yr9fTaolgOUV56jf4z9SQSGvauBekcH02d2DZQQXbD90mq54cYGM+HhgXGeaMiRWRsDBbe8voeXbcT8TrIcE8KLdu3fTJ598Qu+//76yy6c2Vw9XuvH6G+nKKyfTkMGDyc3NTf6J/lXd/bugqKjIadW0Iml//rnn6bHHHpNPLmrdujVNnz6dJl81mfz9/OVT25SUlChHyc8++6xS8FLTLVNuoddefU1JCNWgWh9AV5dGNKJLmIz4WL/nFMsWNVrr2CqQ/H09ZcTHgq24a8ZJcWk5rd55QkYAYK3ly5fThAkTKDIykubMmeOQ5E8oLymnjz78SClCCA8PpxdffJFOZZ2Sf6pfS5YsuST5E/bu3StXjlVcXEw33XjTJcmfl5eXsisnEvs77rjD7uRP8PDwoNGjRys7jeLvHBcXJ//kPPH+Dhw4kA4fPiyf2EfVRtBJsfyKCyrKz9HydBQX1CRacw3v1EpGfGzZl0V5hSUyAq2t3HmMysp49YwE0IM1a9Yo38wHDRpEP//8s3zqHOKI8qGHHqLmoc3p0UcfpWPH9LuDf6Hyt6ZdlYmXoxUUFNDll19OX3zxhXxy3hVXXKEkoCLxE0mbIwwePJjWrVtHzz33nHxynrg3KJLAXbt2ySe2UzUB7NMhVLmwys3ibUgAa5MUx68djLiQsAwJOxtopQRgHZFs3Xb7bUpvtz/++EM+1UZ5eblynBgWFqbsPuYX5Ms/0Qex+7do0SIZVZeRni5XjlFWVkY33ngj/f777/LJea+/8Tp98803SpGHo3l6etLDDz+s7CKLAqAL9u/frySB9u6CqpoA+np7UJ8o5zYytEQqEopa9e0QQq6uqn4IqGIxkg420EoJwDLiOv3HH39MERER9J8P/iOf8iASwccff5w6xXW6JKHh7KmnnpKrSzm6COT+++9X+vRV9fMvv9DUe6Y6faNrwIAByo5y1SNhcZVg1KhRdPKU7cf8qn/3H8rwWDEnr1ipUobqvDzdaUCM43+KsVbqjqNUoU5tEtgh40g2ncoukhEA1OXIkSM0ceJEuuWWW5TiBK7EzpFoOiyOMMWas9TUVFq8eLGMLrVhwwa5Up8o1nnrrbdkdJ6o0r1snHZtysQubuqSVKXC+ALRQubaa66hsvIy+cQ6qlUBX3Dw1BkaMXuejPi4e2Rs5S9+o2O09s2KXTTzG34tPr64N5l6RITICLTwQco2euW3rTICsJ4ZqoAXpCygSRMnKf3h9ETcXfvss89o8uTJ8gkvSUlJyhFwfUSBhtp38LZu3aqMaKvqq6++qvN1mnLrFMrNyZVR/cTOoZurKzX28qLAwEBq2bKlUrATGxdH0VFRFu0siikhYmJI1TuAc+fOVZpSW0v1BFAY/PRvdCyrQEY8RIX50U8PjpQRXMC1ye/tw2Lo/jFdZQRamPzaAtqy97SMAKxn5ASwoqKCXnjhBZu+8XJy8y230Csvv6w0m+ZC7PyJIoiGpGekVyZO0TKyn9hJ69+vf7XejOIY+sknn5TRpcQINzUqu8UcYLGDLH6JOcH1EZXH4jhYtI25YN36ddSjew8ZWcYhF8BGd+XXDmbnoVzKOnNWRnCBGOMX0ZLfpJT5GD2mqdzCEtq6D8kfQG1Edeg111yj++RP+Pijj6h79+4OPVK1VkNTNi5QeyawaLNSNfkTSWhtvf8cQSSRouJXTA6ZNm0anT1bd77SoUOHSyqT77v3PuWHEms4JAFMiuM5azYNxQW1GtGZ373Nfcfy6HhOoYzA2ZbtOKJUZANAdRcu33/99dfyif6JalIxtuybb7+VT7Qjqn5FHzxLqDkrNysrSyn8qEpM5tCiofbzzz+v3NUsLKz7e+A//vEPZSTeBWKOsKhOtoZDEsCu7YLJw8NVRnws3KZO80SjSWTYv1FIxfulmUXb8MMSQE0HDhxQ+vrVNqXBCCZfeaVSLWxrUYEa6qv8rWnbdvUqgUWyV7WAR+zGift5thCTOrJzsi/5deLECaX4ZtWqVcr9y/pGu4lG0GLCSH3mPDOHXF0v5lpi59Sa984hCaC7qwsN6cSvx9yyjBOVLw6a2tbUqU0QNfFxTDNLeyxCCxJNiLGOaekY/QZQldglS0hIUHXXiSPRL/Dqq66ud/fJUUTSY+nun7Bx40a5ss+ZM2do9uzZMjp/H2/q1Kkysp5IysRkkJq/xL+3TZs2So/I66+/XjnG3Z25W4lr8+qrr1LmnkwZXapN6zbVkkRRFfz7b5a3+XFIAigMZthkuKS4jNZmYqxVTS6NGtFQhu/Xyp0n6GyJdj+JmtXGfSfZzfQG/XFzcyEfT3cZ6Zv4JiySP+6tU9Ty3Xff0bhx4yg317LqVrVYs/snrFu7TmnYbC8xqaVqFbco+hCj3pyhfUR7mjdvnpIc1ua33+ov0rz99tvl6rz33ntPrhrmsASwXxS//nICJhvUbjDDHduy0nL6ezcSdmdLw84rqOCfQ2OoqZf+E0DR42/okKHKeDUzEXfxLrvsMmV3zBlSUlJsOlpXIyn/9NNP5er87t0NN9wgI+cQLWEefPBBGVUnktz6tGrVim666SYZkTJ9xtJZwQ5LAIOaelGX8EAZ8ZGCsXC16hfVnBq5MBzjh4Td6eZvwd1LsE+Qf2O6eXBHGenX6dOnlXm++/btk0/MRRzHTpo0qd6KVLVYu/t3gWiJYg+R2Ivk84IpU6aQr6+vjJynd+/eclWduDfYkCuvvFKuzrN02ovDEkBhGMOpIIdP5tO+E3kygguaNHanPpH8xvjhHqBzHcsppP3HnfMTPxjX9PHdycvD+dWTahJJj0h+Nm3aJJ+Yk0iORFJUXlEun6hPNNMWVay2yNiZIVe2WbFihVydJ6prtdC0aVO5qs7bu+E+msnJydWKQaomtPVxaAKYwLS6dOkOJBW14TjG78TpQtp1NFtG4GhLUHkNduoSHkQju7eRkX7dfc/dDU6iMIsvv/ySHp/+uIzU99RM23b/hB3bd8iVbcTIuar69e8nV851qo6Zvq1bt5arujVu3JhGjBgho/P3Bi2pBnZoAhjZIoACfD1lxEcKWlzUKjGW3z1AYSl2AZ1mIT43wE4zLu8pV/r1yiuvKE2B4aJnn32WPv/8cxmpR8zYXb58uYysZ28lcNWq4yFDhlATnyYycq6//vpLrqrr37+/XNUvMTFRrkhpZ7N3z14Z1c2hCaAwkuFUkHWZJ6mwGFWONYUFNaGwEG0++OszfyuSEmcoLi2nVbvsH2kE5nXlgAjqGBYgI30SCcm///1vGUFVojhi3br6ixKsZevdvwtETz1bj6dLS0tp27aLvQR79tTmhxdx/C1avtQk5hyPHGXZCFsxQaQqS+6tOjwBTGa4q1RRfo5WZGBXqTYju/A7Bt6y7zSdKULC7mirdh5TKq8BbOHh6UZTR1Ufoq83oiBAqztgenHFFVdQdrY613Ls3f274MD+A3JlnQMHq//vGprBqzbRW3LWrFkUHx8vn1QnmlGL/oGWEP0Fq9qzZ49c1c3hCWDPiGBydXX4/43VFqMauFYcj4HPnTtHy9KxC+hoS3bgNQbbPTimEwU1bSwj/RH95G688Uan977TG7GzdMcddyhfl+1l6czfhohmyrao+V63aKFO3YL49z788MOX/PrXv/5F//znP5Uei+JuX0REBM2YMUP+r6qbPHky3TP1Hhk1LDS0eus9S5J0h2dmXp7uFN+RX0/AxSgEqVW3dsHkxbB312LcTXO4hbhrCTZqFdyErhoYKSN9EnfcRO87aNi3335Lb731loxs89f8+ZdU4NpqZ4Zt01kK8gvk6jwxwk0tL7zwwiW/xDGvaNQsijTq6ys5bdo0ZVScm6vllfQ1q4WrNraui1O25jiOhcvJK6atB7JkBBe4ujSiIXH8qrdFwl6hwk+cULuMI9l08vTFOZgA1ph5eY/Kb1b8TnosJe61PfHEEzICS4hRaevW234fcGYdO1+22LHDtkrg4uJiuTrPw1O7kajivp+Y6iHaDokfRkRsDU/P6gW3lvRudMpnbP8onu1g0tBkuFbJDMfCFRSU0qZ9tZfJg/1QaQ22iq/8gXFgDM+v8ZYQFZPi6Besd/1111d+ba6+i2YJUfEqijfUYmuvxpq7ZkWF2vwQHB4eTrl5ecruYJcuXeRT6xSXVE9mLekf6JQEsGWgD3Vo5ScjPhbgWLFWA6JbUCN+Q0EoDcf2DpOC/n9gAzE96LEJ3WWkT88880y1SlCwnNh5E3NzrSHuDtZ1781WK1eupIqKChlZrmaSdMaCY1NLiDnCYhxbzV870tOrNWy+QBSD2NtzsmbyaslxttP27IczbDKccTCHss44fsSN3vh5e1CP9s1kxAdGlDlGbmGJUmkNYK0pg6OobXDtEwz0YMvWLTR79mwZgS1efvnlar30GiJ2/1avXi0jdZSXl9Ohw9bPam7WrPr3uQMqzBUWRJLXsmXLS37FREfTI488Iv+p6mY//bRc2eb48eNydV7Nv1ttnJYAcm0yjGPg2nGcCrL3aB6dyC2UEahl2Y4jlT+VywDAQr5NPOj2oXEy0h+xYzT1nqkyAnuII3RLig7E7p9alb81Ze7OlCvLiaSs6o7czp22FZNY46677pKr6kQvQHuKkGr2/RPHyg1xWgIY2zqQfLz5VZcuwtFXrRI68rzTk4r3S3WL8UMQ2ODRy7oqM8T16n//+x9GvalEJB9PW7CD9eeff6q++3eBLcmbi4tLtebPavQkbIhIOu+77z4ZVTdnzhy5st727dvl6ry27drKVd2clgCK6tLhnfntKi3NOEFl5dbfHTC68FA/ah7kIyM+FqF/o6rKK87Rkh3HZARgmejW/nRZ7wgZ6U9eXh5NvQ+7f2p6/vnn6e+//5bRpRy5+yfYWgmcnJwsV0Tr16+nkycdPw3p3vvulavqxA7g0qVLZWSdlJQUuSLy8/Ojdm3byahuTksAhWSG7UVKistoXeYJGUFVIzrzO7ZfufMElZRhWoVaNu07SQWFmLIC1pk5qQfLQjFLvfHGG5Sdpc40C7hINDkW49Vq88cff9CaNWtkpL7NmzfLlXUGDRokV+ctTk2VK8eJCI+gKbdOkVF1tuwCisbTixcvlhEpjabF7mZDGlVm5U67/ZNXWEL9p/+kSgdxNd2YFEnTJvSQEVywetdxuvktx38yWOv9O+JpUEeed0r15pXfNtEHKeky4qVpEw8K13GBgS32nDhD+QUlMuJpXO829Ny1lg2o5+jIkSPK2CxROADqE8n1PfdUn2Ahvuf36dOH1q5dK5+or2/fvja1lhETMwIDA2VENHbsWPr1119l1LCQkJBLdg1FBe6ZM2dkVDtxZBsXV/sd2hUrV1D/fpZ/jonrDNdcc42MiD7++GO66aabZFQ3pyaAwk1vL6Y1O3ntuIku9gumj5ERXFBaXkG9H/tR2SXl5Or49vTE5b1kBPYY/ewftO9Ynox4+eiuROoX1VxGxieqsYfO/o31jqy7uysteHw0hfg13GOMK9HA+M0335QRqM3Vw5X279lPrVpdvPL1+++/K4mVI/3yyy/Kzpctrr32Wvryyy9ldP5OY9u2Dd+hE2xNAIWrrrqKvv76axlddFnl3+Pnyr+PpUaOHKlUV18gKoLFf1dDnHoELAxlOBXk8Ml82neC5zdBLbm7ulBSR37fgHEPUB3HcgrZJn+Du7Q0VfInvPHnZvbH8VNHxOo6+cvck4nkz8HKS8pp+vTpMnL83T+hX79+diWYVXfPBLGL6QwPPvigXFX3y6+/Wrxbun7D+mrJ36RJkyxK/gSnJ4AJTNvBLEtHUlEbjmP8jp8upN1Hc2QEtlrCtKLazc2FHh1vrisZu4/l0P+WWt/GwplCAr3phqRoGenTyy+9LFfgSJ9++un/V9SK3T9HHv0K4t5cIzsupY4YOYKioqJkRPTSSy/RwUMHZeQ4vXr1otGjR8uoOjEOzhIvPPe8XJ135513ylXDnJ4AtmnWlEIrv5Bws2ArWmHUhuuIJ/RvtN9CppNw7hgaQ60YVqA70uwfNhCzq9GXeHJSd/Jwu3SKgV6IaQtvv/22jMDR7r//fqUgZOZTjt39GzJkCA0ePFhGtnFzdbtkFvQj02pv2Ky2adOmyVV133//PW3cuFFGtUtNTaWvqhwhi3uWQ4cOlVHDnJ4ACqO7hckVH+syT1JhMaohawps0pg6h1+8IMtFCsb42aW4tJxW7XJ8uwNrNQvwoimDO8rIHBZtPcTuXnRNvSKDaXAnfl+3rfHKK6/IlbGIRsa1jRfTmtj1E3fr1q1dJ584xtOz7ZugccGVV15ZrShD3AkUlcuOlpCQQPHx8TKqTrTWqYuYYV2zqfSsWbPkyjKaJIBJDI+BK8rP0YoM9EOrzbA4fv0bN+09rVSVg21W7zpGZZVJIDePj+9GjT3cZGR8oqXR7B/r/ylfa+Jk7cnL9X0kf+jQIafd61KbaBw8efJkZWbx1998ozRSFkUKZ/LPKNNMysrKlF/irp3obyjuOYqdoXfffVdpNRIaGir/Tc737bffypVjTJw40apq2fp4eHhcskN89dVXKzN8He2xxx6Tq+pEde/WrVtlVJ24P1i19+EVV1xBI0aMkJFlnF4FLIgven1EdWkJr29Ak/qF0+yr+sgILth1NJvGPzdfRny8dGM/GtXdskotqG7Wd2vpq2W87px5eLjS33MnKcVHZvHhwu300q9bZMTTtQntafokfVfdz5gxw+rdEa2I3bzrrrtOOcobOHCgRSO96iO+xW/dtpV+/+13+uijj2jXrl3yT/RPHJF27dpVRuq444476P3335cRUWJiorIT6OXlJZ9U9+OPP1JxcbGMznN3d6fLL79cRg0T79G3331HFbW0JurYseMlf8dPPv2Ebr7pZhmdT17F+yraG1lDkwRQ+Pdny+nP9dYPb3Ykf19PWjFrgoygqoSnfqFT2UUy4mFsrzb0/HX67UempcRZv9DJ07zezzGV7+cLJno/T+UV0dA589i1WapKjO9MmT6G/Hw85RP9EbtizZs3V47MOBMNiW+//Xa67LLLlEkOjiB2DNPS0pSdLkfvzjna9ddfT5999pmM1CNmGou7dFV3166aPJk+/+8Xyl1BrYkK4fGVHyNV/fDDD8puqLU0+1F7MMNjxZy8Ytp2MEtGUNVwhlNBUnccowptfn7RtZ1Hstklf8LgOJ4dAhzlpd82sU7+hAfHdNZ18if897//ZZ38iR5uIikTI8BEUuOo5E8Q0yGSkpLom2++UY4Wxf+fXk1//GKrGTWJHn5ff/O10s/wAlFocfvtd9Q55cRZfvrpp0uSv4cfftim5E/QLAHsF6ndvYT6oLq0dsmx/BJ2MTFh875TMgJLLd3Bs+VRnw6W9a4ygq0HsujnNftlxFN4C1+6on8HGelTWXkZPffcczLiRbQAEa1SxPFiXUUAjiQKHsQO2rr166yqHOVAFD9ERzmuJVHnTp3pz9//lNF5H3/0kXIXU+wQakH0r6yZ6IkEfs4z1o+Ou0CzBLCZrxfL6tIFqC6tVa/2IcoUAG6WME1mOOPY8qhbRBAFNa39jo0RzfphvVzx9eSkHuTqouOBv5VSFqTQ/v28Em2xw/Thhx/SylUracCAAfKpdnp070ELFixQ2o60aMGz7VdNdbVOUZNIimtO6RD3/UTTaTHGzVlycnPohhtuUCbYVCWSwQ8++MCuY2lNb1tzrC5NP5BDWWfOyggu8KxM/gbF8Nu1nb+FZzNjrkTl9JZ9/K45DO3E72uBo/y6di9t3XdaRjwN7dqK+jI9pbHGe++9J1c8iG/a4rL+LbfcwuI+WVVigsT2Hdvpvvvuk094euihh6wudrCVaA1TcyTbtm3bqEuXLvTaa69RSYljO1HMmzePunfrTp9//rl8cp4oVBHJqaenfdczNE0AE2J5/rSxdAd2AWvDcSrI3qN5dCK3UEbQEDHxhuO1Sa5fC9RWVFxKz/66WUY8ubq60LTLustIv/bs3aPcmeJAVPaKClxxWV8UpHDl7+dPr776Ki1ZssTiWbjOJF7Hf//73zJyDjGXV7weAQEB8glReXm50uhaHOP/+uuvSnGNmtatW0cTJkygMWPGKC1/qpo7dy698847SqWxvTRNAKNaBiiVt9wswjFwreJjeF7SX4J7mxZbzPC1Cqj8GtChub+MjO39hTsoO5f3CcPtBpnE8tmn6leI2iIyMpI2b95MN998sW0Hd6I58aZNm5Q+gpw8+eSTmiTQ4vUQ76FoCVPVli1blKrtbt26KQn+qSzb76QXFBQoR8yjRo1SEsuff/5Z/sl54nheJKKPPPKIXWPvqtI0ARRGduHXXT4t/TiVlaub0RtBsJ8XxbTh9416Ecb4WURUTKcyvDPJcTKQIxzOKqD/LMyQEU8Bfo3p1sExMtIv0RiZw9i38ePHK42bY2Nj5RP9ENXI//ngP/TJJ5/IJ9oSffjuueceGTlfWFgYzZ8/X5koU3PyikgEp0yZQsHNgpUq3TfefIPWrFlTb0J4+vRppQBH9BwUE1P8Av2UY/g//6xefCLcfffdtHnLZiURVZPmCWAyw6kgojXDukzeo5m0MpzhXa0VO08ozcWhfhv3nqz8KZPfuMMkhhXmjvDsz+upnPkPltPHdyMvT/uPlrS2OHUxnTyp7ahDManhu++/q3Z0qEc33nijsvvVunVr+UQbTz/9NAUGals4Khoui6PfzMzMOlvoiD599069l/r27askhE2bNqWYmBjq37+/8iw6Olp5FhQURL169lLu84mxc+W1DMYQhSh///23UgHcLKiZfKoezRPAXu2DycWVX6VZKo4Va5XAMGEvLS2nNbuOywjqksZw90/cN+sRESwj4/p793FauJn31xTRlWF0D2NM1vnvF/+VK2288MILyi9uhR626ty5M61es1qpgNVCQFCA0iSbC3E/UrTQEc2iRQJXH9E2JiMjg1atWqXsCu7cubPBVjKi3cyKlSuU6mxxHOwomieA4qfN+Bh+l2IXbkd7kdrEhgWyvLeZisKdBs3fwu81SohtTl4Gn/1bXnGOnvphg4z4enJST7nSt+zsbPr0009l5HziyFTs/hlNi+YtaEHKApubDtvjmdnPKLtm3IidPTFzOTsnW6nUFYUbNY+HLSUagovj4GPHjtFXX32l2ozj+mg2Cq6q71bupie/XicjPv6YPpraBvP7oNPazG/+pm9W7JERD6GB3rT4yXEygpqO5RTS4Jm/yoiP2Vf3okl928vImL5evoue+pZ337/L+4XT0waZgy6O08SdKi2IqSPXXHONjIxJzL0VbWzE6+wM4u6daJ3TuHFj+YQ38fqIApr09HTlv3vPnj3KDyViJKGoHvb39yd/Pz9qFx5OUVFRypGwKCLx9vaW/wbnYZEAHjldQENn/SYjPh6b1I2uS3Bct3G9St12mO76YJmM+Phl2gjq0MIc1aTW4pqELJwxlloE6L/itC6i7+KQOb+xvHt5gYenGy18fLRhGnGLXZiaFZTO8PEnH9NNN94kI2MTRTa33XabUwpExG6uaIQM6tP8CFhoGehD7Vs6bv6hrVJQXVor0SBW3N3ihuMdNy4WMbzSEBXmZ+jkT3jrzy2skz/hX6PiDJP8ZWVlaZL8iYbTZkn+BDc3N+W48h//+Id84hhih+zqq6+WEaiNzXfx4Z35VQKuzTxJBcW8v3hrQdzZ6tle/YokeyFhr93ZkjJauZNfVTvHinI17TmWS18szZQRT62Cm9A18VEy0r+//vpLrpxH9KbjVKDgLKIRsSiEGD16tHyivmeeeUaVhsdQOzYJYCLDSQAV5edo1c5jMoKq9pw8I1d8bNqbRWeKkLDX9PfuE1RWyq9NTmIcz8biapnz0wZicMOmXk9O7E7uDHfzbSXm2TrTTTfdRDNnzpSR+Yh7ef/73/+oR48e8ol6xL9zwsQJMgJHYPOZH9c6iLy9+GX6i7fhWLGmXUez6VR2kYz4EN9sl6VjF7AmjtM/fLzdKaaVtj29HEnck12Zzrs10cDY5hTPsK2TrfIL8pVRa84yZMgQeufdd1WbyqBXvr6+yrG7mFShptmzZ5Ori20VtWAZNgmgq0sjlsfAHL95am0p4xY56N94qYUMXxMxAUh8zhtRaXkFzf6Rd9uXRpWv/fQJ+p/3W9XyZcvlyvFEsiMqfhvbOYzfKESl7u+//y4j+w0aNEgZiQaOxWrvPzmO3zFwdl4xbTt4WkYgzGd8127x9mPKyDM4T+zWnjzNb7c2ieHnulq+SMugI6cKZMTTTUmR1C7EV0bGUNsILUcRM1tDQ0NlBEL37t1Vaw0zZ84cuQJHYpUA9o1sThx305eiyfD/yy0opi37smTET35BSeV/n+0DuY2G426t+Bzv04Ff83c1ZJ0potf+3C4jnpo28aA7h3eSkTGI6x9ff/21jBxLVL+KkV5wKVGx+8ADD8jINmLnT+2Zt1A7Vgmgr7cH9YoMkREf87celitYnnGs8outDJhKRTuY/8dxt7ZvdCg1ZXjfVw0v/7ZZmSXO2bRxXahJY2O9/mLU1tGjjv+8F21PRP87qNvsOXPsSpCfeuopuQJHY5UACsM68buUnH4gh07nn5WRuS3axj8ZXoB2MArRhJjjbu1Qg1b/bj90mn5cvU9GPIneixP6RMjIOJYvd/z9v+DgYHrrrbdkBHUR9yL/++V/ycPDQz6xnEiwe/fuLSNwNHYJYHxHnt8clqK4QJlpKu7YcbfnSC6dyC2UkXktzzjKcrc2wUCVp1XN+p7fOMuaZlzek1wMWLW6aNEiuXIcUfQhkkBoWPuI9vTRRx/JyHKipyI4D7sEUMzeFXNduVmEBJA27jtJRTrps5eG94sWb+P3GjQP8qGwoCYyMo556/fT5r28i8XG9GpD3cONl8CIsWSiKMOR7rnnHho2bJiMwBJiHrM1UzxumXILdepkrLup3LFLAIVRXcPkio8lO45TWXmFjMwpjXH7l5oWmvwYWFRCL2Z4F3JMN36f2/YqKimjub9slBFPbu6u9ODYrjIylu3bt1f+YOq4SvegoCCaNWuWjMAar776Kvn5WTbm9bFHH5MrcBaWCWASwyMicbF73Z6TMjKn+Vv0UwyzYucJKinjN/3CWTbtO8VyBm0Sw4k/9vpw4Q7KyuF9R/ju4TEU6s/vZEUN69Y59uhdzPkNCAiQEVgjJCSEPvjgAxnV7d5776X27dvLCJyFZQLYLbwZeXjw6wC+xMTHioezCmj/cX7j3+pSWlqujEAzqzSGu3/ic7pLO2MdQR7NLqD3F6bLiKfgQC+6KamjjIxnxcoVcqW+8ePH0+WXXy4jsIUo7BCvY30eeughuQJnYpkAeri5smwKncLwTpWz6LEXYup287bv4bhbO7RzS0PNnRWe+3kjlZXxvhryxIRu5Olu3JFaC+YvkCv1Pf/883IF9njllVfk6lKPPfaYMkkEnI/tV+NkhsfAh07k0/6T+tkFU5Mek9+UrebsB3g8p5D2Hs2TER+D4/iNerTHuszjNH/jIRnx1LNDMA3t0kZGxnP02FHav3+/jNT14IMPUlRUlIzAHuHh4fTcc8/J6CJXD1e6//77ZQTOxjYBHBDNc1KAGaeCFBWX0uqd+jtOPX66kHYfy5GReSxhuvPZl2GTd1uJIpunfmA+77cR0ROTjDXvt6ZtW7fJlbq8vLzo4WnTZARqmDp1KrVr105G582aMQutdTTENgFs5utFndoFyoiPhSY8Bl696ziV67QCeqkJp4Is2sbv79wlPIiCmnrJSP9+WJVJuw/nyoinqwa1p6iWxi5e2Lp1q1ypa+6zcym4WTMZgRpEUv3yyy/LiKhJkyZ01913yQi0wPpCDsepIH/vPkmFxfrohaeWVB21f6kpxWTtYIpLy5UKaG6GM/xcttWZolJ6/rctMuLJ28udpo7sLCPjckQFsKj4nTJlioxATRMmTKCBAwcq69lzZpO/n7+yBm2wTgA5TgyoKD9HK3fyn4ahpgU6noW8cU+W8g3bLNbsOk5llUkgN0aa/vH2X1sov6BERjw9MLoz+ft4ysi4li5dKlfqmTFzBjXxMV6zcg4aNWpEzzzzjHLse+uUW+VT0ArrBDC6ZQD5+/L7IpbK8IjNUdIPZVN2XrGM9OfcuXO0PN0871cqwzuqAZWfwx1aGOMn/X0n8uiztN0y4qldc1+6cmAHGRlXbm6u6gUgomnxLTffIiNwhISEBGVyi4+Pj3wCWmGdAAoju/CrHDTTWLglO/TfSmWxid6vhQx/OBlloOkfc37aQOcqGA5YruLJSd3J1cV4835rytyTKVfqeeKJJ6hp06YyAke5cAwM2mKfAHKcCiJ2xLYf4j33Uy0LDHCHbvH2o0rVptHtPppDJ04XyoiP5FhjtH9ZWvmDxPLtvK9/DO7SkvpF8eygoLbdu9Tfib3hhhvkCsD42CeAvduHkIsrv59m00ywq5R15ixt358tI/0S97W27DslI+Pi+DHp6upCPSL03+ahtLyCZv3Iu+2LeK0fGW/sti9VpaerO4HlzjvvREsSMBX2CaCXpzsNiuH3E60RdsYaYqS7c0tM0A6GY7Pu+I6h5OXhJiP9+nLpTjp8Ml9GPN06JJrCgsxTvLBj+3a5Usftt98uVwDmwD4BFIYwbCGx40A2nc7nPQDeXosM1PPQ6Al7XmEJbdqbJSM+hnbW//Gv+Dx/7U91kw21iUKb24YYd95vbbbv2CFX9ktMTKRu3brJCMAcdJEADojiNxdYWGbgXSVx5JW6wzjtbjKP5NKJXH7349SyPOMocbzm2C9S//fRXv19M509y7uV0KPju5G3p7uMjK+iooI2b94sI/uh7x+YkS4SwFZBPhTR0k9GfCzcpv8K2bps2HOSSorLZGQMRr63uZjhbm1kmB+1DNR3qwfRBum7lXtlxJOYmDS2Z/URW0Z3/PhxuVLHuHHj5ArAPHSRAAocJwksTT9BZTodkdaQVAMmS0Y60q5KVDgvZrgbPbyT/o9/Z/2wXq74enJSD7kyj4MHD8qV/UTlr78/JlKA+egmAUxk2A5GHAut33NSRsZixDtzyzNOUEkZvykZ9tq87xQVFPA7ouT4OWuNPzccoI17eFePT+zbjjq1CZKReRw5ot7Xp2uuvVauAMxFNwmg+CIn5ltys4Th5AV77T95hn3Foy1KS8vp79385uTai2OFs4+3O3UMC5SR/pwtKaNnftkoI548PN3oX2O6yMhcjh5V52Pey8tLKQABMCPdJICis/3Qzvx2FBZuNV4hyFIDJrUXpG433r3N+Vv4/Z1GdAnT9TSKjxfvoFPZRTLi6b6RsdTM10tG5qLWDuD1119PjT2NPzMZoDa6SQCFwQyPlA6cOEMHTp2RkTGkGLhlysJtxqlsFo7nFNLeo3ky4iMplmflviWOVb6m76RkyIinls186Nr4KBmZj1p3AMePHy9XAOajqwSwb1RzasRwU2GpgdrB5J8tpb93G/Neo3Asq4Ayj+XKSP/SGO7Wis/RPh1CZaQ/L/yykcpKed8VfWJid/Jwc5WR+aiRALq6ulJSUpKMAMxHVwmgn7cH9ezAb1TPQgNVl67aeYz9sHt7GSlhX8Rwt7ZPVAj5Vn6u6tGGvSfpj/XqVZg6Qv+YUEqMM8Z8ZVsdPmz/tYdrr72WvL29ZQRgPrpKAIVhDFtLrNl1goqKeTeKtRTHfnJqW7DVGPcARUXz8p38ilqG6rT9i2in89T362TEU6NGjejxieaZ91uXAwcOyJXt0PsPzE53CWB8R353iyrKz9HKXeo2JtWCmCRhpN3Mumzck6UcdevdmsqPOY5HlQkMP0ct8dOaPbTzEO/rATckdqDwUH5N8Z3pbHExFRXZX6CTnJwsVwDmpLsEsF2IL4UE8tu2TzVA4rTtYBbl5ZfIyLjOVWa6y9P1fwycyvD+X/MgH2rdrKmM9EP8QPD8r+qNFnOEJj4edNeIzjIyr+zs03JluxEjRlBQkPn6JwJUpbsEUBjVhd8RkxF2zpYYeFRaTYsN8HdNYdiCaHTXMLnSl3fnb2P/w8+0cZ2pKcNeqM6Wl2d/1fuECRPkCsC8dJkAJjG8AJ2dV0zbD9n/k6mWjHI3zhKLtx9V7nzp1e6jOXTidKGM+EiK09/xr2h8/nHqThnxJOYqT+zbXkbmlp9vf5P6IUOGyBWAeekyAewe3ozc3fm1QEjT8a7SidxC9vef1HQmv4S27M+Skf6kMaxk9vBwpS5tm8lIP+b+tIF95buY9+vCsQeWBvLP2JcAhoeHU2RkpIwAzEuXCaDof5XMcKchRcfHwMsMcCfOWhyTKEtxbNY9pFNL3fWmE3dB07bx/jgY2SOMekaEyAjOnLGv8f7ll18uVwDmpssEUBgcx28qyPb92XQ6/6yM9GWhgad/1EWvR955hSW0aS+/3ctkhp+T9Skrr6Cnf9ggI57c3F3poXHdZASCvUfAQ4cNkysAc9NtAtg/qrlc8bJMh7tKop/csnT9t7Gx1u7DucrRt94szziqVDJz0z9KX9M/vlq+SxnlyNmdQ6OpRYCPjECwtwXMgP795QrA3HSbAAb7eVFcuwAZ8bFIh8fAazNPUCnz0VeOspRhK5WGpDK8a9olPJCCmnrJiL/sgmJ65Y9tMuKpWYAX3ZzcUUZwwdmztp+yiOKPpk3116YIwBF0mwAKHKeCpKUfV46W9GSJCZo/10VvR9+icnnRdn67zBw/F+vz+rzNVFTEuxn44+O7UWMPNxnBBfYkgMOHD5crANB1ApjYkd+do7NnS5V5onoy34T3/y5YnnFCOQLXiy37TlFBAb/EJSFWP+1fMo5k0zcr9siIp+7tm9Hwbm1kBFXZcwQ8aNAguQIAXSeAUS0DyLepp4z44HhEV5fMY7l0nGE/OWcRR99/7+Y3T7cuqQzvmPr7elJkC37XMeoy+4f1ythDzp68vIdcQU3FxcVyZb0ePXvKFQDoOgEUbbFYTgVhOKGhLkt13ApFLXqagLKA4W7tKB1N/1iw6QCt231KRjxNHhhB0ZU/3ELtystt27EfNmwYNfbkt2EAoBVdJ4BCUiy/Y2BRWXjwFO/qwgvMNP2jLinM+8BdcDynkPYc4desO5nh52BtikvLafbPG2XEk5eXO907uouMoDa2JoBJSUlyBQCC7hPA3h1CyMWVX4d8PeysiX5yG/fw3g1xhmNZBbTnGP8pKBwrll1dXahnRLCMePskdQedPG1fCxFH+9eoOArwwS5VfcrKyuTKOv369ZMrABB0nwB6e7rTwBh+PQH1MBVkRcYx9nehnEUPU0E4VizHdwwlr8rPQe5Ev8e356fLiKe2oU3p6kFRMoK62LoD2K0bGmoDVKX7BFAYwnAs3JpdJ6iomHebicU6nl2stoXbeB+Fi0rlFTv5FauI8W968OKvm9j3uhTzfl1dMO+3IS4u1n/bio6OpsDAQBkBgGCIBHBANL8EsKL8HK3axXe6RnnFOV02rXaU9ZlZlH+Wb8IuKpU5JjD9o/i3f9m09yT9tvaAjPh6J2U7fb9qN+UU2F7lagZubtb3RsT9P4BLGSIBDAtqQuEtfGXERyrDhr0XbNl/igoKtU94fLzdydtL+yNEMVptRTrf9yt1O78dyg6t/KhlIO8xZeKKw1M/rpcRb2t3naQnvlpHAx//me74II1SNh+kUp01lXcGd3frv1707t1brgDgAkMkgMLwzvzawaQwrrBdwuTO29BOLWlIJx67SJyPxBcwbC00XAfTP37+ew+lH8iRkT6IH0aWbjtK9360ggbN+Jle/GUjHcrKl38KtiSAcZ3i5AoALjBMApjUkd9RVHZeMe04lC0jXuZv4ZGcDo5rScmxPBIJMWJNjFrjZvexHDrBsFl3IvP2LwXFpfTsr5tlpE9n8kvoo0UZNPzp3+nuD5fS2ky+10qcxZYEMCY6Rq4A4ALDJICd2jZjcZRYU9oOfruAR7MLaO/RPBlpRzTy7hPZnPpGhcon2hLfbLceyJIRHxxbComj+9jWvC/Vv7dgG+WdMc59usVbjtANb6TSFa/MpyXMi5YcydoEsF27duTv7y8jALjAMAmgqJ7jWJHIsR0Ml35yvSNDyM/bQ+l71rMDj15yaQzvbaYwbP8yrFMr1hWrohH7R4t3yshYtu/Ppjs/WEaXvfAnpZowEXT3sC4B7Nu3r1wBQFWGSQAFcZzIzbZ92XQ6/6yMeFjEZPLFsCr3Nrnc4ZzP7N7mmaJS2riH367kYCb3Nusy96cNSiW+ke0+nEt3VSaC17y+kDbvN09Ddz8/P7myTGxsrFwBQFWGSgD7RTVXjhW5WcboCO9sSRmtyOBxjyihyr3NeCZ3OMU3VdE0mIvl6UeVogBOlKP7Dvyar1+wMuMYpepoHre9xDSfq15ZSA9+voLVx66j+PlalwCKHoAAcClDJYDiOLFHe35jqThVl4p+cmVl2reWaBHkQ62bNZURUbsQXwoJ9JaRtpYxagfDsTJZHN37Vn6ucST6Wz794wYZmcu8dQdp+DN/0GdL0pXXwah8fa1r+RUeHi5XAFCVoRJAYVhnfsfAS3YcZ/MFmUtCMaZ7mFxdNKbbpc+0wGXkmqhIXszwTqJo3cPV18t30b5j2hc4aaWkuIye/XGTUiiy+6i+2t9YytoEsHWb1nIFAFUZLgGMj+F3N+ns2VLasJfHGK8FTO64JdXSQqS2Z1pYnnFcGb2mtS37TlF+QYmM+Ehg2v4lt6CYXp63VUbmlnEwhya8OJ/eT9lmuN1AXz/rEsDQEB5dBgC4MVwCGB7qx+YosapUBoUXO49kU1aO9gUpHp5u1KVtMxld1LVdM/LwcJWRdkpKymltpvYJO5dm3VWFVn5utalydM/J639uocIi3vO3nUkUwbz621a6/s1FdDzHOHcDfZtangB27tzZptnBAGZgyM+MUV34TSjgUF3KpcXJ8M4tyc310g89DzdXNq18ljBo37OAYfuX0UyO6WvadTSbvlqWKSOoShSJjH3eOC1jgoKC5KphERERcgUANRkyAeRylFjVoRP5mo9zSmHyDWBwXN0J+hAm48Xma5x8iR2bzCO5MuKD4+eW8Pyvm5W5v1A7MfdbtIx5+88tun+dPDw8KDTUsmPdNm3ayBUA1GTIBLB7RDCLo8Salmq4A5ddUEyb956WkXZEC5H6Jn/0jeRxX+f46ULae1y7BIxLs+6qxNG9OKbnaM/xM3IF9Xnzz+009eOlVFis76PyyMhIuapfixa8+1UCaMmQCaA4SkyM5denTMsduBVMWpuINj1i8kddgpo2pm4RPJKMNA3v4C1iOEFmcFxz5XML9G3R5iN0zRsLKetMkXyiP23btpWr+oWEhMgVANRkyARQGMzwqGrNrpNUpNFP3lwSCkva9HBp5aPVCDZRgbw8g0fVeFXJTI9/wXo7D+XSFa+k0P6T+tw5DQuz7C6qNfcFAczGsAnggGh+W//l5RW0epfzp3CINhCLtx+TkbYSOjacRFjyzzjD+sxTlH/W+Qm7aNZdWqp9G5qa+kfxnf4B1hPXHK58LUUpoNGbVmGW3RX29/eXKwCoybAJYLCfF8W2DZARH1o09t2494TSi1BrwYFeysSPhrRv7kdB/o1lpB0xgk2Lo/PU7fyqNTuHB1IzXy8ZgVGcyS+ha95YTOmH9JUEtmvbTq7qZ+3cYAAzMWwCKAxjOLEgRYN2MKlM2r+M6Wp5R35r/llH0mJyygKGc2yH1VO5DfomKoSve2sxZRzWTxJo6Xi3Jk2ayBUA1GToBDCxI79vWtl5xU7/aXvBFh73/5LjLE/IrflnHWlRZfLszLYZmcdy6cRpfk17E2JRTWlkooH2je+k6uZOYLt2lu0AenvzGwoAwIWhE8DoVgHk27TuilOtpKU7LyETvQcPnND+i7q1LUS6hQeTu7v2FafiiGzrgSwZOd5ShtM/Anw9Kaolv+sUoK68yo/1G95ZrIupIWJnz5IWL15euLYAUBdDJ4Ci59zIzvx2AZ05j1fL3oNVDYlrYVULEc/K5C+58n/DwRInHgNzmdVc1YguPKd/gPpOni6iW99P00WfwO7du8tV3ZAAAtTN0AmgkMTkKLGqbfuylcbMzsBn+of174Mt/xtHWOCk1/BMUSlt3OO83UZLof2LuYgJNP/+bCVVMB8ZEhcXJ1d1QwIIUDfDJ4B9O4SQi2sjGfGxzAmTHsRP8at38egnNyDG+t28gTE82o7sOpRLJ3Idfyy2IkPcN+T1TVd87vSq/BwCc0nbdpRe+nWjjHjq3LmzXNXO1RVNywHqY/gE0MvTnQZE8xgvVpUzqktFz8GKcu0Tim4RQfVO/6hLUFMvpf0IB8uc0A5Gi4rjhsRXJuFeHm4yAjP5eNFOStl8QEb8xMbFylXtUAEMUD/DJ4DCEIbHwKnbjysNmh1pMZvpH7bfw+TSfmShg6eCiOO2Rdv4FYAMYdhKCZznwf/+zbYyODoqWq5q5+PjI1cAUBtTJIADbTh+dDTRmHnDXscez6YwSQDtmeyRyKQQZHnGcWVEm6Ns2Z9F+QUlMuKD40QdcJ6S4jK699PlVFpeIZ/wIXb4YmPr3gVEAghQP1MkgGFBTahd84YnUDjbEgdW6G4/dJpy8pxTaFKfIH8vZbKHrSJbBChtSLRWUlJO6zJPykh9aQzbv7Rv6UctA/FN1OzEHdg3/9giI1769e8nV5dCAQhA/UyRAAojujBsB+PABs1pTO6TjelqfwuR0d14tCFxZDsYju1fhjNsoQTa+CAlndbt4VFQVlW/vnUngO4e7nIFALUxTQKY2JHfUZZo0CwaNTvCAgffWbOUGm14kmJ5JCKOek1FhfHuw7ky4iNRR9M//H08qImNvxo3dic3d1dqJBqHQp2mfbmGiksddw3CFj169pCrS7m7IQEEqE+jc9z6TjiIKLjoO/1HZeQRJ09c3oOujo+UkTqyzhRR/BO/yEg7Hh6utOaZiVY1gK7N2ZKyyvfuJypl8M3n90dHUniougPmv1+1m574ap2MePDxcafVsyeSi8mSInHXreBsKeVX/sotLK5MzouUX0dzCinzeB5lnsin/ZU/uJ1zcAEXV7cPi6H7x3SVkfbOFheTV+PGMqouPj6e0tLSZAQANZlmB9DVpREN6cRvR2OhA44VlzG5T5YY29zu5E9o7OFG8R15tPJZ6oB2MI6uMLbF0LiWpkv+BHdXF/L38VTuDce1DqLkTmE0eWCkkvS8cUs8zXtkFG164Qr68aHhNPvqXvSPARHUPMg89yQ/SMmgnUecO8u8Po09PWnw4MEyqg47ugD1M00CKCQzOUqsavXOE1Sk8tilhUyqf4eo2MJFzX+XPVJUTtZEZfHyDH53q7hMYeHIrTJJFHPGJ/VtT09d2ZsWPTGWFs4YqySEgyp/6OHYeF4t4sBo5nfrZcRDQkKCXFVXUcGvchmAE1MlgP2jQpX5wJyUl1fQ6t3qJQDiCCst/biMtDUgWr1JHlymgqzbfUo5HlTL35XvPYej7arE50jfSB6vt160CPBREsL3b0+kVXMm0jPX9KYu4UHyT41l455T9OcGPg2iBw0aJFfVmeR2E4DNTJUA+vl4Uo/2zWTER6qKO3brM08ovbu01qldIDXzVa8NQ4ifN3VsEyAj7YhvKisz1DsGdmRlsa16RYaQr7eHjMBaTRq704Q+EfTVfUOVO6NXDoggV1djfamd8/NG5W4uB3369JGr6srKePz3AXBlqgRQGNqJ3zHwAhUTwFQmCcVwB7zOwzvzOJZcrOLEDi7V2lUNw/QP1YiCoZlX9qbUmePo5sFRhkkEs3KK6MulO2WkraZNm9Z6D7CoqEiuAKA2pksA4xlOBcnOPUsZh9W5WD3fgb0FrZHggBYiiR15JO+icEeN06U9x3Lp+OlCGfExiOHniN4FNW1MD13WnVKeGEPj+7SVT/Xt7ZR0yivkMb1m+PDhcnXR2bNn5QoAamO6BDCiuR+FBHrLiI+0HfYnbvtO5NHRrAIZaSfArzFFtVT/uFZcvPdtqv1UkDP5JbTtYJaMbMdx+oeoaG0Xwm9qjlGE+nvT3Gv60ef3JlPb0KbyqT6JllofLd4hI20lJF5aCJKf75geqwBGYboEUBjJcMKBGkeBS5kkFKO6Oub1FcUJox3077aWGnf3Fm7jN/1jJMOJOUbUMyKEfn5oBN2YpG4PUGf7ZMkuyinQfuRkr569Lhn9durUKbkCgNqYMgFUYzqF2rbuO03Zdn4h5TJOzJHtdri08rH3tT5TVErrM+3fRVRbUizu/zmL6JE5bUIP+uCfCeTjrc+pFWJG9udp2t8FdHd3p8mTJ8vovJKSElQCA9TDlAlgj4jgyi8Y9jcoVttyO5oMi9YkokWJ1tzcXKhn5evrKL3aB7O4SL/zUC6dzLX9krmoJOb2zUlMbukWzq9K3ugGxrSgHx8YTu2a6/Po/eMlu1RtjWSrMWPGyNVFBYXaX4kB4MqUCaD4yTuByWSJqhbbUQ3MJaFIiG2uTO5wFC9PdxoUw+O9W2ZHwr6IYfuX5LgWqkxuAeuJySPf3D+UujNsU9WQs5XJ33crM2Wkndoqgc/knZErAKjJlAmgMIRhO5jUHceUmcW2ULM1iT2cMbFjKJN2MLbe4auoTNQXMXm/qkrG8a+mRP/Aj/6ZRPGVibjefLhkp81fu9QSGBhIY8eOldF5uXl5cgUANZk2AVRzSoVaiopKaeNe66eCiITCETOFbeGM13VANI9vkMvSjyuj3Ky19UAW5RfwaJ9RFcfPCbPxdHelN24eSH2jQ+QTfRB9AVM2H5SRdq644gq5Oi87+7RcAUBNpk0AuUyWqGmJDZW82w6cVlqTaE28nqLNhaOJsVtRYX4y0o64AL9+z0kZWS5tO7/dP7Unt4DtxDH827cMUt4TPfmUQTHIqFGj5Oq8rFP8Cq0AuDBtAihwnHgwf7P1O3lcxok58/V0xKQRW9gyxm8+k2rtqjD9gxdx1/WdKfEU5K+fpHzjniylubmWQkJC6LJx42REdCoLrWAA6mLqBDCB4Z2nAyfO0GErmzkvYNJPLsmJLVoSnXDX0BLW9m88kVtIuw9r+02yNhw/F8xOTA/54NZ4pbJeL75bvUeutHPNtdfKFdHRI/x22wG4MHUC2LFVIPn7aj9ZoqalVkwFEQnFrkPaJxQBla+jmNThLB3DeEwFEZNXxAQWS9lTOewoYnJLtAMmt4D9Yio/zh8Z31VG/H27Zi+VllfISBviGNjV9Xw1++HD/HbbAbgwdQIoJksMY1gNbE1BhzXJoiON6NJKeT2dxaXy/2wEk4ku1kxgWajCxBe1jWBSVQ21uyY+SjdFIQUFpbRC4x9yfH19acqUKcp67969yu8AcClTJ4BCciy/lgurMk5QUUmZjOrHJaHQYoIEl/fO0qkgomJYVA5zg+kf/D17dV/y8tLHtJBf1u2XK+1cd911yu87dvCYVQzAkekTwL6RoeTi6sStKwuUl1fQ6l0NJwrFpZUJRWWyqDVxR6l3e+fvUHB579ZlnrJoEsLazBNUWvmecaLVewfWEdX1MyZ1lxFvCzYfpsJibSeDDBo0iKKiopQdwOJi7WcVA3Bk+gRQVNv1j+Y3FcSSyl6RUJQxSCgGVr5+4nV0NvH/OYDBe3eu4hyt2tnwsdcSOya9OIp4/bR478B6l/UOp5g2/jLiq6ysgpbZ0M5KTY0aNaKpU6cq60OHDim/A0B1pk8AhSEMj8DmW3C0m7qdxwXnIRq2EBkSx+O9s2QSiyXvqbMN1uHUCTN79LJucsWbpdciHOmqq69Sft+zR/vKZACOkABWGtSR3zfB7NyzlHE4W0a145JQiGH2WtHy/7uqhduOUH2jmEV/tOOnC2XEx8Bo3P/Tk94dQmlQLP+JLQu2HLFpSo6amgU1o3vuuYcyMjLkEwCoCglgJTGIvV1zXxnxkVZPhe/uYzl08nSRjLQTGeanTObQinjvIlpqPxUkL7+Eth2se+rAUobtX8Tr1ipIu/cObPPQuC5yxVdJcRltsGFKjtr++c9/0tatW2UEAFUhAZSGM2yFkVLPnTFrWo840ggGbXS4tINJq+feZgrD49/hmP6hS5EtAmigDnYBl+88JlfaiYuLU9rCAMClkABKiQzvAW7Ze5qyC2qvYBNHLBwkMriDl8ilHUwdCfuZolJan8lvJBXHj3mwzA2DIuWKr0XbtU8AhYkTJ1JenuXN2gHMAgmg1KVtM/Jm2GertqaquYUltGmv9gmFbxMP6him/cD6uNZB1MTHQ0bayTiYQydzLz2WX5lxlM7Vd0FQAz4+7tSpTZCMQG8GdWxJLZgf3+85kkun8rS/ptK/f3+qqNB2OgkAR0gAJVeXRiwrIhfVsqu0QkkoZKCh4Z1bKRM5tCbeu2FMjjNrG/W22IrJLs4iqqfF6wb6JD7tbkrgvwu4nsE9QMHfn3/7HABnQwJYRTKTliJVpe44RuUV1bO9xUz6yXF6vbj8tyzaVr39RUVlpr7QghYxzjYYx7+6d1mvdkq/O87WMkkAAeBSSACrGBDV3KnzbC1RVFRKG/dd/CIqksFFDBKKRi6NlJYUXPSNFO+d9m/e0vTj1dpfbDtwmvILSmTEg3iZ+lZ+rIO++fl4sp8RvGI3EkAArpAAViG+oHaLaCYjPtK2X0z4Nu8/RYWVSaHWBsSEUpPGfO5MNvVyZ/HNsKSkvFr7C0smujhbzw7B5Oet/Z1JsN+ormFyxZO4B1ig8Vg4AKgdEsAahjFoa1LT/C0XjxXTmLR/GcrwuHxYHI/3LrVK0regxpEwBxw/xsE2yUw+5uuT3kBDewDQBhLAGuIZTgXZf/wMHc4qUNZ/beaRUHCZwFHVgBgex5rzZYueE7mFtOtQrrLmhOPHONimma8XdQnnXc29/SASQACOkADW0L65H4UEesuIj2XpR+jI6QLad0z7flZigoSYwMFN2+Cm1Da0qYy0c7QyWd93Iq/WimCtidYh7ULQGNdIOO7GV7X54Gm5AgBOkADWYgTDCQliKsjSekbDORPnCRIjuvA4EhOTWhZynP7BcOIN2Kc78x3AbYdy5AoAOEECWIskhvdqVmWcoJ/XHZCRtjhPkODy3/b7xgO0LP24jPjg+LEN9oltHcS6Hcz+E2eorByNmAG4QQJYi57tg8nd3VVGPJRXfgHduEf76R8+3rwnSIiJLl4MJrps3nuaSksvtoPhwMPDlbqH86tyB/t4ebhRbFu+jY7PVZyjAyfPyAgAuEACWAsPN1eK78inxx0nooKU8wQJ8d82lPERtZYSY5srH9tgPH0iguWKp70nMYsXgBskgHUYgqOyWg3WQXIlxpzBpfAxbVxdmc91PnAqX64AgAskgHUYyKSlCCfinpGYuMGdmHLB+EqUZgZE42PaqCJCeVd2IwEE4AcJYB1C/Lwppg0GiFclJm2IiRvciSkXvSJ5j8hytrh2AUrPODCm1s20b39Un31IAAHYQQJYj+GYmFAN935jVQ3DPcBqMP3D2DzdXSmUYf/SCw7KRvYAwAcSwHrEd0QSURXH6R91wXtXXSJeD8OLbM73GPhETpFcAQAXSADrERsWSL5NMDRfEBM2xKQNvRD/rc2DfGRkbv6+nhTVMkBGYFQdGN8DLCuroLzCEhkBAAdIAOshCgmGd8bRmaDH12F01zC5MrcRle8dimKMr1Ug7x94TuVhFxCAEySADUhGSxFFkg5fh+Q4/RxZO1IS48ktoJ7AJp5yxVN2YbFcAQAHSAAb0CcylBoxbnzsDGKyhpiwoTdd2gWTh6ebjMzJxbUR9e6AimgzCGrSWK54ysURMAArSAAb4OPpTv2jzT0VREzW4Dz9oy7uri40rLO5d79EP0vvyo9hMD7uO4A5BdgBBOAECaAFhpj8CG2wjo/B9fzfrobBsTgGN4sA5gkgdgABeEECaIFBHc07QUEUD/SL0u/fX8//7WoYFIP7f2bh78P7CLiwuEyuAIADJIAWEF32RRsUM+rZIViZrKFXAT6e1L29/u4vqiG8hS+1Qisc0xDXNDjfeS0sQQIIwAkSQAuZtR2MESZImHUKBloYmY+HG98v6UVIAAFYQQJooQST3qVKMMD9x0STvndJHXH/z2w83fl+SS8sKZcrAOAACaCFurULVtqhmEmLIB9dTf+oS3ioH4UwnpPqCN6VH6uddNi6B+zj7uoqV/yUV5yTKwDgAAmghcT9msEmayw8ykCTNEZ1Mddx6BCdtu4B+3gyPgIuK6+QKwDgAAmgFczWUiTJQAlvUpy5EkCzt78xKw/GR8DYAQTgBQmgFQZENTfNTFVx3N093DgTJHpEBJOHB9/jMTWJj9H+Jm9/Y1ZuLny/pFecQwIIwAkSQCv4+XhS13Bz3KtKjm1uqCNEMRXELLOBe7QPJl8dt+4B25WU8T1mxZUEAF6QAFpJjEUzgyEGbJ1ilmNRs4+/M7PiMr6VtuKHMADgA5+RVjJLOxgjTtAYEG2O9y4+xlzFSnAR7x1AfLsB4ASfkVbq0NyfmgV4yciYukU0UyZoGE1Q08bUJTxQRsYk2t2ItjdgTiWMdwDdcAQMwAoSQBuMNPiEBSNPkBhu8KkgZmt3A9WVlPLdAeTcpBrAjPAZaYMkg98lSzDwBAkjTDapT5LB/35Qv6JivuPWfDwvbaS/f/9+uQIAZ0MCaIOeESHk5m7MliLiCDGiuXGPEDu08Kcgf2Me4btXfkx2jwiWEZjNmaJSOse4156Pp5tcXbRt2zYqLCyUEQA4ExJAG3hWfqONjwmVkbGY4QjRqH/HxNjm5OFmjl6HcKnT+WfliqcmjS/dAezevTu9++67MgIAZ0ICaCMxasuIzDAxI9mgf8chmP5hatnME0DvWnYAW7RoQQsXLqSjx47KJwDgLEgAbTTIgK02xKSM7iZodC2mghjxCN8sbW6gdqcLiuWKJ1+v2puTjx07lp6e9bSMAMBZkADaKMTPm6Jb+8vIGJJiW5jiCFEc4Sd2NNYRfmzbAAr2M3Z7Iqhf1hneO4CiDVNtRo0aRe+88w5t2LBBPgGwzL59++QKbIEE0A7DDXYMbNRj7doMNVg7mGEmeu+gdoeyCuSKp7p6i7Zr14769u1LDzzwAJ3DvGCw0N69e+mJJ56QEdgCCaAdjNZSxExHiEb7uyZ0NP7dTajf7uN5csVTQJPadwCFq6+5mhYvXkw//PCDfAJQv8cff5wWLVokI7AFEkA7xIYFkW8TYwzdFxMy6jqiMSJxXBrXLkBG+ubv60kxrYzxdwHbZR4/I1f8NHJpRH7edX+tHDtmrPL7/fffT/kF+coaoC5paWn05Zdf0pEjR+jEiRPyKVgLCaAdGjUSR2/G2Hkxyt/DGkb5O4vpJuJjEcyrvOIcHTzFN3EKDfCWq9q1b9+eevXqRYcOHaLXX3tdPgW4VFlZGd17770yItqxY4dcgbWQANop2SB3rxJNOEHCKH9no0+mgYYdOZ3Pugl0myAfuarb9Tdcr/w+ffp05X4XQG0++ugj2rRpk4yItmzZIldgLSSAduobGaocb+hZcKCXMiHDbKJbBlCQv76PvV1cG1HfDiEyArPafSxXrniyJAEcN3acXBFNmzZNrgAuEse94ppAVRs2onrcVkgA7STmW/aN0vc34BEmPP69QO/HwAOiQ8mrlhmrYC6b9mfJFU9hFiSA4eHhNHDgQGX97bff0oKUBcoa4IIZM2ZQUVGRjM5buWKlXIG1kACqYKjOj+DMfIQ4WOd/d0z/AGHd3lNyxVProCZyVb/rrrtOroim3jOVzhbzbm4NzrNy1cpaxwaKO4BnzvAtgOIMCaAK9NwORkzE6Blh3iPEXu1DyM1Nv58GAw04kQasIwpANu3PlhFPESG+clW/8ePHyxVRRkYGvfnGGzICMystLaW77rxLRpdCIYhtkACqIKzyp9uwEMt+wuVGTMQQkzHMqrGHGw2K0edUkHbNfZWPPTC33UdzqKy0XEY8tQluKlf1E7OBR48eLSOihx56CAUhQG+/8zZt3LhRRpfatm2bXIE1kACqZGQXfd4lG2Li+38XDO2sz9dghE4/5upTUlZO89bvp9W7jssn0JANzI9/mwf5kFflD1qWqnoMLDz44INyBWYkxr098O8HZFS7+pJDqBsSQJUkdtTnUdxAE03/qMsgnR6j6vVjrjZHThfQa/M206AZv9CDn62i1/7YKv8EGrJo+xG54immhWXHvxeMGj1Krs4T00F+++03GYHZiKrf8vL6d7hXr14tV2ANJIAq6doumBo31lc1ZmzbAGUihtmF+HlTdGt9tcHx9nKnzm2byUifxNjX5elH6c4P0mjorN/ovfk7KL+gRPmzjXtO0a6jvO+1cVBUUkYrM3hPQogLs25Kjb+fP918yy0yOu+uu+7CRX8T+u677+jnn3+WUd1EAoiCIeshAVSJm6sLDY5rLiN9GK7To09HGKGz12JIpxbkqtP+kzkFxfTJ4nQaMvs3uu3dNFqy7aj8k+r+t3y3XEFd1uw6TuXlFTLiqVPrQLmy3HXXXitX5x08eJCeeeYZGYEZnDx5km6//XYZNWzXzp1yBZZCAqiiwXH6SiISO6KFyAV6q+ROjtVf8r71QBY9+uUqin/yF3r+5010LKtA/kntvl+9n3ILz+8IQu1SmR//CrFh1ieACYkJ1Lp1axmd9+yzz9K69etkBEb373//m7KzLT8FQCGI9ZAAqmhAtH52AAP8GlN0K+uOZoysY6tA8vf1lBFvYu5vf518rJ0tKaOf1uyhCS/+SVe+nEI/r9lv8Y5VaWk5fbk0Q0ZQk2j/8teWwzLiKaDyc8qWayZurm50zz33yOii22+7nUpK8EOB0Ylj3y+++EJGlqk6Hg4sgwRQRf4+ntQtIkhGvOntyNPRRFI1XCcV0T3aNyM/bw8Z8bT/5Bl6/ucNNHDGL/TYl3/TzkO2jSr7aMkuKiwulRFUtWrnMcrJ433vqVeE7fdUr7nmGrm6aP369fTaa6/JCIxIHP3ePOVmGVnu77//liuwFBJAlellKkiyjptXO4peJqIMYXrVQOxIpW49RFPeTaVRc+bRJ4t3UlGRfclbQWEpfbcqU0ZQ1Q9r+PfH69fe9h6bYWFhl7SEER5++GEc9xnY1KlTKTvL+gKw1KWplV+DePfD5AYJoMr0cJdMTL7o3cG80z/q0rfyNXFx5V9YkcCs/UvWmSL6IGUbJc36le76z3Jama5uD7+3U9KpCLuA1eQVltD8TbyPf4We7e2rVL/r7tqnP9xyyy1UjKpPw/n000/p66+/lpF1ykvKae8eNA23BhJAlXVo4U/NAni3VhGTL8QEDKjOy9OdBsbwvlsXEuhNEc39ZKSt9XtO0IOfr6CEGb/SK79tpayc6kPa1ZJ3ppg+XYK7gFX9udHyu5Ra8fF2p8gW9t0z7t+vP8XHx8voojVr1tBzzz0nIzCC9PR0mjJlioxss337drkCSyABdIARnXnvAup18oUzDInj3Vx5pMbvnbiP982KXTTmuT/outcX07x1B+lcxTn5p47z7sIMOp1/Vkbw2TL+x+L9I0OUu7X2Eke+tZkxYwalpaXJCPQsPz+fJk+e3GDD54Zs3rxZrsASSAAdIIl5iw69Tr5whnjmrXG0uqeYeSyX5vywlgY8+QvN/GY97T2aJ//EOUqKy+id+ZgOIizbcYT2HLGtqMaZkmLV+TojJoPExsbKqLorr7ySjh6rvY8k6MO5c+eURt9qJG/r1qFNkDWQADpAr/Yh5ObuKiNexMQLMfkCatciwIfat+RxxFqTh4cr9YgIlpFzFJeW0/VvLqRxz/5J/03LVBIxrXy5NJMyDmM6yDspO+SKN7V+0HR1caXHH39cRtUdP36crr3mWrSG0bG5c+fS559/LiP7LFmyRK7AEkgAHcCzMvkbFM2zyGJ4J31UumqJa4uc+JhQ8nBz7g8W4mO5sIRHZZ0YHffEt2uV381q8/5TtCHzlIz4igzzU/UHzcsvv5zatm0ro+oWL16szIsF/fnss89o+vTpMrKfaBx9+DD/4igukAA6CNd7dgk6nCDhbIlMK7mHaNSn8PLe7eRKe1v3nabvVpl3RNy7C/RxyX2Yyq2KPDw8aObMmTK61DvvvEPPP/+8jEAP5s2bRzfeeKOM1LN9BwpBLIUE0EE43rPzbepp01gms4lrE0hNfPg1Wh4Yrc3H1IhubaiRGrf5VTL35810LKdQRuYhqq5Tt+rjvtuwrmFypZ6rrr5a6Q1Yl2nTptE333wjI+Bs+fLlNGbMGBmpa+sW3BW2FBJABxHHH1FhvO6SiaNNRt/H2XKpfJGGM9vB7dgmwKaRWmoIatqYBsXyaY9z9mwpPfzfVaY6ChZ/1zk/bZQRb62Cm1B0S/XHTDb29KRZs2bJqHaiklQcCQNfGzZsoGHDhslIfWJaDFgGCaADcRstlqyTSRccDGZ2V3KYxv89E3rVfv9KK2t3naTPlqTLyPh+X7+PdhzQRwHMxJ5t5Ep9Yjxcu3b1X0kQycXKlStlBJyIXn9DhgyhoiLH9AwVli1bJlfQECSADsRpKoirq4sy6QIs0zcylBq58Nku1fpjKSmulVKFzMkLv26mbQdPy8i4zpaU0XO/6mfQvbgy4Cienp40Z84cGdVO9JITSYbYaQI+MjMzKSkpSSnUcKQunTvLFTQECaADxbUOoqZNeNwlGxATqky6AMv4VL5W/aJ4JMzi7mbHVtre3fTycGO3C1hRfo7++eEywzeIfmf+NsrK0cffMaaNP7V38KQa0fsvLi5ORrUTO0zJycm0ZcsW+QS0JJK/hIQEpW2Po814qu5iIagOCaADift2w5gcA3OfcMERl/eOy93Na+M7yBUfYvzcfZ8sp3InTCPRQvqhbPrPQv2Mwbumf3u5chw3NzeLxsDl5ubSgAEDsBOosQvJ35EjR+QTx7nuuuuoR/ceMoKGIAF0sGQmiRf3CRccDerI471LVmmigr3EXNeeHZzbiNoS63afoqe/Wysj4ygpK6cHlGIXfSS3ovn9yO7O2SUWFaTimLchYsTYwIEDae1a43186MHu3budlvwJTz75pFyBJZAAOljfyOaa3yUTky3EhAuwTlhQE2rX3FdG2nBxbUR9IkNlpL2bk6LkipdvVuyhN/8w1nHfS79sdPrIPXuM7d6amjR23jUTS3YBBXEcLJJAFAc415atW5QdWGclf//6178oMjJSRmAJJIAOJr4g9onUdteEW0sTPRnRRdvXrl9UKHkzuruZGNuKggO1aUfTkLf/2k5fLdslI31buOUgfZ6mr4bX18Y795tvz549LW4kLEbFxcfH0++//y6fgCOJKuy+ffrSyZMn5RPHcvVwpYcfflhGYCkkgE4wVOO7ZElMJ1voQZLGx8BDmbXucXVpRDc5+Ru9NWZ9t56+Xq7vJHDfiTx64Is1MtKHbhFBFNfa+YVKoi+gq6vl1eljx46lL774QkbgCH/99ZeSbDuy1UtNzz3zHDVvzqdXqV4gAXSCBA2TCFGFLCZbgG06tW1GPj7a7cBxuYdY1aS+7dm1hKnqqW/X06ep+uwRKCqab3kvjUqKy+QTfZiSHC1XztWmTRuaO3eujCxz/fXX04svvigjUJOY7Tty5EilFY+ziBnRd955p4zAGkgAnaB1s6YUFtJERs4lKlnFZAuwjdjxGqLRLpy4fyjuIXLj5+3B9i7gBc/9tIlem7dZV9NCCopL6fYP0uhYVoF8og/Ng3wouZP6o98sdc8991BEhwgZWeahhx6iqVOnUmlpqXwC9igrL6NHH33UIbN9G/Laa6+Rt7e3jMAaSACdRLTy0AKXKmQ90yoBHN6Z79H9TUkx5OHpJiOe3pu/g6Z+vJSKKhMr7opKyuj299No+359TPuo6u5hMZr+kOnl5UVvvv6mjCz35ptv0sSJEyknJ0c+AVvk5eXRlf+4kp599ln5xHkuGzeOxo8fLyOwFhJAJ0nUoJWHqD7uF4V7EfbqH92CGmnwDS6R8d1NsQt4K/NdQGHR5iN05WsL6cCpM/IJP3mFJXTzO4tpQ+Yp+UQ/mgV40WW9rdt9c4RRo0bRFVdcISPLiaIQUSG8a5cxioecTfT4E/f9fvzxR/nEecTdz9def11GYAskgE7SrV0wNXZiiwRBTLIQEy3APqKSu7eTK7m9vNypS9tmMuLphsRop39M2yLzSC6Nfe4vlhXCh7Ly6arXF9LmvfocaTd1eCy5u/L4NvLKK6+Qh4f1k5e2b99OXbt2VYoXwHLffPMNxcbG0ubNm+UT53rrrbcanAsN9UMC6CRulV8kk2Oduxs3NA7tX9QytJNzd+PE5BZx/5AzX28Pui1ZH323ykrLlQphsdMmqmw5WJ5+lCa+NJ/2HdNPr7+qxO7fhD7a7/5dEBYWRu+8846MrCMqVkXxwtNPP01lZfoqwHG2/IJ8+uc//0mTJ09W2utoYejQoXTbbbfJCGyFBNCJBjv5Llk8kwkSRuDs49hkZu1f6nJ9Ygw18eEx79oSqzNO0Ji5f9KcH9ZSdkGxfOpc4r7f3B/W0W3vplFBoX6LEB4e24XN7t8FN910Ew0ePFhG1hOTJIYPH0579u6RT6CqTZs2Kf393nvvPfnE+UTPv/fef49cXJC+2AuvoBMNjHFeQsa1glSvnFnJLa4bDojWR/IujscfuayLjPRBjFb7b1omJc/6jV74ZQMdOe28qtuUzQdoxNx5umvyXFNUmB+N6cHv+E0kBbbuAl6wePFiioqJovfff5/KK5zXzoSzs8XFNGfOHOrWrZtyZK6lD9//kCLC+ew86xkSQCfy9/GkLuHO6cmn9QQLIxrppNe0W0QzpchCLyb2aU8xbfxlpB+i197Hi3bSsKd/o3s/XkapWw9Rcan63/DLK84pkz0mvfwX3fvRSjqV7bwGuY4yfUJ35QcVjqKizidv9igvKac77riDkhKTNLvjxkVaWhr16d2bHn/8cflEO6LQR4tWM0aFBNDJRF8+Z0hk2EBY75x1DOzs+4b2EonAU5f3kpH+iF6BKZsO013/WU59p/9ID36+gn75e69ddwXFvzP9ULbSizD56V9p6ocrKP2AMdqNJHduSb078JlPXZtbb72VJkyYICPbifnBokDkgQceoJOn9FelbY/9+/cryVZiYiJt2aL9nO3Q0FB6++23ZQRqaHROnIeA0+w6mk3jn5svI8fw8XanVbMnsi8i0Buxk9OnMkEoKnLsva1fHxlJ7Zv7yUg/pv9vNf24ep+MjEF8LnVtG0Ttgn2oTVATahngo+zONnZ3Iy8PV6W4q6SsnM6cLaUTuUW0/+QZ2lqZ+K3JPEX5BdpckHckd3dX+vOxUdSi8nXg7vjx49QxriNlZ6nTW1H0G5z77Fy6dcqt5OPD/+9vKzG/9+WXX9akr199xNF8UlKSjEANSAA1ED/zF8rKcdwx0GV92tKz1/STEajp4S9W0m9rD8hIfSGB3pT65DgZ6UvWmbM0bM48OluZDIExPXhZF7plcEcZ8ffHH3/Q6NGjZaQOsRM1e/Zsuvbaa5Wk0CgOHDxAb7/1tjImz5mj3Cwxc+ZMmjFjhoxALTgC1sCILo494hvMuIGw3jm6OneEzo5/qwpq2piemNhNRmA0orBM9H7UE9Egetq0aTJSh9hZFC1IwsPD6Y0336CcXH0f7a9Zs4ZumTKF2rZpS8899xy75E+0fJk+fbqMQE1IADWQHOu4e4BiYoWYXAGOIapzHXn5PUnnvRsn9o2gpE74+DMa8TH/wrV9lCNvvZk1a5YyrUJtIhG8d+q9FBoSqszBzdiZIf+Ev/z8fPriiy+oX79+1LdvX/r4o4/kn/ASFBREn332Gbm58R47qVdIADXQq30Iubm7ykhdvSKDqakXpn84irj/1aO9YyZ0iPtVPds7d+KIIzw9uQ81baKfKmZo2B3DOlJc6yAZ6YuYDvLll19SQFCAfKIu0QxZ3JeLiY6hYcOG0aeffkqnsvgVjIjbXqtXr6b77rtPSayuv/56Jebsl19+oRYt8AOloyAB1IBn5Tf6QdEhMlLXMB0fIerFsM6O2aWL7xhKHm6O+cHAmcRR8NyressI9K59Sz+6c0QnGemTmBLy0w8/ychxUlJSlGbUwc2C6R//+Ad9//33dPq0dmP+RB/Dv//+W7mzGBERoez4vf7665pN8LDGu+++SwMGDJAROAISQI0McVCiloD7fw6X0NExr/EQA43uG9wpjMb3aSsj0CtXVxd66bq+7CZ+2CIhIYHefPNNGTned999p/StE7ttYjqJuF+XmppKOTmOvTN44MAB+umnn+jOO+9UEtE+ffrQE088Qfv26adC/+6771b6MIJjoQpYI8dzCil55q8yUker4Ca0YPoYGYEjDZ39Gx05pe4EiSVPXUbBfsapKsw/W0qTXp5Ph07kyyegNzP+0YMmD9THvGdLicRI7C5pSRSQ9O/fX2la3bZtW2rRsiU1q0wUAwMDydfXV/nl7l77VZ6KigpldnFWVhYdPnyYDh46RPsrk7v169bRgpQU5bmejRgxQjn6FUf34FhIADU0/sU/adehXBnZb8qQaHpgHKowneH5nzfQJ4t3ysh+YpLGD/8eISPjEM2UJ7y0QJm6AfoyvFsYvXrTQBkZhxhrNmb0aFq0aJF8wpefnx95e3srRRBnz55VjpO5VemqKTY2Vpk8InZNwfFwBKyhYSof+SU5uEUJXJSk8lH7cCdNiHG2diG+9OoN6EmpNy2CfGj2VX1kZCyNPT3pm2++oeho/i1tcnNz6ejRo3Tw4EGlQbORkz9R7CH6NiL5cx4kgBpSc7SYl5c7dWun/wpSvegREUwenuq1Joh30L1CDkRrm6mjYmUE3Hl4uNJ7tw6iJo2N201AJBm/z/udAgIcUxkM1mnSpAn9Nf8vatOmjXwCzoAEUENxbQJVa5cxOK4FRr85keiHNjiuuYzs49vUk2LDAmVkTP8c3hn9AXXilRv6UYcW/jIyrvYR7SllYQq5Via8oB1x10+MeevcqbN8As6CBFBDLo0a0VCVjm0H4/jX6dSq2h3eqaVDm0tzIP5+L17fn2LbYseFs/vGxFFypzAZGV+P7j1o4fyFMgJnE8l36pJU6tWrl3wCzoQEUGNqjBYT31zFhApwroEx6rzmjh4vx4W3pzt9eHuiMlIM+JnQpx3dMUzf/f5skZiYSL/+qm5HBmiYmKO8PG059e/XXz4BZ0MCqLF+Uc2pkZ1Ht2IyhZhQAc7l7+NJ3SLsu7Ds4tqI+kaGysj4/Cpfs0/uTKSQQG/5BDhIiGtBTxu06MMSY8eOVXrngXOIO3/Lly9XxtCBdpAAakxctO7dwb7ijaEGrSDVA3tf+76RIcrOmJmE+HnT53clKXcfQXtdwgPp1RsHmP4O8fjx45XJHeBYLVu2pDVr1lD37t3lE9AKEkAGhto5FUTNamKwTkKsfcfAQw00/cMarZs1rUwCE8nHB3OrtST6T75/WyI19sCwfWHSpEn0+++/ywjU1rFjR1q5cqXyO2gPCSAD9oxvE/26RK810EaH5v52HWfG25lA6llkiwD65t4hFORvnOknetKxTQB9eudg8sX1kWpGjx6tjGxDdbC64uPjaUlaGlq9MIIEkIE2zZoqY9xsMbwzdv+0NsLGHdy2oU0pLMi2990owkP96Jv7hlBYiLlfB2eLa1eZ/N2VTE29sANbG1EYsnrlajQlVsnVV19Nf/75JwU3ayafAAdIAJkY0dm2o8Bkkx4hcpJs4z3A4Ta+50bTIsCHvr5vqHIcCY7XPyaUPr0z2dCNntXQs0dPWrduHXXujP509nj00Ufp8y8+V0baAS9IAJlItOEoUEyi6B6B6R9aU6aC2HBcZO/9QSMJ8PGkz+8eTL2jQuQTcITxfdrSe7clmK7wyFZt27ZVZtOOGTNGPgFrfPrpp/TMM8+QqwuO0zlCAshE9/BgamzlT+RiEoW7K95CrXm4uVYm8NZNBcHovkv5iD6BdyTS5IER8gmo6a4RsTT3mn7KFBuwnL+/P/3080/05JNPyifQEHF0Ltq83HDDDfIJcISvBEyIL8pJsdb1gxuM4182rJ0KgtF9tROfBzP+0bvyVw+7+2PCeeKk4I0pA+ieUTjKtJWbqxs99dRT9PPPPyujy6BuAwcOpI0bN9KAAQPkE+AKCSAj1iZ0ak2iAPtZ+15gdF/9Jg+MpK/vH4KG0XZqE9KUfnpgGA3p3Fo+AXtcdtlltCN9ByUkJMgnUNUDDzxAKQsXUliYecYJ6hkSQEasSSK6hAcp96aAh6CmjalTu0AZ1U8Z3Rdl3ZGxGXVqE0S/PDiChnbFTrctrugfTj9UJn9oE6WuiPAIWliZ5MydO1c+ATHZQ+yOvvjii9TYE9+X9AIJICMioescblkSgQpSfoZZ2A6ma3gzZSQaNEz0qHv95kH0/PV9lXuT0LCmTTzo7VsH0qzJfVDs4SBubm70yCOP0Lr166hXr17yqTmJ5tkZGRnK7ijoCxJAZoZZeAyMClJ+LJ3IYu/kFzMa27Md/fHISBrcBa9dfcb0akPzpo2ipE44gnOGHt17KJMt3njjDXJ1NVela4sWLeiHH35QxueJ8W6gP0gAmbEksRP3osQECuAlqmWARVMtkLzbRswQfvOWeHr7tkEUHIjpIVWJRvIf351EL1zXX7mOAM4jdgPvuece2rN3D916263yqbGJimix6zdx4kT5BPQICSAzliQRtk6eAMcb0cAOFZJ3+yXFtaIFj42hB8Z1VipczczH252mTehKv08bSX0jresiAOpq07oNffD+B0oFrBgnZ0Qiwd23b59SEd20aVP5FPQKCSBDDY13E98Agafk2Prfm+FI3lUhei9OGRJLi54YQzcPjiI3d3Mdv7lX/n3vGN6RFj85jm5MilFeD+Cha9fKhPz332np0qU0fvx4+VTfROKXnpGuJLiiOTYYQ6NzleQamFi6/Qjd8f5SGVUnJk6seWYivuAzVVxaTn0e+5FKK3+vzX/uTKAB0TgCVlvWmSL6JDWDPl+WSSXFZfKp8fj4uNNN8ZF09aBICmyCo1492LJlC7362qv00YcfySf6ICp7//WvfynJn9jdBONBAsjQ2ZIyJYkoK6uQTy4SLTFEVSTwdfeHS2nxliMyukjs2vw9F8m7IxUUl9KPq/fQJ2m76MipAvlU/9o196UbBnWg8X3CycvD3MfeenXy1Cn64fvv6Z133qFNmzbJp/yMHDmSbr75Zho3bhx5eeGurZEhAWTqzg/SaMm2ozK66Nlr+9BlvcNlBBz9sDqTHv/fWhldlNy5Jb01JV5G4GhrM4/Tt6v20J8bD9e5I8uZuN84vmcburxvOHVp20w+BSPYsGEDzZs3j7799lsWyeCwYcOUdi4i6WvVCleMzAIJIFPfrdxNT369TkYXLX16PKr8mDuZW0SJM36R0UWzr+5Fk/q2lxE4S1FJmXKtYt7Gg5S64xjrI2JR1DGiSxgN69yK+kU1J0+T3W00I1FUsWjRIlq2fDmlLFhABw8elH/iOF26dKHhw4fToEGDKD4+ngIDLes/C8aCBJCpYzmFNHjmrzI6L65dAH17/3AZAWeTXv6L0g/kyOi81KfGKa1MQDtl5RW0cd9JWp5xnFbuOk5b9mfTuQrtvgS6ublQz/bNaGBkKPVuH0yd2jbDjGiTO3r0qLIrmJ6eTrt27VJ+FzuG2dnZ8p+wnBjJFhMTo/wSSV/Hjh2VX0FBQfKfADNDAsjYuOf/pMwjuTIi+tfYTnTb0DgZAWfvzt9Kr8/bJiOi6Nb+9OMDI2QEXIj7tjsOZ9OOQ9m0rfLX9iM5tPf4GSopUf/IuImPB0WENKXOlR8Lsa0CKaZVAHVo4UfurmjGAA0rKCigvLw8ysnJUX6JWHz7rqioUH53d3dXWrNc+BUcHEyeGMsG9UACyJg4Bv5j0yEZEU2f0J0imvvJCDjbfSyH5v60UUZEY7q3xvGvjohj/CPZBXQyr4hOVK6z8ospr0j8KlMKTcrKz1FpeQWVV5wjDzeX///V2M2NApp4UKCPZ+XvnsrvLQN9qFVQE/LBWDYAYAQJIAAAAIDJ4OwBAAAAwGSQAAIAAACYDBJAAAAAAJNBAggAAABgMkgAAQAAAEwGCSAAAACAySABBAAAADAZJIAAAAAAJoMEEAAAAMBkkAACAAAAmAwSQAAAAACTQQIIAAAAYDJIAAEAAABMBgkgAAAAgMkgAQQAAAAwGSSAAAAAACaDBBAAAADAZJAAAgAAAJgMEkAAAAAAk0ECCAAAAGAySAABAAAATAYJIAAAAIDJIAEEAAAAMBkkgAAAAAAmgwQQAAAAwGSQAAIAAACYDBJAAAAAAJNBAggAAABgMkgAAQAAAEwGCSAAAACAySABBAAAADAZJIAAAAAAJoMEEAAAAMBkkAACAAAAmAwSQAAAAACTQQIIAAAAYDJIAAEAAABMBgkgAAAAgMkgAQQAAAAwGSSAAAAAACaDBBAAAADAZJAAAgAAAJgMEkAAAAAAk0ECCAAAAGAySAABAAAATAYJIAAAAIDJIAEEAAAAMBkkgAAAAAAmgwQQAAAAwGSQAAIAAACYDBJAAAAAAJNBAggAAABgMkgAAQAAAEwGCSAAAACAySABBAAAADAZJIAAAAAAJoMEEAAAAMBkkAACAAAAmAwSQAAAAACTQQIIAAAAYDJIAAEAAABMBgkgAAAAgMkgAQQAAAAwGSSAAAAAACaDBBAAAADAZJAAAgAAAJgMEkAAAAAAk0ECCAAAAGAySAABAAAATAYJIAAAAIDJIAEEAAAAMBkkgAAAAAAmgwQQAAAAwGSQAAIAAACYDBJAAAAAAJNBAggAAABgMkgAAQAAAEwGCSAAAACAySABBAAAADAZJIAAAAAAJoMEEAAAAMBkkAACAAAAmAwSQAAAAACTQQIIAAAAYDJIAAEAAABMBgkgAAAAgMkgAQQAAAAwFaL/A1remQsHpt6bAAAAAElFTkSuQmCC" />
+ <video id="video" class="testcase" onclick="alert('video')">video</video>
+ <canvas id="canvas" class="testcase" onclick="alert('canvas')">canvas</canvas>
+ <progress id="progress" class="testcase" onclick="alert('progress')">progress</progress>
+ <textarea id="textarea" class="testcase" onclick="alert('textarea')">textarea</textarea>
+ <button id="button" class="testcase" onclick="alert('button')">button</button>
+ <svg id="svg" class="testcase" onclick="alert('svg')"><circle cx="50" cy="50" r="40" stroke="white" stroke-width="4" fill="blue" /></svg>
+ <input id="input_range" class="testcase" onclick="alert('input_range')" type="range" />
+ <input id="input_button" class="testcase" onclick="alert('input_button')" type="button" />
+ <input id="input_submit" class="testcase" onclick="alert('input_submit')" type="submit" />
+ <input id="input_reset" class="testcase" onclick="alert('input_reset')" type="reset" />
+ <input id="input_checkbox" class="testcase" onclick="alert('input_checkbox')" type="checkbox" />
+ <input id="input_radio" class="testcase" onclick="alert('input_radio')" type="radio" />
+ <input id="input_text" class="testcase" onclick="alert('input_text')" type="text" />
+ <input id="input_number" class="testcase" onclick="alert('input_number')" type="number" />
+ <input id="input_tel" class="testcase" onclick="alert('input_tel')" type="tel" />
+ <input id="input_url" class="testcase" onclick="alert('input_url')" type="url" />
+ <input id="input_email" class="testcase" onclick="alert('input_email')" type="email" />
+ <input id="input_search" class="testcase" onclick="alert('input_search')" type="search" />
+ <input id="input_image" class="testcase" onclick="alert('input_image')" type="image" />
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_contenteditable_page.html b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_contenteditable_page.html
new file mode 100644
index 000000000..2d65d3880
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_contenteditable_page.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Clear Elements Test</title>
+<meta charset=utf-8>
+</head>
+<body>
+<div id="contentEditableElement" contentEditable="true">
+This is a contentEditable area
+</div>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_disabled_input_page.html b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_disabled_input_page.html
new file mode 100644
index 000000000..b0f21235f
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_disabled_input_page.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Clear Elements Test</title>
+<meta charset=utf-8>
+</head>
+<body>
+<input id="disabledTextInput" type="text" disabled="true" value="Test"/>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_disabled_textarea_page.html b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_disabled_textarea_page.html
new file mode 100644
index 000000000..e274a0582
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_disabled_textarea_page.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Clear Elements Test</title>
+<meta charset=utf-8>
+</head>
+<body>
+<textarea rows="5" id="disabledTextArea" disabled="true" cols="20">
+text area which is not supposed to be cleared
+</textarea>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_readonly_input_page.html b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_readonly_input_page.html
new file mode 100644
index 000000000..5d3a7ac67
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_readonly_input_page.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Clear Elements Test</title>
+<meta charset=utf-8>
+</head>
+<body>
+<input id="readOnlyTextInput" type="text" readonly value="Test"/>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_readonly_textarea_page.html b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_readonly_textarea_page.html
new file mode 100644
index 000000000..d11241e86
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_readonly_textarea_page.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Clear Elements Test</title>
+<meta charset=utf-8>
+</head>
+<body>
+<textarea id="readOnlyTextArea" readonly rows="5" cols="20">
+text area which is not supposed to be cleared
+</textarea>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_writable_input_page.html b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_writable_input_page.html
new file mode 100644
index 000000000..448cd37df
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_writable_input_page.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Clear Elements Test</title>
+<meta charset=utf-8>
+</head>
+<body>
+<input id="writableTextInput" type="text" value="Test"/>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_writable_textarea_page.html b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_writable_textarea_page.html
new file mode 100644
index 000000000..d16657aa5
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/res/element_clear_writable_textarea_page.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Clear Elements Test</title>
+<meta charset=utf-8>
+</head>
+<body>
+<textarea id="writableTextArea" rows="2" cols="20">
+This is a sample text area which is supposed to be cleared
+</textarea>
+</body>
+</html>
+
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/res/text-form-landing.html b/testing/web-platform/tests/old-tests/webdriver/user_input/res/text-form-landing.html
new file mode 100644
index 000000000..345e60e04
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/res/text-form-landing.html
@@ -0,0 +1,8 @@
+<html>
+<head>
+ <meta charset="utf-8" />
+ <title>Text Form Landing</title>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/res/text-form.html b/testing/web-platform/tests/old-tests/webdriver/user_input/res/text-form.html
new file mode 100644
index 000000000..d99ec899d
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/res/text-form.html
@@ -0,0 +1,25 @@
+<html>
+<head>
+ <title>Text Form</title>
+ <meta charset="utf-8" />
+ <script>
+ function key_press() {
+ document.getElementById("text").textContent = document.getElementById("Text1").value;
+ }
+
+ function got_focus() {
+ var output = document.getElementById("output");
+ output.checked = true;
+ }
+ </script>
+</head>
+<body>
+ <p id="text"></p>
+ <form action="text-form-landing.html">
+ <input id="Text1" type="text" onkeyup="key_press()"/>
+ <input id="Text2" type="text" onfocus="got_focus()" />
+ <input id="output" type="checkbox" />
+ <input type="submit" name="e" value="mc2" />
+ </form>
+</body>
+</html> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/user_input/sendkeys_test.py b/testing/web-platform/tests/old-tests/webdriver/user_input/sendkeys_test.py
new file mode 100644
index 000000000..d2edcbabd
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/user_input/sendkeys_test.py
@@ -0,0 +1,96 @@
+import os
+import sys
+import random
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+
+repo_root = os.path.abspath(os.path.join(__file__, "../../.."))
+sys.path.insert(1, os.path.join(repo_root, "tools", "webdriver"))
+from webdriver import exceptions
+
+
+class SendKeysTest(base_test.WebDriverBaseTest):
+ def setUp(self):
+ self.driver.get(self.webserver.where_is("user_input/res/text-form.html"))
+
+ def test_send_simple_string(self):
+ element = self.driver.find_element_by_id("Text1")
+ element.send_keys("lorem ipsum")
+
+ self.assertEquals(self.driver.find_element_by_id("text").get_text(), u"lorem ipsum")
+
+ def test_send_return(self):
+ element = self.driver.find_element_by_id("Text1")
+ returnkey = unichr(int("E006", 16))
+ element.send_keys([returnkey])
+
+ self.assertEquals(u"" + self.driver.get_current_url(), u"" + self.webserver.where_is("user_input/res/text-form-landing.html?e=mc2"))
+
+ def test_send_backspace(self):
+ element = self.driver.find_element_by_id("Text1")
+ element.send_keys("world ")
+ element.send_keys("wide ")
+ element.send_keys("web ")
+ element.send_keys("consortium")
+
+ backspace= unichr(int("E003", 16))
+ for i in range(0, 11):
+ element.send_keys([backspace])
+
+ self.assertEquals(self.driver.find_element_by_id("text").get_text(), u"world wide web")
+
+ def test_send_tab(self):
+ element1 = self.driver.find_element_by_id("Text1")
+ element2 = self.driver.find_element_by_id("Text2")
+ element1.send_keys("typing here")
+
+ tab= unichr(int("E004", 16))
+ element1.send_keys([tab])
+
+ output = self.driver.find_element_by_id("output")
+ tab_pressed = output.get_attribute("checked")
+ self.assertEquals(tab_pressed, u"true")
+
+ def test_send_shift(self):
+ element = self.driver.find_element_by_id("Text1")
+ element.send_keys("low ")
+
+ shift= unichr(int("E008", 16))
+ element.send_keys([shift , "u", "p", shift])
+
+ self.assertEquals(self.driver.find_element_by_id("text").get_text(), u"low UP")
+
+ def test_send_arrow_keys(self):
+ element = self.driver.find_element_by_id("Text1")
+
+ element.send_keys("internet")
+
+ backspace= unichr(int("E003", 16))
+ left= unichr(int("E012", 16))
+ right= unichr(int("E014", 16))
+ for i in range(0, 4):
+ element.send_keys([left])
+
+ element.send_keys([backspace])
+ element.send_keys([right])
+ element.send_keys("a")
+
+ self.assertEquals(self.driver.find_element_by_id("text").get_text(), u"intranet")
+
+ def test_select_text_with_shift(self):
+ element = self.driver.find_element_by_id("Text1")
+
+ element.send_keys("WebDriver")
+ backspace= unichr(int("E003", 16))
+ shift= unichr(int("E008", 16))
+ left= unichr(int("E012", 16))
+
+ element.send_keys([shift, left, left, left, left, left, left, backspace])
+
+ self.assertEquals(self.driver.find_element_by_id("text").get_text(), u"Web")
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/webdriver.cfg b/testing/web-platform/tests/old-tests/webdriver/webdriver.cfg
new file mode 100644
index 000000000..cb74f56ce
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/webdriver.cfg
@@ -0,0 +1,35 @@
+# to add more browsers specify a [section header] with the name
+# the 'browser' is currently required
+# url and capabilities are optional
+# url is the 'command_executor' argument passed in to the 'browser' class
+# capabilities is the 'desired_capabilities' argument.
+
+[firefox]
+capabilities: {"browserName": "firefox"}
+mode: compatibility
+
+[selendroid]
+capabilities: {"platform": "ANDROID", "browserName": "android"}
+mode: compatibility
+
+[chrome]
+url: http://localhost:9515
+capabilities: {"browserName": "chrome"}
+mode: compatibility
+
+[ie]
+capabilities: {"browserName": "ie"}
+mode: compatibility
+
+[edge]
+capabilities: {"browserName": "edge"}
+mode: compatibility
+
+[ios-driver]
+capabilities: {"browserName": "iphone"}
+mode: compatibility
+
+[blackberry]
+url: http://169.254.0.1:1338
+capabilities: {"browserName": "blackberry"}
+mode: compatibility
diff --git a/testing/web-platform/tests/old-tests/webdriver/windows/__init__.py b/testing/web-platform/tests/old-tests/webdriver/windows/__init__.py
new file mode 100644
index 000000000..0c8107beb
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/windows/__init__.py
@@ -0,0 +1 @@
+__author__ = 'b-redeg'
diff --git a/testing/web-platform/tests/old-tests/webdriver/windows/res/win1.html b/testing/web-platform/tests/old-tests/webdriver/windows/res/win1.html
new file mode 100644
index 000000000..b8bf7e80b
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/windows/res/win1.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>window one</title>
+
+<div onclick="window.open('win2.html')">win2</div> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/windows/res/win2.html b/testing/web-platform/tests/old-tests/webdriver/windows/res/win2.html
new file mode 100644
index 000000000..81a068fa8
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/windows/res/win2.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>window two</title>
+
+<img src="//web-platform.test:8000/images/blue.png">&nbsp;</a> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/windows/res/win3.html b/testing/web-platform/tests/old-tests/webdriver/windows/res/win3.html
new file mode 100644
index 000000000..d3ee6944b
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/windows/res/win3.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>window three</title>
+
+<img src="//web-platform.test:8000/images/blue.png">&nbsp;</a> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/windows/res/win4.html b/testing/web-platform/tests/old-tests/webdriver/windows/res/win4.html
new file mode 100644
index 000000000..ef35f7617
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/windows/res/win4.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>window four</title>
+
+<img src="//web-platform.test:8000/images/blue.png">&nbsp;</a> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/windows/res/win5.html b/testing/web-platform/tests/old-tests/webdriver/windows/res/win5.html
new file mode 100644
index 000000000..673d2a19a
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/windows/res/win5.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8" />
+<title>window five</title>
+
+<img src="//web-platform.test:8000/images/blue.png">&nbsp;</a> \ No newline at end of file
diff --git a/testing/web-platform/tests/old-tests/webdriver/windows/tabbing.py b/testing/web-platform/tests/old-tests/webdriver/windows/tabbing.py
new file mode 100644
index 000000000..a6b5f99bf
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/windows/tabbing.py
@@ -0,0 +1,30 @@
+# -*- mode: python; fill-column: 100; comment-column: 100; -*-
+
+import os
+import sys
+import unittest
+import time
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+from selenium.common import exceptions
+from selenium.webdriver.common.keys import Keys
+from selenium.webdriver.common.action_chains import ActionChains
+
+
+class tabbingTest(base_test.WebDriverBaseTest):
+ def test_open_close_tab(self):
+ self.driver.get(self.webserver.where_is("windows/res/win1.html"))
+ self.driver.find_element_by_tag_name("div").click()
+ h = self.driver.window_handles
+ self.assertEquals(2, len(h))
+ self.driver.switch_to.window(h[1])
+ try:
+ self.driver.switch_to.window("does not exist")
+ self.fail("NoSuchWindowException expected")
+ except exceptions.NoSuchWindowException:
+ pass
+ self.driver.close()
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/testing/web-platform/tests/old-tests/webdriver/windows/window_manipulation.py b/testing/web-platform/tests/old-tests/webdriver/windows/window_manipulation.py
new file mode 100644
index 000000000..027716727
--- /dev/null
+++ b/testing/web-platform/tests/old-tests/webdriver/windows/window_manipulation.py
@@ -0,0 +1,43 @@
+# -*- mode: python; fill-column: 100; comment-column: 100; -*-
+
+import os
+import sys
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
+import base_test
+from selenium.common import exceptions
+
+
+class WindowingTest(base_test.WebDriverBaseTest):
+ def test_maximize(self):
+ #self.driver.get(self.webserver.where_is("windows/res/win1.html"))
+ self.driver.maximize_window()
+
+ def test_window_size_manipulation(self):
+ #self.driver.get(self.webserver.where_is("windows/res/win1.html"))
+ self.driver.set_window_size(400, 400)
+ window_size = self.driver.get_window_size()
+ self.assertTrue("width" in window_size)
+ self.assertTrue("height" in window_size)
+ self.assertEquals({"width": 400, "height":400}, window_size)
+
+ """
+ todo: make that work
+ see: https://w3c.github.io/webdriver/webdriver-spec.html#setwindowsize
+ result = self.driver.set_window_size(100, 100)
+ self.assertTrue("status" in result)
+ self.assertEquals(result["status"], 500)
+ """
+
+ def test_window_position_manipulation(self):
+ #self.driver.get(self.webserver.where_is("windows/res/win1.html"))
+ self.driver.set_window_position(400, 400)
+ window_position = self.driver.get_window_position()
+ self.assertTrue("x" in window_position)
+ self.assertTrue("y" in window_position)
+ self.assertEquals({"x": 400, "y": 400}, window_position)
+
+
+if __name__ == "__main__":
+ unittest.main()