WebDriver: add support for importing and running selenium tests
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 1 Dec 2017 11:30:09 +0000 (11:30 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 1 Dec 2017 11:30:09 +0000 (11:30 +0000)
https://bugs.webkit.org/show_bug.cgi?id=180145

Reviewed by Brian Burg.

Tools:

We currently import and run W3C tests, which are the best ones to ensure our implementation is spec
compliant. However, the selenium API is what user will actually use in the end, so it's important to ensure that
we don't break the selenium support. This patch adds webdriver_test_runner_selenium.py and
webdriver_selenium_executor.py to run selenium tests. The script import-w3c-webdriver-tests has been renamed as
import-webdriver-tests and it can now import selenium tests too.

* Scripts/import-w3c-webdriver-tests: Removed.
* Scripts/import-webdriver-tests: Added.
(Importer):
(Importer.__init__):
(Importer.download_tests):
(Importer.import_tests):
(Importer.import_tests.should_skip_file):
* Scripts/webkitpy/webdriver_tests/webdriver_driver.py:
(WebDriver.browser_path):
(WebDriver):
(WebDriver.browser_args):
(WebDriver.selenium_name):
* Scripts/webkitpy/webdriver_tests/webdriver_driver_gtk.py:
(WebDriverGtk.browser_path):
(WebDriverGtk):
(WebDriverGtk.browser_args):
(WebDriverGtk.capabilities):
(WebDriverGtk.selenium_name):
* Scripts/webkitpy/webdriver_tests/webdriver_driver_wpe.py:
(WebDriverWPE.browser_args):
(WebDriverWPE.capabilities):
* Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py: Added.
(_ensure_directory_in_path):
(CollectRecorder):
(CollectRecorder.__init__):
(CollectRecorder.pytest_collectreport):
(WebDriverSeleniumExecutor):
(WebDriverSeleniumExecutor.__init__):
(WebDriverSeleniumExecutor.collect):
(WebDriverSeleniumExecutor.run):
* Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
(WebDriverTestRunner):
(WebDriverTestRunner.__init__):
(WebDriverTestRunner.run):
(WebDriverTestRunner.print_results):
(WebDriverTestRunner.dump_results_to_json_file):
* Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py: Added.
(WebDriverTestRunnerSelenium):
(WebDriverTestRunnerSelenium.__init__):
(WebDriverTestRunnerSelenium._tests_dir):
(WebDriverTestRunnerSelenium.collect_tests):
(WebDriverTestRunnerSelenium.run):
(WebDriverTestRunnerSelenium.results):
* Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
(WebDriverTestRunnerW3C.__init__):
(WebDriverTestRunnerW3C.run):
* Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:

WebDriverTests:

* imported/selenium/importer.json: Added.
* imported/selenium/common/: Added.
* imported/selenium/py/: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@225390 268f45cc-cd09-0410-ab3c-d52691b4dbfc

382 files changed:
Tools/ChangeLog
Tools/Scripts/import-w3c-webdriver-tests [deleted file]
Tools/Scripts/import-webdriver-tests [new file with mode: 0755]
Tools/Scripts/webkitpy/webdriver_tests/webdriver_driver.py
Tools/Scripts/webkitpy/webdriver_tests/webdriver_driver_gtk.py
Tools/Scripts/webkitpy/webdriver_tests/webdriver_driver_wpe.py
Tools/Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py [new file with mode: 0644]
Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py
Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py [new file with mode: 0644]
Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py
Tools/Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py
WebDriverTests/ChangeLog
WebDriverTests/imported/selenium/common/.classpath [new file with mode: 0644]
WebDriverTests/imported/selenium/common/common-web.iml [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/Bin/Intelligencia.UrlRewriter.dll [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/ClickTest_testClicksASurroundingStrongTag.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/Web.Config [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/actualXhtmlPage.xhtml [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/ajaxy_page.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/alerts.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/animals/.gitignore [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/banner.gif [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/beach.jpg [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/blank.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/bodyTypingTest.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/booleanAttributes.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/child/childPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/child/grandchild/grandchildPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/clickEventPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_frames.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_jacker.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_out_of_bounds.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_out_of_bounds_overflow.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_rtl.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_source.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/click_iframe.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/click_in_iframe.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/disabled_element.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/disappearing_element.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/google_map.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/google_map.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/html5_submit_buttons.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/issue5237.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/issue5237_frame.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/issue5237_target.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/link_that_wraps.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/mapped_page1.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/mapped_page2.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/mapped_page3.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/overlapping_elements.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/partially_overlapping_elements.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/span_that_wraps.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/submitted_page.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_tests/wrapped_overlapping_elements.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_too_big.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/click_too_big_in_frame.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/clicks.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/closeable_window.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/cn-test.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/colorPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/content-editable.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/cookies.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/coordinates_tests/element_in_frame.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/coordinates_tests/element_in_nested_frame.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_element_out_of_view.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_empty_element.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_fixed_element.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_hidden_element.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_invisible_element.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_transparent_element.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/coordinates_tests/simple_page.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_222222_256x240.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_228ef1_256x240.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_ef8c08_256x240.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_ffd27a_256x240.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_ffffff_256x240.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/jquery-ui-1.8.10.custom.css [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/cssTransform.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/cssTransform2.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/document_write_in_onload.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/dragAndDropInsideScrolledDiv.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/dragAndDropTest.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/dragDropOverflow.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/draggableLists.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/droppableItems.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/dynamic.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/dynamicallyModifiedPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/errors.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/fixedFooterNoScroll.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/fixedFooterNoScrollQuirksMode.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/formPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/formSelectionPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/form_handling_js_submit.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/framePage3.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/frameScrollChild.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/frameScrollPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/frameScrollParent.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/frameWithAnimals.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/bug4876.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/bug4876_iframe.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/deletingFrame.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/deletingFrame_iframe.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/deletingFrame_iframe2.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/frameset.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/framesetPage2.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/framesetPage3.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/galaxy/.gitignore [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/globalscope.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/hidden.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/hidden_partially.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/html5/blue.jpg [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/html5/database.js [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/html5/geolocation.js [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/html5/green.jpg [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/html5/red.jpg [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/html5/status.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/html5/test.appcache [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/html5/yellow.jpg [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/html5Page.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/icon.gif [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/idElements.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/iframeAtBottom.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/iframeWithAlert.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/iframeWithIframe.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/iframes.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/injectableContent.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/inputs.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/javascriptEnhancedForm.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/javascriptPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/jquery-1.3.2.js [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/jquery-1.4.4.min.js [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/jquery-ui-1.8.10.custom.min.js [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/content.inline.min.css [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/content.min.css [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/fonts/readme.md [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/fonts/tinymce-small.dev.svg [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/fonts/tinymce-small.eot [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/fonts/tinymce-small.svg [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/fonts/tinymce-small.ttf [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/fonts/tinymce-small.woff [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/fonts/tinymce.dev.svg [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/fonts/tinymce.eot [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/fonts/tinymce.svg [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/fonts/tinymce.ttf [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/fonts/tinymce.woff [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/img/anchor.gif [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/img/loader.gif [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/img/object.gif [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/img/trans.gif [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/skin.ie7.min.css [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/skins/lightgray/skin.min.css [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/themes/modern/theme.min.js [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/js/tinymce.min.js [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/key_logger.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/key_tests/remove_on_keypress.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/keyboard_shortcut.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/linked_image.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/locators_tests/boolean_attribute_selected.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/locators_tests/boolean_attribute_selected_html4.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/longContentPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/macbeth.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/map.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/map_visibility.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/markerTransparent.png [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/messages.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/meta-redirect.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/missedJsReference.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/modal_dialogs/modal_1.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/modal_dialogs/modal_2.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/modal_dialogs/modal_3.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/modal_dialogs/modalindex.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/mouseOver.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/mousePositionTracker.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/nestedElements.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/overflow-body.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/overflow/x_auto_y_auto.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/overflow/x_auto_y_hidden.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/overflow/x_auto_y_scroll.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/overflow/x_hidden_y_auto.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/overflow/x_hidden_y_hidden.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/overflow/x_hidden_y_scroll.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/overflow/x_scroll_y_auto.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/overflow/x_scroll_y_hidden.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/overflow/x_scroll_y_scroll.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/pageWithOnBeforeUnloadMessage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/pageWithOnLoad.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/pageWithOnUnload.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/page_with_link_to_slow_loading_page.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/plain.txt [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/proxy/page1.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/proxy/page2.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/proxy/page3.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/readOnlyPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/rectangles.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/resultPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/rich_text.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/safari/frames_benchmark.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/screen/screen.css [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/screen/screen.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/screen/screen.js [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/screen/screen_frame1.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/screen/screen_frame2.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/screen/screen_frames.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/screen/screen_iframes.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/screen/screen_too_long.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/screen/screen_x_long.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/screen/screen_x_too_long.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/screen/screen_y_long.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/screen/screen_y_too_long.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scroll.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scroll2.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scroll3.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scroll4.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scroll5.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/frame_with_height_above_200.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/frame_with_height_above_2000.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/frame_with_nested_scrolling_frame.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/frame_with_nested_scrolling_frame_out_of_view.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/frame_with_small_height.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/page_with_double_overflow_auto.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/page_with_frame_out_of_view.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/page_with_nested_scrolling_frames.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/page_with_nested_scrolling_frames_out_of_view.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/page_with_non_scrolling_frame.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/page_with_partially_hidden_element.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/page_with_scrolling_frame.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/page_with_scrolling_frame_out_of_view.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/page_with_tall_frame.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/page_with_y_overflow_auto.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/scrolling_tests/target_page.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/selectPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/selectableItems.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/sessionCookie.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/sessionCookieDest.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/simple.xml [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/simpleTest.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/single_text_input.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/slowLoadingAlert.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/slowLoadingResourcePage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/slow_loading_iframes.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/styledPage.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/svgPiechart.xhtml [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/svgTest.svg [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/tables.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/tinymce.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/transformable.xml [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/transformable.xsl [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/transparentUpload.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/underscore.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/unicode_ltr.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/upload.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/upload_invisible.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/userDefinedProperty.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/veryLargeCanvas.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/visibility-css.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/win32frameset.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/window_switching_tests/page_with_frame.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/window_switching_tests/simple_page.html [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/xhtmlFormPage.xhtml [new file with mode: 0644]
WebDriverTests/imported/selenium/common/src/web/xhtmlTest.html [new file with mode: 0644]
WebDriverTests/imported/selenium/importer.json [new file with mode: 0644]
WebDriverTests/imported/selenium/py/conftest.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/common/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/common/exceptions.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/action_chains.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/actions/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/actions/action_builder.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/actions/input_device.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/actions/interaction.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/actions/key_actions.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/actions/key_input.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/actions/mouse_button.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/actions/pointer_actions.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/actions/pointer_input.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/alert.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/by.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/desired_capabilities.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/html5/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/html5/application_cache.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/keys.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/proxy.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/service.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/touch_actions.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/common/utils.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/remote/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/remote/command.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/remote/errorhandler.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/remote/file_detector.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/remote/getAttribute.js [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/remote/isDisplayed.js [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/remote/mobile.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/remote/remote_connection.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/remote/switch_to.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/remote/utils.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/remote/webdriver.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/remote/webelement.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/safari/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/safari/service.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/safari/webdriver.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/support/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/support/abstract_event_listener.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/support/color.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/support/event_firing_webdriver.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/support/events.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/support/expected_conditions.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/support/select.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/support/ui.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/support/wait.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/webkitgtk/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/webkitgtk/options.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/webkitgtk/service.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/selenium/webdriver/webkitgtk/webdriver.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/setup.cfg [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/alerts_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/api_example_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/appcache_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/children_finding_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/clear_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/click_scrolling_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/click_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/conftest.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/cookie_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/correct_event_firing_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/driver_element_finding_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/element_attribute_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/element_equality_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/example2.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/executing_async_javascript_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/executing_javascript_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/form_handling_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/frame_switching_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/google_one_box.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/implicit_waits_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/interactions_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/network.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/opacity_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/page_load_timeout_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/page_loader.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/page_loading_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/position_and_size_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/proxy_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/quit_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/rendered_webelement_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/repr_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/results_page.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/select_class_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/select_element_handling_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/stale_reference_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/takes_screenshots_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/text_handling_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/typing_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/utils.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/visibility_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/w3c_interaction_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/webdriverwait_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/webserver.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/window_switching_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/common/window_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/remote/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/remote/remote_firefox_profile_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/safari/conftest.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/safari/launcher_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/support/__init__.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/support/color_tests.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/support/conftest.py [new file with mode: 0644]
WebDriverTests/imported/selenium/py/test/selenium/webdriver/support/event_firing_webdriver_tests.py [new file with mode: 0644]

index d008df0..76044ec 100644 (file)
@@ -1,3 +1,64 @@
+2017-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        WebDriver: add support for importing and running selenium tests
+        https://bugs.webkit.org/show_bug.cgi?id=180145
+
+        Reviewed by Brian Burg.
+
+        We currently import and run W3C tests, which are the best ones to ensure our implementation is spec
+        compliant. However, the selenium API is what user will actually use in the end, so it's important to ensure that
+        we don't break the selenium support. This patch adds webdriver_test_runner_selenium.py and
+        webdriver_selenium_executor.py to run selenium tests. The script import-w3c-webdriver-tests has been renamed as
+        import-webdriver-tests and it can now import selenium tests too.
+
+        * Scripts/import-w3c-webdriver-tests: Removed.
+        * Scripts/import-webdriver-tests: Added.
+        (Importer):
+        (Importer.__init__):
+        (Importer.download_tests):
+        (Importer.import_tests):
+        (Importer.import_tests.should_skip_file):
+        * Scripts/webkitpy/webdriver_tests/webdriver_driver.py:
+        (WebDriver.browser_path):
+        (WebDriver):
+        (WebDriver.browser_args):
+        (WebDriver.selenium_name):
+        * Scripts/webkitpy/webdriver_tests/webdriver_driver_gtk.py:
+        (WebDriverGtk.browser_path):
+        (WebDriverGtk):
+        (WebDriverGtk.browser_args):
+        (WebDriverGtk.capabilities):
+        (WebDriverGtk.selenium_name):
+        * Scripts/webkitpy/webdriver_tests/webdriver_driver_wpe.py:
+        (WebDriverWPE.browser_args):
+        (WebDriverWPE.capabilities):
+        * Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py: Added.
+        (_ensure_directory_in_path):
+        (CollectRecorder):
+        (CollectRecorder.__init__):
+        (CollectRecorder.pytest_collectreport):
+        (WebDriverSeleniumExecutor):
+        (WebDriverSeleniumExecutor.__init__):
+        (WebDriverSeleniumExecutor.collect):
+        (WebDriverSeleniumExecutor.run):
+        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner.py:
+        (WebDriverTestRunner):
+        (WebDriverTestRunner.__init__):
+        (WebDriverTestRunner.run):
+        (WebDriverTestRunner.print_results):
+        (WebDriverTestRunner.dump_results_to_json_file):
+        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py: Added.
+        (WebDriverTestRunnerSelenium):
+        (WebDriverTestRunnerSelenium.__init__):
+        (WebDriverTestRunnerSelenium._tests_dir):
+        (WebDriverTestRunnerSelenium.collect_tests):
+        (WebDriverTestRunnerSelenium.run):
+        (WebDriverTestRunnerSelenium.results):
+        * Scripts/webkitpy/webdriver_tests/webdriver_test_runner_w3c.py:
+        (WebDriverTestRunnerW3C.__init__):
+        (WebDriverTestRunnerW3C.run):
+        * Scripts/webkitpy/webdriver_tests/webdriver_w3c_executor.py:
+
 2017-11-30  Alex Christensen  <achristensen@webkit.org>
 
         REGRESSION (r224791): cookies are shared between ephemeral sessions in the same process pool
diff --git a/Tools/Scripts/import-w3c-webdriver-tests b/Tools/Scripts/import-w3c-webdriver-tests
deleted file mode 100755 (executable)
index 1fd7794..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2017 Igalia S.L.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer.
-# 2. Redistributions in binary form must reproduce the above
-#    copyright notice, this list of conditions and the following
-#    disclaimer in the documentation and/or other materials
-#    provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY
-# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-
-import logging
-import json
-import os
-
-from webkitpy.common.host import Host
-from webkitpy.common.system.filesystem import FileSystem
-from webkitpy.common.system.logutils import configure_logging
-from webkitpy.common.webkit_finder import WebKitFinder
-from webkitpy.common.checkout.scm.git import Git
-from webkitpy.w3c.test_downloader import TestDownloader
-
-_log = logging.getLogger(__name__)
-
-def download_tests(host, url, revision, dest_directory):
-    downloader = TestDownloader(None, host, TestDownloader.default_options())
-    downloader.checkout_test_repository(revision, url, dest_directory)
-    downloader.git(dest_directory).checkout(revision, False)
-
-def should_skip_file(source_path, full_paths_to_skip):
-    for path in full_paths_to_skip:
-        if source_path.startswith(path):
-            return True
-    return False
-
-def import_tests(host, paths_to_import, paths_to_skip, src_directory, dest_directory):
-    _log.info('Importing tests')
-    full_paths_to_skip = [host.filesystem.join(src_directory, path) for path in paths_to_skip]
-    for path in paths_to_import:
-        source_directory = host.filesystem.join(src_directory, path)
-        for source_path in host.filesystem.files_under(source_directory):
-            if should_skip_file(source_path, full_paths_to_skip):
-                continue
-            destination_path = host.filesystem.join(dest_directory, host.filesystem.relpath(source_path, src_directory))
-            host.filesystem.maybe_make_directory(host.filesystem.dirname(destination_path))
-            host.filesystem.copyfile(source_path, destination_path)
-
-
-configure_logging()
-
-host = Host()
-host.initialize_scm()
-webkit_finder = WebKitFinder(host.filesystem)
-importer_config_path = webkit_finder.path_from_webkit_base('WebDriverTests', 'imported', 'w3c', 'importer.json')
-config = json.loads(host.filesystem.read_text_file(importer_config_path))
-
-download_path = webkit_finder.path_from_webkit_base('WebKitBuild', 'w3c-tests', 'web-platform-tests')
-host.filesystem.maybe_make_directory(host.filesystem.dirname(download_path))
-download_tests(host, config['repository'], config['revision'], download_path)
-
-import_path = webkit_finder.path_from_webkit_base('WebDriverTests', 'imported', 'w3c')
-import_tests(host, config['paths_to_import'], config['paths_to_skip'], download_path, import_path)
diff --git a/Tools/Scripts/import-webdriver-tests b/Tools/Scripts/import-webdriver-tests
new file mode 100755 (executable)
index 0000000..ad0d70f
--- /dev/null
@@ -0,0 +1,117 @@
+#!/usr/bin/env python
+
+# Copyright (C) 2017 Igalia S.L.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer.
+# 2. Redistributions in binary form must reproduce the above
+#    copyright notice, this list of conditions and the following
+#    disclaimer in the documentation and/or other materials
+#    provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+import json
+import logging
+import optparse
+import os
+import sys
+
+from webkitpy.common.host import Host
+from webkitpy.common.system.filesystem import FileSystem
+from webkitpy.common.system.logutils import configure_logging
+from webkitpy.common.webkit_finder import WebKitFinder
+from webkitpy.common.checkout.scm.git import Git
+
+_log = logging.getLogger(__name__)
+
+host = Host()
+host.initialize_scm()
+webkit_finder = WebKitFinder(host.filesystem)
+
+class Importer(object):
+
+    def __init__(self, config_path, download_path, destination_path):
+        self.config = json.loads(host.filesystem.read_text_file(config_path))
+        self.download_path = download_path
+        self.destination_path = destination_path
+
+    def download_tests(self):
+        host.filesystem.maybe_make_directory(host.filesystem.dirname(self.download_path))
+        needs_clone = not host.filesystem.exists(self.download_path)
+        if needs_clone:
+            _log.info('Cloning %s into %s...' % (self.config['repository'], self.download_path))
+            Git.clone(self.config['repository'], self.download_path, host.executive)
+        git = Git(self.download_path, None, executive=host.executive, filesystem=host.filesystem)
+        if not needs_clone:
+            _log.info('Fetching %s...' % self.config['repository'])
+            git.fetch()
+
+        _log.info('Checking out revision %s' % self.config['revision'])
+        git.checkout(self.config['revision'], False)
+
+    def import_tests(self):
+        def should_skip_file(source_path, full_paths_to_skip):
+            for path in full_paths_to_skip:
+                if source_path.startswith(path):
+                    return True
+            return False
+
+        _log.info('Importing tests')
+        full_paths_to_skip = [host.filesystem.join(self.download_path, path) for path in self.config['paths_to_skip']]
+        for path in self.config['paths_to_import']:
+            source_directory = host.filesystem.join(self.download_path, path)
+            for source_path in host.filesystem.files_under(source_directory):
+                if should_skip_file(source_path, full_paths_to_skip):
+                    continue
+                destination_path = host.filesystem.join(self.destination_path, host.filesystem.relpath(source_path, self.download_path))
+                host.filesystem.maybe_make_directory(host.filesystem.dirname(destination_path))
+                host.filesystem.copyfile(source_path, destination_path)
+
+
+option_parser = optparse.OptionParser(usage='usage: %prog [options]')
+option_parser.add_option('--w3c', action='store_true', dest='w3c',
+                         help='Import W3C tests')
+option_parser.add_option('--selenium', action='store_true', dest='selenium',
+                         help='Import Selenium tests')
+options, _ = option_parser.parse_args()
+
+# Not giving any option means import all.
+if not options.w3c and not options.selenium:
+    options.w3c = options.selenium = True
+
+configure_logging()
+
+importers = []
+
+if options.w3c:
+    importer_config_path = webkit_finder.path_from_webkit_base('WebDriverTests', 'imported', 'w3c', 'importer.json')
+    download_path = webkit_finder.path_from_webkit_base('WebKitBuild', 'w3c-tests', 'web-platform-tests')
+    import_path = webkit_finder.path_from_webkit_base('WebDriverTests', 'imported', 'w3c')
+    importers.append(Importer(importer_config_path, download_path, import_path))
+
+if options.selenium:
+    importer_config_path = webkit_finder.path_from_webkit_base('WebDriverTests', 'imported', 'selenium', 'importer.json')
+    download_path = webkit_finder.path_from_webkit_base('WebKitBuild', 'selenium-tests', 'selenium')
+    import_path = webkit_finder.path_from_webkit_base('WebDriverTests', 'imported', 'selenium')
+    importers.append(Importer(importer_config_path, download_path, import_path))
+
+for importer in importers:
+    importer.download_tests()
+    importer.import_tests()
index 63473f5..554ec7a 100644 (file)
@@ -34,9 +34,19 @@ class WebDriver(object):
     def capabilities(self):
         raise NotImplementedError
 
+    def browser_path(self):
+        return None
+
+    def browser_args(self):
+        return []
+
     def browser_env(self):
         return {}
 
+    def selenium_name(self):
+        """Return the name of the driver used by Selenium, passed to pytest using --driver command line option.
+          If this is not implemented, Selenium tests will not be run."""
+        return None
 
 _drivers = {}
 
index ab010b5..ef4f385 100644 (file)
@@ -34,10 +34,19 @@ class WebDriverGtk(WebDriver):
     def browser_name(self):
         return 'MiniBrowser'
 
+    def browser_path(self):
+        return self._port._build_path('bin', 'MiniBrowser')
+
+    def browser_args(self):
+        return ['--automation', '--javascript-can-open-windows-automatically=true', '--enable-xss-auditor=false']
+
     def capabilities(self):
         return {'webkitgtk:browserOptions': {
-            'binary': self._port._build_path('bin', 'MiniBrowser'),
-            'args': ['--automation', '--javascript-can-open-windows-automatically=true', '--enable-xss-auditor=false']}}
+            'binary': self.browser_path(),
+            'args': self.browser_args()}}
+
+    def selenium_name(self):
+        return 'WebKitGTK'
 
 
 register_driver('gtk', WebDriverGtk)
index 970c941..f025731 100644 (file)
@@ -35,10 +35,13 @@ class WebDriverWPE(WebDriver):
     def browser_name(self):
         return 'dyz'
 
+    def browser_args(self):
+        return ['--automation']
+
     def capabilities(self):
         return {'wpe:browserOptions': {
             'binary': self.browser_name(),
-            'args': ['--automation']}}
+            'args': self.browser_args()}}
 
     def browser_env(self):
         env = {}
diff --git a/Tools/Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py b/Tools/Scripts/webkitpy/webdriver_tests/webdriver_selenium_executor.py
new file mode 100644 (file)
index 0000000..e9e37d3
--- /dev/null
@@ -0,0 +1,111 @@
+# Copyright (C) 2017 Igalia S.L.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import logging
+import os
+import sys
+
+from webkitpy.common.system.filesystem import FileSystem
+from webkitpy.common.webkit_finder import WebKitFinder
+import webkitpy.thirdparty.autoinstalled.mozlog
+
+# Since W3C tests also use pytest, we use pytest and some other tools for selenium too.
+w3c_tools_dir = WebKitFinder(FileSystem()).path_from_webkit_base('WebDriverTests', 'imported', 'w3c', 'tools')
+
+
+def _ensure_directory_in_path(directory):
+    if not directory in sys.path:
+        sys.path.insert(0, directory)
+_ensure_directory_in_path(os.path.join(w3c_tools_dir, 'pytest'))
+_ensure_directory_in_path(os.path.join(w3c_tools_dir, 'wptrunner'))
+
+import pytest
+import webkitpy.thirdparty.autoinstalled.pytest_timeout
+from wptrunner.executors.pytestrunner.runner import HarnessResultRecorder, SubtestResultRecorder, TemporaryDirectory
+
+_log = logging.getLogger(__name__)
+
+
+class CollectRecorder(object):
+
+    def __init__(self):
+        self.tests = []
+
+    def pytest_collectreport(self, report):
+        if report.nodeid:
+            self.tests.append(report.nodeid)
+
+
+class WebDriverSeleniumExecutor(object):
+
+    def __init__(self, driver, display_driver):
+        self._env = {}
+        self._env['WD_DRIVER_PATH'] = driver.binary_path()
+        browser_path = driver.browser_path()
+        if browser_path:
+            self._env['WD_BROWSER_PATH'] = browser_path
+        browser_args = driver.browser_args()
+        if browser_args:
+            self._env['WD_BROWSER_ARGS'] = ' '.join(browser_args)
+        self._env.update(display_driver._setup_environ_for_test())
+        self._env.update(driver.browser_env())
+
+        self._name = driver.selenium_name()
+
+    def collect(self, directory):
+        collect_recorder = CollectRecorder()
+        stdout = sys.stdout
+        with open(os.devnull, 'wb') as devnull:
+            sys.stdout = devnull
+            with TemporaryDirectory() as cache_directory:
+                pytest.main(['--driver=%s' % self._name,
+                             '--collect-only',
+                             '--basetemp', cache_directory,
+                             directory], plugins=[collect_recorder])
+        sys.stdout = stdout
+        return collect_recorder.tests
+
+    def run(self, test, timeout=0):
+        harness_recorder = HarnessResultRecorder()
+        subtests_recorder = SubtestResultRecorder()
+        _environ = dict(os.environ)
+        os.environ.clear()
+        os.environ.update(self._env)
+
+        with TemporaryDirectory() as cache_directory:
+            try:
+                pytest.main(['--driver=%s' % self._name,
+                             '--verbose',
+                             '--capture=no',
+                             '--basetemp', cache_directory,
+                             '--showlocals',
+                             '--timeout=%s' % timeout,
+                             '-p', 'no:cacheprovider',
+                             '-p', 'pytest_timeout',
+                             test], plugins=[harness_recorder, subtests_recorder])
+            except Exception as e:
+                harness_recorder.outcome = ("ERROR", str(e))
+
+        os.environ.clear()
+        os.environ.update(_environ)
+
+        return harness_recorder.outcome, subtests_recorder.results
index 5aa3a21..3a38032 100644 (file)
@@ -24,6 +24,8 @@ import json
 import logging
 import os
 
+from webkitpy.webdriver_tests.webdriver_driver import create_driver
+from webkitpy.webdriver_tests.webdriver_test_runner_selenium import WebDriverTestRunnerSelenium
 from webkitpy.webdriver_tests.webdriver_test_runner_w3c import WebDriverTestRunnerW3C
 
 _log = logging.getLogger(__name__)
@@ -31,6 +33,8 @@ _log = logging.getLogger(__name__)
 
 class WebDriverTestRunner(object):
 
+    RUNNER_CLASSES = (WebDriverTestRunnerSelenium, WebDriverTestRunnerW3C)
+
     def __init__(self, port):
         self._port = port
         _log.info('Using port %s' % self._port.name())
@@ -40,28 +44,41 @@ class WebDriverTestRunner(object):
         self._display_driver = self._port.create_driver(worker_number=0, no_timeout=True)._make_driver(pixel_tests=False)
         if not self._display_driver.check_driver(self._port):
             raise RuntimeError("Failed to check driver %s" % self._display_driver.__class__.__name__)
-        self._runner = WebDriverTestRunnerW3C(self._port, self._display_driver)
 
-    def run(self, tests=[]):
-        runner_tests = self._runner.collect_tests(tests)
-        if runner_tests:
-            _log.info('Collected %d tests' % len(runner_tests))
-            return self._runner.run(runner_tests)
+        driver = create_driver(self._port)
+        _log.info('Using driver at %s' % (driver.binary_path()))
+        _log.info('Browser: %s' % (driver.browser_name()))
 
-        _log.info('No tests found')
-        return 0
+        self._runners = [runner_cls(self._port, driver, self._display_driver) for runner_cls in self.RUNNER_CLASSES]
+
+    def run(self, tests=[]):
+        runner_tests = [runner.collect_tests(tests) for runner in self._runners]
+        collected_count = sum([len(tests) for tests in runner_tests])
+        if not collected_count:
+            _log.info('No tests found')
+            return 0
+
+        _log.info('Collected %d test files' % collected_count)
+        results_count = 0
+        for i in range(len(self._runners)):
+            if runner_tests[i]:
+                results_count += self._runners[i].run(runner_tests[i])
+        return results_count
 
     def print_results(self):
         results = {}
         passed_count = 0
         failures_count = 0
-        for result in self._runner.results():
+        test_results = []
+        for runner in self._runners:
+            test_results.extend(runner.results())
+        for result in test_results:
             if result.status == 'OK':
                 for subtest, status, _, _ in result.subtest_results:
                     if status == 'PASS':
                         passed_count += 1
-                    elif status == 'FAIL':
-                        results.setdefault(status, []).append(os.path.join(os.path.dirname(result.test), subtest))
+                    elif status in ['FAIL', 'ERROR']:
+                        results.setdefault('FAIL', []).append(os.path.join(os.path.dirname(result.test), subtest))
                         failures_count += 1
             else:
                 # FIXME: handle other results.
@@ -84,7 +101,10 @@ class WebDriverTestRunner(object):
     def dump_results_to_json_file(self, output_path):
         json_results = {}
         json_results['results'] = []
-        for result in self._runner.results():
+        test_results = []
+        for runner in self._runners:
+            test_results.extend(runner.results())
+        for result in test_results:
             results = {}
             results['test'] = result.test
             results['status'] = result.status
diff --git a/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py b/Tools/Scripts/webkitpy/webdriver_tests/webdriver_test_runner_selenium.py
new file mode 100644 (file)
index 0000000..045c1e7
--- /dev/null
@@ -0,0 +1,90 @@
+# Copyright (C) 2017 Igalia S.L.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import logging
+import os
+import sys
+
+from webkitpy.common.system.filesystem import FileSystem
+from webkitpy.common.webkit_finder import WebKitFinder
+from webkitpy.webdriver_tests.webdriver_selenium_executor import WebDriverSeleniumExecutor
+from webkitpy.webdriver_tests.webdriver_test_result import WebDriverTestResult
+
+_log = logging.getLogger(__name__)
+
+
+class WebDriverTestRunnerSelenium(object):
+
+    def __init__(self, port, driver, display_driver):
+        self._port = port
+        self._driver = driver
+        self._display_driver = display_driver
+        self._results = []
+
+    def _tests_dir(self):
+        return WebKitFinder(self._port.host.filesystem).path_from_webkit_base('WebDriverTests')
+
+    def collect_tests(self, tests=[]):
+        if self._driver.selenium_name() is None:
+            return 0
+
+        relative_tests_dir = os.path.join('imported', 'selenium', 'py', 'test')
+        executor = WebDriverSeleniumExecutor(self._driver, self._display_driver)
+        # Collected tests are relative to test directory.
+        base_dir = os.path.join(self._tests_dir(), os.path.dirname(relative_tests_dir))
+        collected_tests = [os.path.join(base_dir, test) for test in executor.collect(os.path.join(self._tests_dir(), relative_tests_dir))]
+        selenium_tests = []
+        if not tests:
+            tests = [relative_tests_dir]
+        for test in tests:
+            if not test.startswith(relative_tests_dir):
+                continue
+            test_path = os.path.join(self._tests_dir(), test)
+            if os.path.isdir(test_path):
+                selenium_tests.extend([test for test in collected_tests if test.startswith(test_path)])
+            elif test_path in collected_tests:
+                selenium_tests.append(test_path)
+        return selenium_tests
+
+    def run(self, tests=[]):
+        if self._driver.selenium_name() is None:
+            return 0
+
+        executor = WebDriverSeleniumExecutor(self._driver, self._display_driver)
+        timeout = self._port.get_option('timeout')
+        for test in tests:
+            test_name = os.path.relpath(test, self._tests_dir())
+            print test_name
+            harness_result, test_results = executor.run(test, timeout)
+            result = WebDriverTestResult(test_name, *harness_result)
+            if harness_result[0] == 'OK':
+                for subtest, status, message, backtrace in test_results:
+                    result.add_subtest_results(os.path.basename(subtest), status, message, backtrace)
+            else:
+                # FIXME: handle other results.
+                pass
+            self._results.append(result)
+
+        return len(self._results)
+
+    def results(self):
+        return self._results
index ec5d2e4..734a2d0 100644 (file)
 import logging
 import os
 import sys
-import time
 
 from webkitpy.common.system.filesystem import FileSystem
 from webkitpy.common.webkit_finder import WebKitFinder
 from webkitpy.webdriver_tests.webdriver_w3c_executor import WebDriverW3CExecutor
-from webkitpy.webdriver_tests.webdriver_driver import create_driver
 from webkitpy.webdriver_tests.webdriver_test_result import WebDriverTestResult
 from webkitpy.webdriver_tests.webdriver_w3c_web_server import WebDriverW3CWebServer
 
@@ -37,12 +35,10 @@ _log = logging.getLogger(__name__)
 
 class WebDriverTestRunnerW3C(object):
 
-    def __init__(self, port, display_driver):
+    def __init__(self, port, driver, display_driver):
         self._port = port
+        self._driver = driver
         self._display_driver = display_driver
-        self._driver = create_driver(self._port)
-        _log.info('Using driver at %s' % (self._driver.binary_path()))
-        _log.info('Browser: %s' % (self._driver.browser_name()))
 
         timeout = self._port.get_option('timeout')
         if timeout > 0:
@@ -110,8 +106,5 @@ class WebDriverTestRunnerW3C(object):
 
         return len(self._results)
 
-    def _add_results(self, test_prefix, results):
-        self._results.extend([WebDriverTestResult(test_prefix, *result) for result in results])
-
     def results(self):
         return self._results
index 953a005..4804b2e 100644 (file)
@@ -39,7 +39,6 @@ def _ensure_directory_in_path(directory):
 _ensure_directory_in_path(os.path.join(w3c_tools_dir, 'pytest'))
 _ensure_directory_in_path(os.path.join(w3c_tools_dir, 'webdriver'))
 _ensure_directory_in_path(os.path.join(w3c_tools_dir, 'wptrunner'))
-_ensure_directory_in_path(os.path.join(w3c_tools_dir, "webdriver"))
 
 import webkitpy.thirdparty.autoinstalled.pytest_timeout
 from wptrunner.executors.base import WdspecExecutor, WebDriverProtocol
index e08514b..d03549c 100644 (file)
@@ -1,3 +1,14 @@
+2017-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        WebDriver: add support for importing and running selenium tests
+        https://bugs.webkit.org/show_bug.cgi?id=180145
+
+        Reviewed by Brian Burg.
+
+        * imported/selenium/importer.json: Added.
+        * imported/selenium/common/: Added.
+        * imported/selenium/py/: Added.
+
 2017-11-28  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         Unreviewed. Update W3C WebDriver imported tests.
diff --git a/WebDriverTests/imported/selenium/common/.classpath b/WebDriverTests/imported/selenium/common/.classpath
new file mode 100644 (file)
index 0000000..cd34009
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+       <classpathentry kind="output" path="build"/>
+</classpath>
diff --git a/WebDriverTests/imported/selenium/common/common-web.iml b/WebDriverTests/imported/selenium/common/common-web.iml
new file mode 100644 (file)
index 0000000..16bd3b3
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/src/web">
+      <sourceFolder url="file://$MODULE_DIR$/src/web" type="java-test-resource" />
+    </content>
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+  <component name="sonarModuleSettings">
+    <option name="localAnalysisScripName" value="&lt;PROJECT&gt;" />
+    <option name="serverName" value="&lt;PROJECT&gt;" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/Bin/Intelligencia.UrlRewriter.dll b/WebDriverTests/imported/selenium/common/src/web/Bin/Intelligencia.UrlRewriter.dll
new file mode 100644 (file)
index 0000000..45c30e3
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/Bin/Intelligencia.UrlRewriter.dll differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/ClickTest_testClicksASurroundingStrongTag.html b/WebDriverTests/imported/selenium/common/src/web/ClickTest_testClicksASurroundingStrongTag.html
new file mode 100644 (file)
index 0000000..3d117df
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>ClickTest_testClicksASurroundingStrongTag</title>
+</head>
+<body>
+  <div>
+    <a href="xhtmlTest.html"><strong>Click</strong></a>
+  </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/Web.Config b/WebDriverTests/imported/selenium/common/src/web/Web.Config
new file mode 100644 (file)
index 0000000..68b648f
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<!-- 
+    Note: As an alternative to hand editing this file you can use the 
+    web admin tool to configure settings for your application. Use
+    the Website->Asp.Net Configuration option in Visual Studio.
+    A full list of settings and comments can be found in 
+    machine.config.comments usually located in 
+    \Windows\Microsoft.Net\Framework\v2.x\Config 
+-->
+<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
+       <configSections>
+               <section name="rewriter" requirePermission="false" type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter"/>
+       </configSections>
+       <appSettings/>
+       <connectionStrings/>
+       <system.web>
+               <!-- 
+            Set compilation debug="true" to insert debugging 
+            symbols into the compiled page. Because this 
+            affects performance, set this value to true only 
+            during development.
+        -->
+               <compilation debug="true" defaultLanguage="c#" targetFramework="4.0"/>
+               <!--
+            The <authentication> section enables configuration 
+            of the security authentication mode used by 
+            ASP.NET to identify an incoming user. 
+        -->
+               <authentication mode="Windows"/>
+               <!--
+            The <customErrors> section enables configuration 
+            of what to do if/when an unhandled error occurs 
+            during the execution of a request. Specifically, 
+            it enables developers to configure html error pages 
+            to be displayed in place of a error stack trace.
+
+        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
+            <error statusCode="403" redirect="NoAccess.htm" />
+            <error statusCode="404" redirect="FileNotFound.htm" />
+        </customErrors>
+        -->
+               <httpModules>
+                       <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
+               </httpModules>
+               <!--urlMappings enabled="true">
+      <add url="~/redirect" mappedUrl="~/Redirect.aspx" />
+    </urlMappings-->
+               <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/></system.web>
+       <system.webServer>
+               <modules runAllManagedModulesForAllRequests="true">
+                       <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule"/>
+               </modules>
+       </system.webServer>
+       <rewriter>
+               <rewrite url="~/redirect" to="~/Redirect.aspx"/>
+               <rewrite url="~/page/([0-9]+)$" to="~/Page.aspx?pageNumber=$1"/>
+               <rewrite url="~/page/([0-9]+)(\?)(.*)" to="~/Page.aspx?pageNumber=$1&amp;$3"/>
+       </rewriter>
+</configuration>
diff --git a/WebDriverTests/imported/selenium/common/src/web/actualXhtmlPage.xhtml b/WebDriverTests/imported/selenium/common/src/web/actualXhtmlPage.xhtml
new file mode 100644 (file)
index 0000000..a0f5470
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>
+      Title
+    </title>
+  </head>
+  <body>
+    <p>
+     <a href="/foo">Foo</a>
+    </p>
+  </body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/ajaxy_page.html b/WebDriverTests/imported/selenium/common/src/web/ajaxy_page.html
new file mode 100644 (file)
index 0000000..4b34031
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html>
+<body>
+<form action="javascript:updateDom()">
+  <label for="typer">New label text:</label>
+  <input name="typer" type="text"/>
+  <br/>
+  <label for="color">Select label color:</label>
+  <input name="color" id="red" value="red" type="radio"/>Red
+  <input name="color" id="green" value="green" type="radio"/>Green
+  <br/>
+  <input name="submit" type="submit" value="Add Label"/>
+</form>
+<div id="update_butter" style="display:none"></div>
+<script>
+  var butter = document.getElementById('update_butter');
+
+  var textProperty = butter['innerText'] ? 'innerText' : 'textContent';
+
+  var listeners = [];
+  function registerListener(fn) {
+    listeners.push(fn);
+  }
+
+  function updateDom() {
+    butter.style.display = 'block';
+    butter[textProperty] = 'Updating';
+    disableForm();
+    tick();
+  }
+
+  function disableForm() {
+    var inputs = document.getElementsByTagName('input');
+    for (var i = 0, input; input = inputs[i]; ++i) {
+      input.disabled = true;
+    }
+  }
+
+  function enableForm() {
+    var inputs = document.getElementsByTagName('input');
+    for (var i = 0, input; input = inputs[i]; ++i) {
+      input.disabled = false;
+    }
+  }
+
+  function tick() {
+    var length = butter[textProperty].substring('Updating'.length).length;
+    if (length != 10) {
+      butter[textProperty] += '.';
+      window.setTimeout(tick, 500);
+    } else {
+      enableForm();
+      var div = document.createElement('div');
+      var colors = document.forms[0].color;
+      for (var i = 0, color; color = colors[i]; ++i) {
+        if (color.checked) {
+          div.style.backgroundColor = color.value;
+          break;
+        }
+      }
+      div[textProperty] = document.forms[0].typer.value;
+      div.className = 'label';
+      document.forms[0].typer.value = '';
+      document.body.appendChild(div);
+
+      butter[textProperty] = 'Done!';
+
+      window.setTimeout(function() {
+        while (listeners.length) {
+          try {
+            listeners.shift()(div[textProperty]);
+          } catch (e) {
+            butter[textProperty] = "Exception seen: " + e;
+          }
+        }
+      }, 500);
+    }
+  }
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/alerts.html b/WebDriverTests/imported/selenium/common/src/web/alerts.html
new file mode 100644 (file)
index 0000000..1add0db
--- /dev/null
@@ -0,0 +1,85 @@
+<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 slowAlert() {
+          window.setTimeout(function() {
+            alert('Slow');
+          }, 200);
+        }
+    </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>A <a href="#" id="slow-alert" onclick="slowAlert();">SLOW</a> alert</p>
+
+<p>This is a test of a confirm:
+    <a href="simpleTest.html" id="confirm" onclick="return confirm('Are you sure?');">test confirm</a></p>
+
+<p>This is a test of showModalDialog: <a href="#" id="dialog" onclick="showModalDialog('javascriptPage.html')">test dialog</a></p>
+
+<p>This is a test of an alert in an iframe:
+  <iframe src="iframeWithAlert.html" name="iframeWithAlert"></iframe>
+</p>
+
+<p>This is a test of an alert in a nested iframe:
+  <iframe src="iframeWithIframe.html" name="iframeWithIframe"></iframe>
+</p>
+
+<p>This is a test of an alert open from onload event handler: <a id="open-page-with-onload-alert" href="pageWithOnLoad.html">open new page</a></p>
+
+<p>This is a test of an alert open from onload event handler: <a id="open-window-with-onload-alert" href="pageWithOnLoad.html" target="onload">open new window</a></p>
+
+<p>This is a test of an alert open from onunload event handler: <a id="open-page-with-onunload-alert" href="pageWithOnUnload.html">open new page</a></p>
+
+<p>This is a test of an alert open from onclose event handler: <a id="open-window-with-onclose-alert" href="pageWithOnUnload.html" target="onclose">open new window</a></p>
+
+<p>This is a test of an alert open from onclose event handler: <a id="open-new-window" href="blank.html" target="newwindow">open new window</a></p>
+
+<div id="text"></div>
+<div id="text1"></div>
+<div id="text2"></div>
+
+<p><select id="select" onchange="alert('changed');">
+  <option id="novalue" value="">Nothing selected</option>
+  <option id="value1" value="1">One</option>
+  <option id="value2" value="2">Two</option>
+  <option id="value3" value="3">Three</option>
+</select></p>
+<p><input id="input" onchange="alert('change fired');" value="onchange"/></p>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/animals/.gitignore b/WebDriverTests/imported/selenium/common/src/web/animals/.gitignore
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/WebDriverTests/imported/selenium/common/src/web/banner.gif b/WebDriverTests/imported/selenium/common/src/web/banner.gif
new file mode 100644 (file)
index 0000000..3f34354
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/banner.gif differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/beach.jpg b/WebDriverTests/imported/selenium/common/src/web/beach.jpg
new file mode 100644 (file)
index 0000000..402237c
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/beach.jpg differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/blank.html b/WebDriverTests/imported/selenium/common/src/web/blank.html
new file mode 100644 (file)
index 0000000..c3f376e
--- /dev/null
@@ -0,0 +1 @@
+<html><head><title>blank</title></head><body></body></html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/bodyTypingTest.html b/WebDriverTests/imported/selenium/common/src/web/bodyTypingTest.html
new file mode 100644 (file)
index 0000000..f2b1939
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Testing Typing into body</title>
+    <script type="text/javascript">
+        function appendMessage(message) {
+            document.getElementById('result').innerHTML += message + " ";
+        }
+
+        function appendMessageFromBody(message) {
+            document.getElementById('body_result').innerHTML += message + " ";
+        }
+    </script>
+</head>
+
+<body onkeypress="appendMessageFromBody('keypress')">
+  <h1>Type Stuff</h1>
+
+  <div id="result">
+    &nbsp;
+  </div>
+
+  <div id="body_result">
+    &nbsp;
+  </div>
+
+
+  <!-- Textbox - to confuse some browsers. -->
+
+  <form action="resultPage.html" id="on-form">
+    <input id="intext"
+           onfocus="appendMessage('focus')"
+           onkeydown="appendMessage('keydown')"
+           onkeypress="appendMessage('keypress')"
+           onkeyup="appendMessage('keyup')"
+           onblur="appendMessage('blur')"
+           onchange="appendMessage('change')"
+           />
+  </form>
+</body>
+
diff --git a/WebDriverTests/imported/selenium/common/src/web/booleanAttributes.html b/WebDriverTests/imported/selenium/common/src/web/booleanAttributes.html
new file mode 100644 (file)
index 0000000..16fbbe9
--- /dev/null
@@ -0,0 +1,19 @@
+<html>
+<head>
+    <title>Elements with boolean attributes</title>
+</head>
+<body>
+<form method="get" action="resultPage.html" name="required">
+    <input type="text" id="working"/>
+    <input type="email" id="emailRequired" required/>
+    <input type="text" id="inputRequired" value="Example text" required=""/>
+    <textarea id="textAreaRequired" rows="5" cols="5" required="false">Example text</textarea>
+    <textarea id="emptyTextAreaRequired" rows="5" cols="5" required="required"></textarea>
+</form>
+
+<!-- Empty div to test GetAttribute -->
+<div id="wallace" class="gromit"></div>
+<!-- Div to test boolean attributes -->
+<div id="unwrappable" nowrap>Unwrappable text</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/child/childPage.html b/WebDriverTests/imported/selenium/common/src/web/child/childPage.html
new file mode 100644 (file)
index 0000000..9192b54
--- /dev/null
@@ -0,0 +1,8 @@
+<html>
+<head>
+    <title>Depth one child page</title>
+</head>
+<body>
+  <p>I'm a page in a child directory</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/child/grandchild/grandchildPage.html b/WebDriverTests/imported/selenium/common/src/web/child/grandchild/grandchildPage.html
new file mode 100644 (file)
index 0000000..f52685e
--- /dev/null
@@ -0,0 +1,8 @@
+<html>
+<head>
+    <title>Depth two child page</title>
+</head>
+<body>
+  <p>I'm a page in a grandchild directory! How cute!</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/clickEventPage.html b/WebDriverTests/imported/selenium/common/src/web/clickEventPage.html
new file mode 100644 (file)
index 0000000..8e0355d
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+  <title>Testing click events</title>
+  <script type="text/javascript">
+  function displayEvent(event) {
+    var keys = ['x', 'y', 'clientX', 'clientY', 'pageX', 'pageY', 'screenX', 'screenY', 'shiftKey', 'ctrlKey'];
+    var message = "<ul>";
+    for (var i = 0; i < keys.length; i++) {
+      message += "<li>" + keys[i] + ": <span id='" + keys[i] + "'>" + event[keys[i]] + "</span></li>";
+    }
+    message += "</ul>";
+    document.getElementById('result').innerHTML = message;
+  }
+  </script>
+</head>
+<body>
+  <div id="eventish" onclick="displayEvent(event);">
+    Click me to view my coordinates
+  </div>
+
+  <div id="result" style="width:300;height:60">
+    <p>&nbsp;</p>
+  </div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_frames.html b/WebDriverTests/imported/selenium/common/src/web/click_frames.html
new file mode 100644 (file)
index 0000000..bd055c7
--- /dev/null
@@ -0,0 +1,10 @@
+<html>
+<head>
+    <title>click frames</title>
+</head>
+<frameset rows="*" border="1">
+  <frame src="clicks.html" name="source" scrolling="NO" noresize>
+  <frame src="xhtmlTest.html" name="target">
+</frameset>
+</frameset>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_jacker.html b/WebDriverTests/imported/selenium/common/src/web/click_jacker.html
new file mode 100644 (file)
index 0000000..0ff3900
--- /dev/null
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>click-jacking</title>
+  <script>
+    var clickJacker;
+
+    function setOpacity(opacity) {
+      var matches = window.navigator.userAgent.match(/MSIE\s*(\d*)/);
+      if (matches && matches.length > 1 && parseInt(matches[1]) <= 8) {
+        clickJacker.style.filter = 'alpha(opacity=' + (opacity * 100) + ')';
+      } else {
+        clickJacker.style.opacity = opacity;
+      }
+    }
+
+    function init() {
+      clickJacker = document.getElementById('clickJacker');
+      setOpacity(0);
+    }
+  </script>
+</head>
+<body onload="init()">
+<div>
+  <div id="clickJacker"
+       onclick="setOpacity(1);"
+       style="position:absolute;float:left;
+              width:200px;height:100px; padding:10px;
+              background-color:darkred;
+              border:1px solid darkred;">Click jacked!</div>
+  <div style="width:200px; height:100px;
+              border:1px solid black; padding:10px">Click Me</div>
+  <script>
+    clickJacker = document.getElementById('clickJacker');
+  </script>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_out_of_bounds.html b/WebDriverTests/imported/selenium/common/src/web/click_out_of_bounds.html
new file mode 100644 (file)
index 0000000..8a51659
--- /dev/null
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<body>
+
+<table>
+  <tr>
+
+    <td>
+      <div style="width:752px;"></div>
+    </td>
+
+    <td>
+      <div style="width:350px; text-align: center;">
+        <form onsubmit="return false;" method="get">
+          <input id="button" value="Click me" type="submit">
+        </form>
+      </div>
+    </td>
+  </tr>
+</table>
+
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_out_of_bounds_overflow.html b/WebDriverTests/imported/selenium/common/src/web/click_out_of_bounds_overflow.html
new file mode 100644 (file)
index 0000000..15ac17f
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<html><head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<body>
+<div style="height: 100px; overflow: auto;">
+  <table>
+    <tbody>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td>data</td></tr>
+      <tr><td><a href="#clicked" id="link">click me</a></td></tr>
+    </tbody>
+</table>
+</div>
+</body></html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_rtl.html b/WebDriverTests/imported/selenium/common/src/web/click_rtl.html
new file mode 100644 (file)
index 0000000..e84fffa
--- /dev/null
@@ -0,0 +1,19 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>RTL test</title>
+<style type="text/css">
+        .test { font-size: 150%; }
+        table td { border: 1px solid #CCC; }
+        img { margin: 10px; }
+</style>
+</head>
+<body>
+<div dir="rtl">
+
+<div class="test">مفتاح<a href="clicks.html" id="ar_link"> معايير</a> الويب</div>
+
+<div class="test">פעילות<a id="hb_link" href="clicks.html"> הבינאום </a></div>
+
+</div>
+
+</body></html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_source.html b/WebDriverTests/imported/selenium/common/src/web/click_source.html
new file mode 100644 (file)
index 0000000..22e9319
--- /dev/null
@@ -0,0 +1,18 @@
+<html>
+<head>
+    <title>Click Source</title>
+</head>
+<body>
+  <a href="simpleTest.html" target="target" id="otherframe">I go to a target</a>
+</body>
+</html>
+        
+<html>
+<head>
+    <title>Click Source</title>
+</head>
+<body>
+  <a href="simpleTest.html" target="target" id="otherframe">I go to a target</a>
+</body>
+</html>
+        
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/click_iframe.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/click_iframe.html
new file mode 100644 (file)
index 0000000..7b749bc
--- /dev/null
@@ -0,0 +1,6 @@
+<html>
+<head>
+    <title>click iframe</title>
+</head>
+<body><a id="link" href="submitted_page.html" target="_top">Click me</a></body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/click_in_iframe.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/click_in_iframe.html
new file mode 100644 (file)
index 0000000..60b1cca
--- /dev/null
@@ -0,0 +1,8 @@
+<html>
+<head>
+    <title>click in iframe</title>
+</head>
+<body>
+<iframe id="ifr" src="click_iframe.html" style="margin: 200px; width: 100px; height: 50px;" />
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/disabled_element.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/disabled_element.html
new file mode 100644 (file)
index 0000000..7113e1b
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Clicking on a disabled element</title>
+</head>
+<body>
+<h1>See below</h1>
+<form action="POST">
+  <input name="disabled" disabled="disabled" />
+</form>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/disappearing_element.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/disappearing_element.html
new file mode 100644 (file)
index 0000000..4386d5d
--- /dev/null
@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>An element that disappears on click</title>
+  <style>
+#under {
+  position: absolute;
+  top: 20;
+  left: 20;
+  width: 100px;
+  height: 100px;
+  background-color: white;
+}
+
+#over {
+  position: absolute;
+  top: 20;
+  left: 20;
+  width: 100px;
+  height: 100px;
+  background-color: red;
+  opacity: 0.5;
+}
+
+#log {
+  position: absolute;
+  top: 120px;
+}
+  </style>
+</head>
+<body id="body">
+  <div id="under"><p id="contents">Hello</p></div>
+  <div id="over"></div>
+  <div id="log">
+    <p>Log:<p>
+  </div>
+<script>
+var byId = document.getElementById.bind(document);
+
+var log = byId("log");
+
+function handler(ev) {
+  log.innerHTML += "<p></p>";
+  log.lastElementChild.textContent = ev.type + " in " + ev.target.id + " (handled by " + ev.currentTarget.id + ")\n";
+}
+
+var under = byId("under");
+var over = byId("over");
+var body = document.body;
+
+var types = ["click", "mousedown", "mouseup"];
+for (var i = 0, type; (type = types[i]); ++i) {
+  under.addEventListener(type, handler);
+  over.addEventListener(type, handler);
+  body.addEventListener(type, handler);
+}
+over.addEventListener("mousedown", function () {
+  over.style.display = "none";
+})
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/google_map.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/google_map.html
new file mode 100644 (file)
index 0000000..eb2e556
--- /dev/null
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Google Image Map</title>
+</head>
+<body>
+<h1>Google Image Map</h1>
+<img id="google_logo" src="google_map.png" usemap="#google_map" border="0" width="364" height="126"/>
+<map id="google_map" name="google_map">
+<area id="rectG" shape="rect" coords="0,0,90,100" href="mapped_page1.html" alt="area 1"/>
+<area id="circleO" shape="circle" coords="120,60,30" href="mapped_page2.html" alt="area 2"/>
+<area id="polyLE" shape="poly" coords="280,0,310,0,360,30,360,90,280,90" href="mapped_page3.html" alt="area 3"/>
+</map>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/google_map.png b/WebDriverTests/imported/selenium/common/src/web/click_tests/google_map.png
new file mode 100644 (file)
index 0000000..763f562
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/click_tests/google_map.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/html5_submit_buttons.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/html5_submit_buttons.html
new file mode 100644 (file)
index 0000000..a8fc6ca
--- /dev/null
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>HTML5 Submit Buttons</title>
+</head>
+<body>
+<form id="form1" action="submitted_page.html">
+<label for="name">Enter your name: </label><input type="text" name="name" id="name"/>
+<button id="internal_explicit_submit" type="submit">Explicit Submit</button>
+<button id="internal_implicit_submit">Implicit Submit</button>
+<button type="submit"><span id="internal_span_submit">Spanned Submit</span></button>
+</form>
+<button id="external_explicit_submit" type="submit" form="form1">Explicit Submit</button>
+<button id="external_implicit_submit" form="form1">Implicit Submit</button>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/issue5237.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/issue5237.html
new file mode 100644 (file)
index 0000000..464fa11
--- /dev/null
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Sample page for issue 5237</title>
+</head>
+<body>
+  <iframe id="search" src="issue5237_frame.html"></iframe>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/issue5237_frame.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/issue5237_frame.html
new file mode 100644 (file)
index 0000000..d6f4caf
--- /dev/null
@@ -0,0 +1 @@
+<a id="submit" href="#" onclick="window.top.location = 'issue5237_target.html'; return false;">Continue</a>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/issue5237_target.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/issue5237_target.html
new file mode 100644 (file)
index 0000000..cbc16e8
--- /dev/null
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Target page for issue 5237</title>
+</head>
+<body>
+<h1>Test passed</h1>
+</map>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/link_that_wraps.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/link_that_wraps.html
new file mode 100644 (file)
index 0000000..0443436
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>Link that continues on next line</title>
+</head>
+<body>
+  <div style="width:300px">
+    <div style="float:left;width:200px;background:red">placeholder</div><a id="link" href="submitted_page.html">Link that continues on next line</a>
+  </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/mapped_page1.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/mapped_page1.html
new file mode 100644 (file)
index 0000000..245f038
--- /dev/null
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Target Page 1</title>
+</head>
+<body>
+  <div>Target Page 1</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/mapped_page2.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/mapped_page2.html
new file mode 100644 (file)
index 0000000..6f9636c
--- /dev/null
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Target Page 2</title>
+</head>
+<body>
+  <div>Target Page 2</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/mapped_page3.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/mapped_page3.html
new file mode 100644 (file)
index 0000000..87a35f3
--- /dev/null
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Target Page 3</title>
+</head>
+<body>
+  <div>Target Page 3</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/overlapping_elements.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/overlapping_elements.html
new file mode 100644 (file)
index 0000000..6cfa56a
--- /dev/null
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>An element that disappears on click</title>
+  <style>
+#under {
+  position: absolute;
+  top: 20px;
+  left: 20px;
+  width: 100px;
+  height: 100px;
+  background-color: white;
+}
+
+#partially_under {
+  position: absolute;
+  top: 20px;
+  left: 10px;
+  width: 100px;
+  height: 100px;
+  background-color: blue;
+  opacity: 0.5;
+}
+
+#over {
+  position: absolute;
+  top: 20px;
+  left: 20px;
+  width: 100px;
+  height: 100px;
+  background-color: red;
+  opacity: 0.5;
+}
+
+#log {
+  position: absolute;
+  top: 120px;
+}
+  </style>
+</head>
+<body id="body">
+  <div id="under"><p id="contents">Hello</p></div>
+  <div id="partially_under"><p id="other_contents">Hello</p></div>
+  <div id="over"></div>
+  <div id="log">
+    <p>Log:<p>
+  </div>
+<script>
+var byId = document.getElementById.bind(document);
+
+var log = byId("log");
+
+function handler(ev) {
+  log.innerHTML += "<p></p>";
+  log.lastElementChild.textContent = ev.type + " in " + ev.target.id + " (handled by " + ev.currentTarget.id + ")\n";
+}
+
+var under = byId("under");
+var over = byId("over");
+var body = document.body;
+
+var types = ["click", "mousedown", "mouseup"];
+for (var i = 0, type; (type = types[i]); ++i) {
+  under.addEventListener(type, handler);
+  over.addEventListener(type, handler);
+  body.addEventListener(type, handler);
+}
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/partially_overlapping_elements.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/partially_overlapping_elements.html
new file mode 100644 (file)
index 0000000..2af6252
--- /dev/null
@@ -0,0 +1,124 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>An element that disappears on click</title>
+  <style>
+#under_under {
+  position: absolute;
+  top: 20px;
+  left: 20px;
+  width: 100px;
+  height: 100px;
+  background-color: white;
+}
+
+#under {
+  position: absolute;
+  top: 20px;
+  left: 20px;
+  width: 100px;
+  height: 100px;
+  background-color: blue;
+  opacity: 0.1;
+}
+
+#over1 {
+  position: absolute;
+  top: 10px;
+  left: 10px;
+  width: 50px;
+  height: 50px;
+  background-color: red;
+  opacity: 0.2;
+}
+
+#over2 {
+  position: absolute;
+  top: 80px;
+  left: 10px;
+  width: 50px;
+  height: 50px;
+  background-color: red;
+  opacity: 0.2;
+}
+
+#over3 {
+  position: absolute;
+  top: 10px;
+  left: 80px;
+  width: 50px;
+  height: 50px;
+  background-color: red;
+  opacity: 0.2;
+}
+
+#over4 {
+  position: absolute;
+  top: 80px;
+  left: 80px;
+  width: 50px;
+  height: 50px;
+  background-color: red;
+  opacity: 0.2;
+}
+
+#over5 {
+  position: absolute;
+  top: 45px;
+  left: 45px;
+  width: 50px;
+  height: 50px;
+  background-color: red;
+  opacity: 0.2;
+}
+
+#log {
+  position: absolute;
+  top: 120px;
+}
+  </style>
+</head>
+<body id="body">
+  <div id="under_under"><p id="contents">Hello</p></div>
+  <div id="under"><p id="other_contents">Hello</p></div>
+  <div id="over1"></div>
+  <div id="over2"></div>
+  <div id="over3"></div>
+  <div id="over4"></div>
+  <div id="over5"></div>
+  <div id="log">
+    <p>Log:<p>
+  </div>
+<script>
+var byId = document.getElementById.bind(document);
+
+var log = byId("log");
+
+function handler(ev) {
+  log.innerHTML += "<p></p>";
+  log.lastElementChild.textContent = ev.type + " in " + ev.target.id + " (handled by " + ev.currentTarget.id + ")\n";
+}
+
+var under_under = byId("under_under");
+var under = byId("under");
+var over1 = byId("over1");
+var over2 = byId("over2");
+var over3 = byId("over3");
+var over4 = byId("over4");
+var over5 = byId("over5");
+var body = document.body;
+
+var types = ["click", "mousedown", "mouseup"];
+for (var i = 0, type; (type = types[i]); ++i) {
+  under_under.addEventListener(type, handler);
+  under.addEventListener(type, handler);
+  over1.addEventListener(type, handler);
+  over2.addEventListener(type, handler);
+  over3.addEventListener(type, handler);
+  over4.addEventListener(type, handler);
+  over5.addEventListener(type, handler);
+  body.addEventListener(type, handler);
+}
+</script>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/span_that_wraps.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/span_that_wraps.html
new file mode 100644 (file)
index 0000000..77a9d6d
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>Link that continues on next line</title>
+</head>
+<body>
+  <div style="width:300px">
+    <div style="float:left;width:200px;background:red">placeholder</div><span id="span" onclick="document.location='submitted_page.html'">Span that continues on next line</span>
+  </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/submitted_page.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/submitted_page.html
new file mode 100644 (file)
index 0000000..0ed2cba
--- /dev/null
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Submitted Successfully!</title>
+</head>
+<body>
+<h1>Submitted Successfully!</h1>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_tests/wrapped_overlapping_elements.html b/WebDriverTests/imported/selenium/common/src/web/click_tests/wrapped_overlapping_elements.html
new file mode 100644 (file)
index 0000000..1c0c3d0
--- /dev/null
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>A wrapped element with overlapped first part</title>
+</head>
+<body id="body">
+<div style="width:300px">
+  <div style="float:left;width:200px;background:green;">placeholder</div>
+  <div style="float:left; position:absolute;width:100px;margin-left:200px;background:red;opacity:0.5;">Over</div>
+  <a id="link" href="submitted_page.html">Link that continues on next line</a>
+</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_too_big.html b/WebDriverTests/imported/selenium/common/src/web/click_too_big.html
new file mode 100644 (file)
index 0000000..568ee77
--- /dev/null
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<body>
+       <a id="click" href="clicks.html" target="_parent">
+               <div style="width: 10001px; height: 10001px; background-color: green;">
+                       &nbsp; &nbsp; &nbsp;
+               </div>
+       </a>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/click_too_big_in_frame.html b/WebDriverTests/imported/selenium/common/src/web/click_too_big_in_frame.html
new file mode 100644 (file)
index 0000000..cda990e
--- /dev/null
@@ -0,0 +1,11 @@
+<html>
+<head>
+    <title>This page has iframes</title>
+</head>
+<body>
+<h1 id="iframe_page_heading">This is the heading</h1>
+
+<iframe src="click_too_big.html" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" allowtransparency="true"
+        frameborder="0" height="10001" scrolling="no" width="10001" id="iframe1" name="iframe1-name" />
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/clicks.html b/WebDriverTests/imported/selenium/common/src/web/clicks.html
new file mode 100644 (file)
index 0000000..dc07fee
--- /dev/null
@@ -0,0 +1,35 @@
+<html>
+<head>
+    <title>clicks</title>
+</head>
+<body>
+<h1>Testing Clicks</h1>
+
+<iframe id="source" src="click_source.html">
+
+</iframe>
+
+<iframe id="target" name="target">
+
+</iframe>
+<br>
+<a href="xhtmlTest.html" id="normal">I'm a normal link</a>
+<br/>
+<a href="#" id="anchor">I go to an anchor</a>
+<br>
+<a href="javascript:window.open('xhtmlTest.html', '_blank')" id="new-window">I open a window with javascript</a>
+<br/>
+<a href="xhtmlTest.html" id="twoClientRects"><span></span><span>Click me</span></a>
+<br/>
+<a href="xhtmlTest.html" id="link-with-enclosed-image"><img id="enclosed-image" src="./icon.gif"/></a>
+<br/>
+<a href="xhtmlTest.html" id="link-with-enclosed-span"><span id="enclosed-span" style="color: rgb(0, 255, 0)">I'm a green link</span></a>
+<p style="background: none repeat scroll 0% 0% rgb(0, 255, 0); width: 5em;"><a id="overflowLink" href="xhtmlTest.html">looooooooooong short looooooooooong</a>
+                </p>
+<div id="bubblesTo" onclick="window.bubbledClick = true;">
+  <a id="bubblesFrom">I bubble</a>
+</div>
+<a href="xhtmlTest.html">333333</a>
+<p><a href="xhtmlTest.html" id="embeddedBlock"><span style="display: block;">I have a span</span><div>And a div</div><span>And another span</span></a></p>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/closeable_window.html b/WebDriverTests/imported/selenium/common/src/web/closeable_window.html
new file mode 100644 (file)
index 0000000..e64c599
--- /dev/null
@@ -0,0 +1,8 @@
+<html>
+<head>
+<title>closeable window</title>
+</head>
+<body>
+This window can be closed by clicking on <a id="close" onclick="window.setTimeout(function() { window.close();}, 0);" href="#">this</a>.
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/cn-test.html b/WebDriverTests/imported/selenium/common/src/web/cn-test.html
new file mode 100644 (file)
index 0000000..df846ad
--- /dev/null
@@ -0,0 +1,156 @@
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
+<style type="text/css">
+
+
+
+  /* default css */
+  
+  table {
+    font-size: 1em;
+    line-height: inherit;
+  }
+
+  
+  div, address, ol, ul, li, option, select { 
+    margin-top: 0px;
+    margin-bottom: 0px;
+  }
+
+  p {
+    margin: 0px;
+  }
+
+  body {
+    
+    
+      margin: 0px;
+    
+    
+    
+      padding-left: 50px;
+      padding-right: 50px;
+      padding-top: 40px;
+      
+    
+  }
+
+  h6 { font-size: 10pt }
+  h5 { font-size: 11pt }
+  h4 { font-size: 12pt }
+  h3 { font-size: 13pt }
+  h2 { font-size: 14pt }
+  h1 { font-size: 16pt }
+
+  blockquote {padding: 10px; border: 1px #DDD dashed }
+
+  a img {border: 0}
+
+  div.google_header, div.google_footer {
+    position: relative;
+    margin-top: 1em;
+    margin-bottom: 1em;
+  }
+  /* end default css */
+
+  
+    /* default print css */
+    
+    @media print {
+      body { 
+        padding: 0; 
+        margin: 0; 
+      }
+
+      div.google_header, div.google_footer {
+        display: block;
+        min-height: 0;
+        border: none;
+      }
+
+      div.google_header {
+        flow: static(header);
+      }
+
+      /* used to insert page numbers */
+      div.google_header::before, div.google_footer::before {
+        position: absolute;
+        top: 0;
+      }
+
+      div.google_footer {
+        flow: static(footer);
+      }
+
+      /* always consider this element at the start of the doc */
+      div#google_footer {
+        flow: static(footer, start);
+      }
+
+      span.google_pagenumber {
+        content: counter(page);
+      }
+
+      span.google_pagecount {
+        content: counter(pages);
+      }
+    }
+
+    @page {
+      @top {
+        content: flow(header);
+      }
+      @bottom {
+        content: flow(footer);
+      }
+    }
+    /* end default print css */
+   
+  
+  /* custom css */
+  
+  
+  /* end custom css */
+
+  /* ui edited css */
+  
+  body {
+    font-family: Verdana;
+    
+    font-size: 10.0pt;
+    line-height: normal;
+    background-color: #ffffff;
+  }
+  /* end ui edited css */
+
+
+
+
+</style>
+
+
+</head>
+
+<body revision="cczv65wb_54f62cc9f2:3">
+
+<div id="result">
+</div>
+    
+    
+<h1>Õ¹Íû2008ÊÀ½ç´óÊÆ£º·çÆðÔÆÓ¿ ¼¤µ´ÈËÐÄ</h1><br>
+<br>
+  8ÔÂ8ÈÕÍí£¬±±¾©2008Äê°ÂÔ˻ᵹ¼ÆʱһÖÜÄêÇì×£»î¶¯ÔÚÌì°²ÃŹ㳡¾ÙÐС£Í¼ÎªÇì×£»î¶¯ÖеÄÎÄÒÕÑݳö¡£ Ð»ªÉç¼ÇÕßÁõÎÀ±øÉã
+
+    £²£°£°£¸ÄêÊÀ½ç·çÆðÔÆÓ¿£¬¼¤µ´ÈËÐÄ¡£µ«Òª×÷³öÒ»¸öÔ¤²â£¬Ê×ÏÈÒª¶Ô½ñÌìËù´¦µÄÊÀ½çÓÐÒ»¸ö»ù±¾¹²Ê¶¡£<br>
+<br>
+<a href=simpleTest.html id=b7v9 title=ÖйúÖ®Éù>ÖйúÖ®Éù</a><br>
+<br>
+<br>
+
+<form action="simpleTest.html">
+  <input name="i18n" onchange="document.getElementById('result').innerHTML = '<p>' + this.value + '</p>';" />
+</form>
+
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/colorPage.html b/WebDriverTests/imported/selenium/common/src/web/colorPage.html
new file mode 100644 (file)
index 0000000..0d1bfc0
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Color Page</title>
+</head>
+<body>
+<div id="namedColor" style="background-color: green;">namedColor</div>
+<div id="rgb" style="background-color: rgb(0,128,0);">rgb</div>
+<div id="rgbpct" style="background-color: rgb(0%,50%,0%);">rgbpct</div>
+<div id="hex" style="background-color: #008000;">hex</div>
+<div id="hexShort" style="background-color: #eee;">hex</div>
+<div id="hsl" style="background-color: hsl(120,100%,25%);">hsl</div>
+<div id="rgba" style="background-color: rgba(0,128,0, 0.5);">rgba</div>
+<div id="rgbapct" style="background-color: rgba(0%,50%,0%, 0.5);">rgba</div>
+<div id="hsla" style="background-color: hsla(120,100%,25%,0.5);">hsla</div>
+</body>
+</html>
+
+
+
diff --git a/WebDriverTests/imported/selenium/common/src/web/content-editable.html b/WebDriverTests/imported/selenium/common/src/web/content-editable.html
new file mode 100644 (file)
index 0000000..7a7d558
--- /dev/null
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Testing content editable</title>
+</head>
+<body>
+  <div id="editable" contenteditable="true">
+    Why <span>hello</span></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/cookies.html b/WebDriverTests/imported/selenium/common/src/web/cookies.html
new file mode 100644 (file)
index 0000000..7db5b49
--- /dev/null
@@ -0,0 +1,30 @@
+<html>
+<head>
+    <title>Testing cookies</title>
+
+    <script type="text/javascript">
+        function setCookie(domain, name) {
+            document.cookie = name + "=ok;path=/;domain=" + domain;            
+        }
+
+        function showCookie() {
+            document.getElementById("result").innerHTML = "<p>" + document.cookie + "</p>";
+        }
+    </script>
+</head>
+<body onload="showCookie();">
+<h2>Cookie Mashing</h2>
+    .com <a href="#" onclick="setCookie('.com', 'the.com_one'); showCookie(); return false;">Click</a></br />
+    . <a href="#" onclick="setCookie('.', 'the.one'); showCookie(); return false;">Click</a></br />
+    google.com <a href="#" onclick="setCookie('google.com', 'google'); showCookie(); return false;">Click</a></br />
+    .google.com <a href="#" onclick="setCookie('.google.com', '.google'); showCookie(); return false;">Click</a></br />
+    127.0.0.1 <a href="#" onclick="setCookie('127.0.0.1', 'localhost'); showCookie(); return false;">Click</a></br />
+    localhost:3001 <a href="#" onclick="setCookie('mency.ad.corp.google.com:62210', 'with_port'); showCookie(); return false;">Click</a></br />
+    .google:3001 <a href="#" onclick="setCookie('.google.com:62210', 'with_domain_and_port'); showCookie(); return false;">Click</a></br />
+    172.16.12.225 <a href="#" onclick="setCookie('172.16.12.225', 'raw_IP'); showCookie(); return false;">Click</a></br />  
+    172.16.12.225:port <a href="#" onclick="setCookie('172.16.12.225:62210', 'raw_IP_and_port'); showCookie(); return false;">Click</a></br />
+    <a href="#" onclick="document.cookie = 'foo=bar;path=/common/galaxy';">Set on a different path</a>
+
+<div id="result"></div>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/element_in_frame.html b/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/element_in_frame.html
new file mode 100644 (file)
index 0000000..7714a48
--- /dev/null
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Welcome Page</title>
+</head>
+<body style="margin: 10px; padding: 0px;">
+  <iframe name="ifr" src="simple_page.html" width="400" height="300" style="border: 5px solid;"></iframe>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/element_in_nested_frame.html b/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/element_in_nested_frame.html
new file mode 100644 (file)
index 0000000..b3143b0
--- /dev/null
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Welcome Page</title>
+</head>
+<body style="margin: 10px; padding: 0px;">
+  <iframe name="ifr" src="element_in_frame.html" width="500" height="400" style="border: 5px solid;"></iframe>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_element_out_of_view.html b/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_element_out_of_view.html
new file mode 100644 (file)
index 0000000..6f2bcd4
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Page With Element Out Of View</title>
+</head>
+<body style="margin: 10px; padding: 0px;">
+  <div style="height: 5000px;">Placeholder</div>
+  <div id="box" style="width: 100px; height: 100px; background-color: red;">Red box</div>
+  <div>Tex after box</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_empty_element.html b/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_empty_element.html
new file mode 100644 (file)
index 0000000..b07972a
--- /dev/null
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Page With Empty Element</title>
+</head>
+<body style="margin: 10px; padding: 0px;">
+  <div id="box"></div>
+  <div>Tex after box</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_fixed_element.html b/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_fixed_element.html
new file mode 100644 (file)
index 0000000..6cbb273
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Page With Fixed Element</title>
+</head>
+<body>
+  <div id="fixed" style="position:fixed; top:0px; left:100px; background-color:red">fixed red box</div>
+  <div id="placeholder" style="height: 5000px; background-color:green">Placeholder</div>
+  <div id="bottom">Element at the bottom</div>
+  <div>Tex after box</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_hidden_element.html b/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_hidden_element.html
new file mode 100644 (file)
index 0000000..286b04b
--- /dev/null
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Page With Hidden Element</title>
+</head>
+<body style="margin: 10px; padding: 0px;">
+  <div id="box" style="width: 100px; height: 100px; background-color: red; visibility: hidden;">Hidden box</div>
+  <div>Tex after box</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_invisible_element.html b/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_invisible_element.html
new file mode 100644 (file)
index 0000000..dc33c71
--- /dev/null
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Page With Invisible Element</title>
+</head>
+<body style="margin: 10px; padding: 0px;">
+  <div id="box" style="width: 100px; height: 100px; background-color: red; display: none;">Invisible box</div>
+  <div>Tex after box</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_transparent_element.html b/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/page_with_transparent_element.html
new file mode 100644 (file)
index 0000000..d0090d9
--- /dev/null
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Page With Transparent Element</title>
+</head>
+<body style="margin: 10px; padding: 0px;">
+  <div id="box" style="width: 100px; height: 100px; background-color: red; opacity: 0;">Hidden box</div>
+  <div>Tex after box</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/simple_page.html b/WebDriverTests/imported/selenium/common/src/web/coordinates_tests/simple_page.html
new file mode 100644 (file)
index 0000000..7b857b9
--- /dev/null
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Simple Page</title>
+</head>
+<body style="margin: 10px; padding: 0px;">
+  <div id="box" style="width: 100px; height: 100px; background-color: red;">Red box</div>
+  <div>Tex after box</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100644 (file)
index 0000000..954e22d
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100644 (file)
index 0000000..64ece57
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png
new file mode 100644 (file)
index 0000000..abdc010
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png
new file mode 100644 (file)
index 0000000..9b383f4
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100644 (file)
index 0000000..a23baad
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644 (file)
index 0000000..42ccba2
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png
new file mode 100644 (file)
index 0000000..39d5824
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100644 (file)
index 0000000..f127367
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100644 (file)
index 0000000..359397a
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_222222_256x240.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_222222_256x240.png
new file mode 100644 (file)
index 0000000..b273ff1
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_222222_256x240.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_228ef1_256x240.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_228ef1_256x240.png
new file mode 100644 (file)
index 0000000..a641a37
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_228ef1_256x240.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_ef8c08_256x240.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_ef8c08_256x240.png
new file mode 100644 (file)
index 0000000..85e63e9
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_ef8c08_256x240.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_ffd27a_256x240.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_ffd27a_256x240.png
new file mode 100644 (file)
index 0000000..e117eff
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_ffd27a_256x240.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_ffffff_256x240.png b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_ffffff_256x240.png
new file mode 100644 (file)
index 0000000..42f8f99
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/images/ui-icons_ffffff_256x240.png differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/jquery-ui-1.8.10.custom.css b/WebDriverTests/imported/selenium/common/src/web/css/ui-lightness/jquery-ui-1.8.10.custom.css
new file mode 100644 (file)
index 0000000..1706e22
--- /dev/null
@@ -0,0 +1,573 @@
+/*
+ * jQuery UI CSS Framework 1.8.10
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.10
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
+.ui-widget-content a { color: #333333; }
+.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
+.ui-widget-header a { color: #ffffff; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight  {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary,  .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-right {  -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
+.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
+ * jQuery UI Resizable 1.8.10
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Resizable#theming
+ */
+.ui-resizable { position: relative;}
+.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
+.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
+.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
+.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
+.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
+.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
+.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
+.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
+.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
+ * jQuery UI Selectable 1.8.10
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Selectable#theming
+ */
+.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
+/*
+ * jQuery UI Accordion 1.8.10
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Accordion#theming
+ */
+/* IE/Win - Fix animation bug - #4615 */
+.ui-accordion { width: 100%; }
+.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
+.ui-accordion .ui-accordion-li-fix { display: inline; }
+.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
+.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
+.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
+.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
+.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
+.ui-accordion .ui-accordion-content-active { display: block; }
+/*
+ * jQuery UI Autocomplete 1.8.10
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Autocomplete#theming
+ */
+.ui-autocomplete { position: absolute; cursor: default; }      
+
+/* workarounds */
+* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
+
+/*
+ * jQuery UI Menu 1.8.10
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Menu#theming
+ */
+.ui-menu {
+       list-style:none;
+       padding: 2px;
+       margin: 0;
+       display:block;
+       float: left;
+}
+.ui-menu .ui-menu {
+       margin-top: -3px;
+}
+.ui-menu .ui-menu-item {
+       margin:0;
+       padding: 0;
+       zoom: 1;
+       float: left;
+       clear: left;
+       width: 100%;
+}
+.ui-menu .ui-menu-item a {
+       text-decoration:none;
+       display:block;
+       padding:.2em .4em;
+       line-height:1.5;
+       zoom:1;
+}
+.ui-menu .ui-menu-item a.ui-state-hover,
+.ui-menu .ui-menu-item a.ui-state-active {
+       font-weight: normal;
+       margin: -1px;
+}
+/*
+ * jQuery UI Button 1.8.10
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Button#theming
+ */
+.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
+.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
+button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
+.ui-button-icons-only { width: 3.4em; } 
+button.ui-button-icons-only { width: 3.7em; } 
+
+/*button text element */
+.ui-button .ui-button-text { display: block; line-height: 1.4;  }
+.ui-button-text-only .ui-button-text { padding: .4em 1em; }
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
+.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
+/* no icon support for input elements, provide padding by default */
+input.ui-button { padding: .4em 1em; }
+
+/*button icon element(s) */
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
+.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
+
+/*button sets*/
+.ui-buttonset { margin-right: 7px; }
+.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
+
+/* workarounds */
+button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
+/*
+ * jQuery UI Dialog 1.8.10
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Dialog#theming
+ */
+.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
+.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative;  }
+.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } 
+.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
+.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
+.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
+.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
+.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
+.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
+.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
+.ui-draggable .ui-dialog-titlebar { cursor: move; }
+/*
+ * jQuery UI Slider 1.8.10
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Slider#theming
+ */
+.ui-slider { position: relative; text-align: left; }
+.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
+.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
+
+.ui-slider-horizontal { height: .8em; }
+.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
+.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
+.ui-slider-horizontal .ui-slider-range-min { left: 0; }
+.ui-slider-horizontal .ui-slider-range-max { right: 0; }
+
+.ui-slider-vertical { width: .8em; height: 100px; }
+.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
+.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
+.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
+.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
+ * jQuery UI Tabs 1.8.10
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/*
+ * jQuery UI Datepicker 1.8.10
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px;  }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month, 
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0;  }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+    display: none; /*sorry for IE5*/
+    display/**/: block; /*sorry for IE5*/
+    position: absolute; /*must have*/
+    z-index: -1; /*must have*/
+    filter: mask(); /*must have*/
+    top: -4px; /*must have*/
+    left: -4px; /*must have*/
+    width: 200px; /*must have*/
+    height: 200px; /*must have*/
+}/*
+ * jQuery UI Progressbar 1.8.10
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Progressbar#theming
+ */
+.ui-progressbar { height:2em; text-align: left; }
+.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/cssTransform.html b/WebDriverTests/imported/selenium/common/src/web/cssTransform.html
new file mode 100644 (file)
index 0000000..c3b9964
--- /dev/null
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<style>
+#parentY {
+  transform: translateY(-10000px);
+  -webkit-transform: translateY(-10000px);
+  -o-transform: translateY(-10000px);
+  -ms-transform: translateY(-10000px);
+  -moz-transform: translateY(-10000px);
+}
+#parentX {
+  transform: translateX(-10000px);
+  -webkit-transform: translateX(-10000px);
+  -o-transform: translateX(-10000px);
+  -ms-transform: translateX(-10000px);
+  -moz-transform: translateX(-10000px);
+}
+#transformX {
+  transform: translateX(-10000px);
+  -webkit-transform: translateX(-10000px);
+  -o-transform: translateX(-10000px);
+  -ms-transform: translateX(-10000px);
+  -moz-transform: translateX(-10000px);
+}
+#transformY {
+  transform: translateY(-10000px);
+  -webkit-transform: translateY(-10000px);
+  -o-transform: translateY(-10000px);
+  -ms-transform: translateY(-10000px);
+  -moz-transform: translateY(-10000px);
+}
+
+#zero-transform {
+  transform: translateY(0px);
+  -webkit-transform: translateY(0px);
+  -o-transform: translateY(0px);
+  -ms-transform: translateY(0px);
+  -moz-transform: translateY(0px);
+  transform: translateX(0px);
+  -webkit-transform: translateX(0px);
+  -o-transform: translateX(0px);
+  -ms-transform: translateX(0px);
+  -moz-transform: translateX(0px);
+}
+</style>
+<div id='zero-tranform'>
+You shouldn't see anything other than this sentence on the page
+</div>
+<div id='parentY'>
+  I have a hidden child
+  <div id='childY'>
+    I am a hidden child
+  </div>
+</div>
+<div id='parentX'>
+  I have a hidden child
+  <div id='childX'>
+    I am a hidden child
+  </div>
+</div>
+<div id='transformX'>I am a hidden element </div>
+<div id='transformY'>I am a hidden element </div>
diff --git a/WebDriverTests/imported/selenium/common/src/web/cssTransform2.html b/WebDriverTests/imported/selenium/common/src/web/cssTransform2.html
new file mode 100644 (file)
index 0000000..602924b
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<style>
+#negative-percentage-transformY{
+  transform: translateY(-75px);
+  -webkit-transform: translateY(-75%);
+  -o-transform: translateY(-75%);
+  -ms-transform: translateY(-75%);
+  -moz-transform: translateY(-75%);
+}
+.block {
+  display = block;
+}
+</style>
+<div class='block'>
+  <br/>
+</div>
+  <br/>
+<div class='block'>
+</div>
+<div id='negative-percentage-transformY'>I am not a hidden element </div>
diff --git a/WebDriverTests/imported/selenium/common/src/web/document_write_in_onload.html b/WebDriverTests/imported/selenium/common/src/web/document_write_in_onload.html
new file mode 100644 (file)
index 0000000..a15fc47
--- /dev/null
@@ -0,0 +1,13 @@
+<html>
+<head>
+  <title>Document Write In Onload</title>
+  <script>
+    function init() {
+      document.writeln('goodbye, world!');
+    }
+  </script>
+</head>
+<body onload="init();">
+<p>hello world</p>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/dragAndDropInsideScrolledDiv.html b/WebDriverTests/imported/selenium/common/src/web/dragAndDropInsideScrolledDiv.html
new file mode 100644 (file)
index 0000000..0b2ee9a
--- /dev/null
@@ -0,0 +1,67 @@
+<html>
+<head>
+<style>
+<!--
+.dragme{position:relative;}
+-->
+</style>
+<script language="JavaScript1.2">
+<!--
+
+var ie=document.all;
+var nn6=document.getElementById&&!document.all;
+
+var isdrag=false;
+var x,y;
+var dobj;
+
+function movemouse(e)
+{
+
+  if (isdrag)
+  {
+    dobj.style.left = nn6 ? tx + e.clientX - x : tx + event.clientX - x;
+    dobj.style.top  = nn6 ? ty + e.clientY - y : ty + event.clientY - y;
+    return false;
+  }
+}
+
+function selectmouse(e)
+{
+  var fobj       = nn6 ? e.target : event.srcElement;
+  var topelement = nn6 ? "HTML" : "BODY";
+
+  while (fobj.tagName != topelement && fobj.className != "dragme")
+  {
+    fobj = nn6 ? fobj.parentNode : fobj.parentElement;
+  }
+
+  if (fobj.className=="dragme")
+  {
+    isdrag = true;
+    dobj = fobj;
+    tx = parseInt(dobj.style.left+0);
+    ty = parseInt(dobj.style.top+0);
+    x = nn6 ? e.clientX : event.clientX;
+    y = nn6 ? e.clientY : event.clientY;
+    document.onmousemove=movemouse;
+    return false;
+  }
+}
+
+document.onmousedown=selectmouse;
+document.onmouseup=new Function("isdrag=false");
+
+//-->
+</script>
+
+</head>
+<body>
+  <div style="overflow: scroll; margin: 20px; height: 90%; width: 90%">
+    <div style="height: 4000px; width: 4000px;">
+      <div id="test1" class="dragme" style="width: 100px; height: 100px;
+                              background-color: black;" />
+    </div>
+  </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/dragAndDropTest.html b/WebDriverTests/imported/selenium/common/src/web/dragAndDropTest.html
new file mode 100644 (file)
index 0000000..fdee16b
--- /dev/null
@@ -0,0 +1,102 @@
+<html>
+<body>
+
+<style>
+<!--
+.dragme{position:relative;}
+-->
+</style>
+<script language="JavaScript1.2">
+<!--
+
+var ie=document.all;
+var nn6=document.getElementById&&!document.all;
+
+var isdrag=false;
+var x,y;
+var dobj;
+
+function movemouse(e)
+{
+  if (isdrag)
+  {
+    if (e && e.clientX)
+    {
+      dobj.style.left = tx + e.clientX - x;
+      dobj.style.top = ty + e.clientY - y
+    }
+    else
+    {
+      dobj.style.left = tx + event.clientX - x;
+      dobj.style.top = ty + event.clientY - y;
+    }
+    return false;
+  }
+}
+
+function selectmouse(e)
+{
+  var fobj;
+  var topelement;
+  if (e && e.target)
+  {
+    fobj = e.target;
+    topelement = "HTML";
+  }
+  else
+  {
+    fobj = event.srcElement;
+    topelement = "BODY";
+  }
+
+  while (fobj.tagName != topelement && fobj.className != "dragme")
+  {
+    if (fobj.parentNode)
+    {
+      fobj = fobj.parentNode;
+    }
+    else
+    {
+      fobj = fobj.parentElement;
+    }
+  }
+
+  if (fobj.className=="dragme")
+  {
+    isdrag = true;
+    dobj = fobj;
+    tx = parseInt(dobj.style.left+0);
+    ty = parseInt(dobj.style.top+0);
+    if (e && e.clientX)
+    {
+      x = e.clientX;
+      y = e.clientY;
+    }
+    else
+    {
+      x = event.clientX;
+      y = event.clientY;
+    }
+
+    document.onmousemove=movemouse;
+    return false;
+  }
+}
+
+document.onmousedown=selectmouse;
+document.onmouseup=new Function("isdrag=false");
+
+//-->
+</script>
+
+
+
+<img src="icon.gif" class="dragme" id="test1"><br>
+<img src="icon.gif" class="dragme" id="test2"><br>
+<b>"Hi there</b>
+<div style="position: absolute; left: 210px; top: 80px; height: 400px; width: 100px; padding: 10em;">
+<img src="icon.gif" class="dragme" id="test3"><br>
+<img src="icon.gif" class="dragme" id="test4"><br>
+</div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/dragDropOverflow.html b/WebDriverTests/imported/selenium/common/src/web/dragDropOverflow.html
new file mode 100644 (file)
index 0000000..ecb2562
--- /dev/null
@@ -0,0 +1,104 @@
+<html>
+<head>
+  <meta content="text/html; charset=UTF-8" http-equiv="content-type">
+  <style type="text/css">
+    body {
+      color: #222;
+      font-size: 13px;
+    }
+
+    .time-slot {
+      height: 47px;
+      vertical-align: top;
+      border-top: 1px solid #ddd;
+      padding-right: 2px;
+      z-index: 2;
+    }
+
+    #time-marker {
+      border-top: 3px solid #4d90fe;
+      height: 6px;
+      position: absolute;
+      width: 100%;
+      z-index: 4;
+      cursor: row-resize;
+    }
+  </style>
+</head>
+<body>
+<div style="position: absolute; overflow: hidden; width: 250px; height: 470px;">
+  <div style="position: relative;">
+    <div style="overflow: auto; position: relative; height: 85%; border: 1px solid #ebebeb">
+      <div id="time-marker" style="top: 432;"></div>
+      <div class="time-slot">12am</div>
+      <div class="time-slot">1am</div>
+      <div class="time-slot">2am</div>
+      <div class="time-slot">3am</div>
+      <div class="time-slot">4am</div>
+      <div class="time-slot">5am</div>
+      <div class="time-slot">6am</div>
+      <div class="time-slot">7am</div>
+      <div class="time-slot">8am</div>
+      <div class="time-slot">9am</div>
+      <div class="time-slot">10am</div>
+      <div id="11am" class="time-slot">11am</div>
+      <div class="time-slot">12pm</div>
+      <div class="time-slot">1pm</div>
+      <div class="time-slot">2pm</div>
+      <div class="time-slot">3pm</div>
+      <div class="time-slot">4pm</div>
+      <div class="time-slot">5pm</div>
+      <div class="time-slot">6pm</div>
+      <div class="time-slot">7pm</div>
+      <div class="time-slot">8pm</div>
+      <div class="time-slot">9pm</div>
+      <div class="time-slot">10pm</div>
+      <div class="time-slot">11pm</div>
+    </div>
+  </div>
+</div>
+<script type="text/javascript">
+  var startTime = document.getElementById('time-marker');
+
+  var ie = document.all;
+  var nn6 = document.getElementById && !document.all;
+
+  var isDrag = false;
+  var x, y, tx, ty;
+  var dragEl;
+
+  function movemouse(e) {
+    if (isDrag) {
+      var dy = (nn6 ? e.clientY - y : event.clientY - y);
+      if (dy % 12 == 0) {
+        dragEl.style.top = ty + dy;
+      }
+      return false;
+    }
+  }
+
+  function selectmouse(e) {
+    var srcEl = nn6 ? e.target : event.srcElement;
+    var topElement = nn6 ? "HTML" : "BODY";
+
+    while (srcEl.tagName != topElement && srcEl != startTime) {
+      srcEl = nn6 ? srcEl.parentNode : srcEl.parentElement;
+    }
+
+    if (srcEl === startTime) {
+      isDrag = true;
+      dragEl = srcEl;
+      tx = parseInt(dragEl.style.left + 0);
+      ty = parseInt(dragEl.style.top + 0);
+      x = nn6 ? e.clientX : event.clientX;
+      y = nn6 ? e.clientY : event.clientY;
+      document.onmousemove = movemouse;
+      return false;
+    }
+  }
+
+  document.onmousedown = selectmouse;
+  document.onmouseup = function() { isDrag = false; };
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/draggableLists.html b/WebDriverTests/imported/selenium/common/src/web/draggableLists.html
new file mode 100644 (file)
index 0000000..f7e0dca
--- /dev/null
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <title>jQuery UI Sortable - Connect lists</title>
+    <!--link type="text/css" href="development-bundle/themes/base/jquery.ui.all.css" rel="stylesheet" /-->
+    <!--link type="text/css" href="development-bundle/demos/demos.css" rel="stylesheet" /-->
+    <link type="text/css" href="css/ui-lightness/jquery-ui-1.8.10.custom.css" rel="stylesheet" />
+    <script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
+    <script type="text/javascript" src="js/jquery-ui-1.8.10.custom.min.js"></script>
+    <style type="text/css">
+      #sortable1, #sortable2 { list-style-type: none; margin: 0; padding: 0; float: left; margin-right: 10px; }
+      #sortable1 li, #sortable2 li { margin: 0 5px 5px 5px; padding: 5px; font-size: 1.2em; width: 120px; }
+    </style>
+    <script type="text/javascript">
+      $(function() {
+          $("#sortable1, #sortable2").sortable({
+            connectWith: '.connectedSortable'
+            }).disableSelection();
+
+          var report_event = function(report_text) {
+            var reportElement = $("#dragging_reports");
+            var origText = reportElement.text();
+            reportElement.text(origText + " " + report_text);
+          }
+
+          $("#sortable2").droppable({
+            out: function(event, ui) {
+              report_event("DragOut");
+            }
+            });
+
+          $("#sortable1").droppable({
+            drop: function(event, ui) {
+              report_event("DropIn " + ui.draggable.text());
+            }
+            });
+          });
+    </script>
+  </head>
+  <body>
+    <div class="demo">
+      <ul id="sortable1" class="connectedSortable">
+        <li id="leftitem-1" class="ui-state-default">LeftItem 1</li>
+        <li id="leftitem-2" class="ui-state-default">LeftItem 2</li>
+        <li id="leftitem-3" class="ui-state-default">LeftItem 3</li>
+        <li id="leftitem-4" class="ui-state-default">LeftItem 4</li>
+        <li id="leftitem-5" class="ui-state-default">LeftItem 5</li>
+      </ul>
+
+      <ul id="sortable2" class="connectedSortable">
+        <li id="rightitem-1" class="ui-state-highlight">RightItem 1</li>
+        <li id="rightitem-2" class="ui-state-highlight">RightItem 2</li>
+        <li id="rightitem-3" class="ui-state-highlight">RightItem 3</li>
+        <li id="rightitem-4" class="ui-state-highlight">RightItem 4</li>
+        <li id="rightitem-5" class="ui-state-highlight">RightItem 5</li>
+      </ul>
+
+    </div>
+
+    <br/>
+    <div class="test-data">
+      <p id="dragging_reports">Nothing happened.</p>
+    </div>
+
+  </body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/droppableItems.html b/WebDriverTests/imported/selenium/common/src/web/droppableItems.html
new file mode 100644 (file)
index 0000000..fc850ac
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <title>jQuery UI Droppable - Default Demo</title>
+    <link type="text/css" href="css/ui-lightness/jquery-ui-1.8.10.custom.css" rel="stylesheet" />
+    <script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
+    <script type="text/javascript" src="js/jquery-ui-1.8.10.custom.min.js"></script>
+  <style type="text/css">
+  #draggable { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
+  #droppable { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }
+  </style>
+  <script type="text/javascript">
+  $(function() {
+    $("#draggable").draggable();
+    $("#droppable").droppable({
+      drop: function(event, ui) {
+        $(this).addClass('ui-state-highlight').find('p').html('Dropped!');
+      }
+  });
+
+        var report_event = function(report_text) {
+          var reportElement = $("#drop_reports");
+          var origText = reportElement.text();
+          reportElement.text(origText + " " + report_text);
+        }
+
+        $('body').mousedown(function() {
+            report_event('down');
+        });
+
+        $('body').mousemove(function() {
+            report_event('move');
+        });
+
+        $('body').mouseup(function() {
+            report_event('up');
+        });
+  });
+  </script>
+</head>
+<body>
+<div class="demo">
+
+<div id="draggable" class="ui-widget-content">
+  <p>Drag me to my target</p>
+</div>
+
+<div id="droppable" class="ui-widget-header">
+  <p>Drop here</p>
+</div>
+
+<div class="test-data">
+  <p id="drop_reports">start</p>
+</div>
+
+</div><!-- End demo -->
+
+<div class="demo-description">
+
+<p>Taken from the JQuery demo.</p>
+
+</div><!-- End demo-description -->
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/dynamic.html b/WebDriverTests/imported/selenium/common/src/web/dynamic.html
new file mode 100644 (file)
index 0000000..b9e6067
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+    "http://www.w3.org/TR/html4/loose.dtd">
+<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/WebDriverTests/imported/selenium/common/src/web/dynamicallyModifiedPage.html b/WebDriverTests/imported/selenium/common/src/web/dynamicallyModifiedPage.html
new file mode 100644 (file)
index 0000000..ed7c7ed
--- /dev/null
@@ -0,0 +1,42 @@
+<?xml version="1.0">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <title>Delayed remove of an element</title>
+
+    <script type="text/javascript">
+      
+      var parentNode;
+      var elementId;
+        
+      function timedRemove()
+      {
+        var t = setTimeout('removeElement()', 500);
+        t = setTimeout('insertElement()', 2000);
+      }
+
+      function removeElement()
+      {
+        var element = document.getElementById('element-to-remove');
+        elementId = element.id;
+        parentNode = element.parentNode;
+        parentNode.removeChild(element);
+      }
+
+      function insertElement()
+      {
+        var newElement = document.createElement('p');
+        newElement.setAttribute('id', elementId);
+        newElement.innerHTML = 'new element';
+        parentNode.appendChild(newElement);
+      }
+    </script>
+
+  </head>
+  <body>
+    <form>
+      <input id="buttonDelete" type="button" value="element will be removed in half a second"
+      onclick="timedRemove()"/>
+    </form>
+    <p id="element-to-remove">element</p>
+  </body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/errors.html b/WebDriverTests/imported/selenium/common/src/web/errors.html
new file mode 100644 (file)
index 0000000..78fb902
--- /dev/null
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <script type="text/javascript">
+      window.ERRORS = [];
+
+      window.onerror = function(e) {
+        window.ERRORS.push(e);
+      };
+    </script>
+  </head>
+  <body>
+    <input type="button" value="Throw!" onclick="throw Error('boom!');"/>
+  </body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/fixedFooterNoScroll.html b/WebDriverTests/imported/selenium/common/src/web/fixedFooterNoScroll.html
new file mode 100644 (file)
index 0000000..ca65d1f
--- /dev/null
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Fixed footer with no scrollbar</title>
+</head>
+<body>
+  <div style="width: 100%; min-height: 100%;">
+    <div style="position: absolute; bottom: 0px;">
+      <a id="link" href="xhtmlTest.html">Click me</a>
+    </div>
+  </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/fixedFooterNoScrollQuirksMode.html b/WebDriverTests/imported/selenium/common/src/web/fixedFooterNoScrollQuirksMode.html
new file mode 100644 (file)
index 0000000..2593bf3
--- /dev/null
@@ -0,0 +1,12 @@
+<html>
+<head>
+  <title>Fixed footer with no scrollbar</title>
+</head>
+<body>
+  <div style="width: 100%; min-height: 100%;">
+    <div style="position: absolute; bottom: 0px;">
+      <a id="link" href="xhtmlTest.html">Click me</a>
+    </div>
+  </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/formPage.html b/WebDriverTests/imported/selenium/common/src/web/formPage.html
new file mode 100644 (file)
index 0000000..45ae2b7
--- /dev/null
@@ -0,0 +1,175 @@
+<html>
+<head>
+    <title>We Leave From Here</title>
+
+    <script type="text/javascript">
+        function changePage() {
+            var newLocation = '/common/page/3';
+            window.location = newLocation;
+        }
+    </script>
+</head>
+<body>
+There should be a form here:
+
+<form method="get" action="resultPage.html" name="login">
+    <input type="email" id="email"/>
+    <input type="number" id="age"/>
+    <input type="submit" id="submitButton" value="Hello there"/>
+</form>
+
+<form method="get" action="resultPage.html" name="image">
+    <input type="image" id="imageButton" alt="click me!" src="images/button.gif"/>
+</form>
+
+<form method="get" action="resultPage.html" name="optional" style="display: block">
+    Here's a checkbox:
+    <input type="checkbox" id="checky" name="checky" value="furrfu"/>
+    <input type="checkbox" id="checkedchecky" name="checkedchecky" checked="checked" />
+    <input type="checkbox" id="disabledchecky" disabled="disabled" name="disabledchecky" />
+    <input type="checkbox" id="randomly_disabled_checky" disabled="somerandomstring" checked="checked" name="randomlydisabledchecky" />
+    <br/>
+    <select name="selectomatic">
+        <option selected="selected" id="non_multi_option" value="one">One</option>
+        <option value="two">Two</option>
+        <option value="four">Four</option>
+        <option value="still learning how to count, apparently">Still learning how to count, apparently</option>
+    </select>
+
+    <select name="multi" id="multi" multiple="multiple">
+        <option selected="selected" value="eggs">Eggs</option>
+        <option value="ham">Ham</option>
+        <option selected="selected" value="sausages">Sausages</option>
+        <option value="onion gravy">Onion gravy</option>
+    </select>
+
+    <select name="no-select" disabled="disabled">
+      <option value="foo">Foo</option>
+      <option value="bar">Bar</option>
+    </select>
+
+               <select name="select_empty_multiple" multiple>
+                       <option id="multi_1" value="select_1">select_1</option>
+                       <option id="multi_2" value="select_2">select_2</option>
+                       <option id="multi_3" value="select_3">select_3</option>
+                       <option id="multi_4" value="select_4">select_4</option>
+               </select>
+
+               <select name="multi_true" multiple="true">
+                       <option id="multi_true_1" value="select_1">select_1</option>
+                       <option id="multi_true_2" value="select_2">select_2</option>
+               </select>
+
+               <select name="multi_false" multiple="false">
+                       <option id="multi_false_1" value="select_1">select_1</option>
+                       <option id="multi_false_2" value="select_2">select_2</option>
+               </select>
+
+    <select id="invisi_select" style="opacity:0;">
+      <option selected value="apples">Apples</option>
+      <option value="oranges">Oranges</option>
+    </select>
+
+    <select name="select-default">
+        <option>One</option>
+        <option>Two</option>
+        <option>Four</option>
+        <option>Still learning how to count, apparently</option>
+    </select>
+
+    <select name="select_with_spaces">
+        <option>One</option>
+        <option>  Two  </option>
+        <option>
+          Four
+        </option>
+        <option>
+          Still learning   how to count,
+          apparently
+        </option>
+    </select>
+
+    <select>
+       <option id="blankOption"></option>
+       <option id="optionEmptyValueSet" value="">nothing</option>
+    </select>
+
+    <br/>
+
+    <input type="radio" id="cheese" name="snack" value="cheese"/>Cheese<br/>
+    <input type="radio" id="peas" name="snack" value="peas"/>Peas<br/>
+    <input type="radio" id="cheese_and_peas" name="snack" value="cheese and peas" checked/>Cheese and peas<br/>
+    <input type="radio" id="nothing" name="snack" value="nowt" disabled="disabled"/>Not a sausage<br/>
+    <input type="radio" id="randomly_disabled_nothing" name="snack" value="funny nowt" disabled="somedisablingstring"/>Not another sausage
+
+    <input type="hidden" name="hidden" value="fromage" />
+
+    <p id="cheeseLiker">I like cheese</p>
+    <input type="submit" value="Click!"/>
+    
+    <input type="radio" id="lone_disabled_selected_radio" name="not_a_snack" value="cumberland" checked="checked" disabled="disabled" />Cumberland sausage
+</form>
+
+<form method="get" action="resultPage.html" name="disable">
+    <input type="text" id="working"/>
+    <input type="text" id="notWorking" disabled="true"/>
+
+    <textarea id="notWorkingArea" disabled="disabled" cols="5" rows="5"></textarea>
+
+    <input type="text" id="inputWithText" value="Example text"/>
+    <textarea id="withText" rows="5" cols="5">Example text</textarea>
+    <textarea id="emptyTextArea" rows="5" cols="5"></textarea>
+</form>
+
+<form method="post" action="resultPage.html">
+    <select id="redirect" name="redirect" onchange="javascript:changePage();">
+        <option selected="selected" value="one">One</option>
+        <option id="changeme" value="two">Two</option>
+    </select>
+
+    <input id="no-type" />
+    <input type="file" id="upload" onchange="document.getElementById('fileResults').innerHTML = 'changed';" />
+    <span id="fileResults"></span>
+
+    <input type="submit" />
+</form>
+
+<form method="get" action="resultPage.html">
+  <input type="text" value="name" name="id-name1"/>
+  <input type="text" value="id"   id="id-name1"/>
+
+  <!-- Reverse the ordering -->
+  <input type="text" value="id"   id="id-name2"/>
+  <input type="text" value="name" name="id-name2"/>
+  <input name="readonly" readonly="readonly" />
+</form>
+
+<!-- form with nested children -->
+<form method="get" action="resultPage.html" id="nested_form">
+  <div>
+    <input type="text" value="name" name="x"/>
+  </div>
+  <input type="submit" />
+</form>  
+
+<!-- Form with disabled form elements -->
+<form method="get" action="xhtmlTest.html">
+  <p>
+    <input type="text" id="disabledTextElement1" disabled="foo" />
+    <input type="text" id="disabledTextElement2" disabled="" />
+    <input type="submit" id="disabledSubmitElement" disabled="qwerty" value="Submit" />
+  </p>
+</form>
+<!-- Empty div to test GetAttribute -->
+<div id="wallace" class="gromit"></div>
+
+<input type='button' id='killIframe' onclick='top.remove();' value="Kill containing iframe" />
+
+<form method="get" action="formPage.html">
+  <p>
+    <label for="checkbox-with-label" id="label-for-checkbox-with-label">Label</label><input type="checkbox" id="checkbox-with-label" />
+  </p>
+</form>
+<input id="vsearchGadget" name="SearchableText" type="text" size="18" value="" title="Hvad søger du?" accesskey="4" class="inputLabel" />
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/formSelectionPage.html b/WebDriverTests/imported/selenium/common/src/web/formSelectionPage.html
new file mode 100644 (file)
index 0000000..4890c08
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Testing Typing into body</title>
+    <script type="text/javascript">
+        function setMessage(message) {
+            document.getElementById('result').innerHTML = message;
+        }
+
+        function showSelected() {
+          var selectElement = document.getElementById('multi');
+          if (selectElement == null) {
+            appendMessage("null!");
+          }
+
+          var options_array = selectElement.getElementsByTagName('option');
+          var selected_cheese = "";
+          for (var i = 0; i < options_array.length; i++) {
+            if (options_array[i].selected) {
+              selected_cheese = selected_cheese + options_array[i].label + " ";
+            }
+          }
+          setMessage(selected_cheese);
+        }
+    </script>
+</head>
+
+<body>
+  <h1>Type Stuff</h1>
+
+  <div id="result">
+    &nbsp;
+  </div>
+
+  <form action="" id="on-form" name="multichoice">
+    <select name="multi" id="multi" multiple="multiple">
+        <option selected="selected" label="emmental">Emmental</option>
+        <option label="roquefort" >Roquefort</option>
+        <option label="parmigiano">Parmigiano</option>
+        <option label="cheddar">Cheddar</option>
+    </select>
+  </form>
+
+  <input type="button" name="showselected" onclick="showSelected()" value="Show selected"/>
+</body>
+
diff --git a/WebDriverTests/imported/selenium/common/src/web/form_handling_js_submit.html b/WebDriverTests/imported/selenium/common/src/web/form_handling_js_submit.html
new file mode 100644 (file)
index 0000000..3023143
--- /dev/null
@@ -0,0 +1,30 @@
+<!--
+  ~ Copyright 2012 Selenium committers
+  ~ Copyright 2012 Software Freedom Conservancy
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<!DOCTYPE html>
+<html>
+<head>
+    <title>Form with JS action</title>
+</head>
+<body>
+  <form id="theForm" method="get" action="javascript:alert('Tasty cheese');">
+      <input name="unused" type="submit">
+  </form>
+
+  <p id="result"></p>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/framePage3.html b/WebDriverTests/imported/selenium/common/src/web/framePage3.html
new file mode 100644 (file)
index 0000000..3e62e45
--- /dev/null
@@ -0,0 +1,7 @@
+<html>
+    <head>
+        <title>inner</title>
+    </head>
+    <body>
+    </body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/frameScrollChild.html b/WebDriverTests/imported/selenium/common/src/web/frameScrollChild.html
new file mode 100644 (file)
index 0000000..3eb3bf4
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Child frame</title>
+</head>
+<body>
+  <h1>This is a scrolling frame test</h1>
+  <div>
+    <table>
+      <tr height="50px">
+        <td>First row</td>
+      </tr>
+      <tr height="50px">
+        <td>Second row</td>
+      </tr>
+      <tr height="50px">
+        <td>Third row</td>
+      </tr>
+      <tr height="50px">
+        <td>Fourth row</td>
+      </tr>
+    </table>
+  </div>
+  <input type='checkbox' name='scroll_checkbox' />
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/frameScrollPage.html b/WebDriverTests/imported/selenium/common/src/web/frameScrollPage.html
new file mode 100644 (file)
index 0000000..b7fb8f2
--- /dev/null
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Welcome Page</title>
+</head>
+<body>
+  <div>
+    <iframe name="scrolling_child_frame" src="frameScrollParent.html" width="800" height="200"></iframe>
+  </div>
+  <div>
+    <iframe name="scrolling_frame" src="frameScrollChild.html" width="800" height="200" ></iframe>
+  </div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/frameScrollParent.html b/WebDriverTests/imported/selenium/common/src/web/frameScrollParent.html
new file mode 100644 (file)
index 0000000..8fccb6d
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Welcome Page</title>
+</head>
+<body>
+  <div>
+    <iframe name="scrolling_frame" src="frameScrollChild.html" width="600" height="500"></iframe>
+  </div>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/frameWithAnimals.html b/WebDriverTests/imported/selenium/common/src/web/frameWithAnimals.html
new file mode 100644 (file)
index 0000000..1e0dc87
--- /dev/null
@@ -0,0 +1,11 @@
+<html>
+<head>
+    <title>This page has iframes</title>
+</head>
+<body>
+<h1 id="iframe_page_heading">This is the heading</h1>
+
+<iframe src="animals" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" allowtransparency="true"
+        frameborder="0" height="600" scrolling="no" width="120" id="iframe1" name="iframe1-name" />
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/bug4876.html b/WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/bug4876.html
new file mode 100644 (file)
index 0000000..4ed597d
--- /dev/null
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Test issue 4876</title>
+</head>
+<body>
+<iframe id="iframe" src="bug4876_iframe.html"></iframe>
+</body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/bug4876_iframe.html b/WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/bug4876_iframe.html
new file mode 100644 (file)
index 0000000..57d47d8
--- /dev/null
@@ -0,0 +1,9 @@
+<html>
+       <head></head>
+       <body>
+           <form >
+                 <input type="text" id="inputText" />
+                 <input type="submit" id="submitButton" value="submit" onclick="window.location=window.location;" />
+               <form>
+       </body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/deletingFrame.html b/WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/deletingFrame.html
new file mode 100644 (file)
index 0000000..9c27e04
--- /dev/null
@@ -0,0 +1,29 @@
+<html>
+<head>
+    <title>Deleting frame: main page</title>
+</head>
+        <script type="text/javascript">
+            function remove() {
+                var iframe = document.getElementById("iframe1");
+                var myDiv = document.getElementById("myDiv");
+                myDiv.removeChild(iframe);
+            }
+            function addBack() {
+                var iframe = '<iframe src="deletingFrame_iframe2.html" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" allowtransparency="true" frameborder="0" height="200" scrolling="no" width="400" id="iframe1"></iframe>';
+                var myDiv2 = document.getElementById("myDiv2");
+                myDiv2.innerHTML = iframe;
+            }
+        </script>
+<body>
+
+<div id='myDiv'>
+<iframe src="deletingFrame_iframe.html" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" allowtransparency="true"
+        frameborder="1" height="200" scrolling="no" width="400" id="iframe1"></iframe>
+        
+        </div>
+<div id='myDiv2'>
+
+</div>
+<input type='button' id='addBackFrame' value='Add back frame' onclick='addBack();' />
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/deletingFrame_iframe.html b/WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/deletingFrame_iframe.html
new file mode 100644 (file)
index 0000000..e4b9723
--- /dev/null
@@ -0,0 +1,8 @@
+<html>
+<head>
+    <title>Deleting frame: iframe</title>
+</head>
+<body>
+<input type='button' id='killIframe' onclick='top.remove();' value="Kill containing iframe" />
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/deletingFrame_iframe2.html b/WebDriverTests/imported/selenium/common/src/web/frame_switching_tests/deletingFrame_iframe2.html
new file mode 100644 (file)
index 0000000..47764eb
--- /dev/null
@@ -0,0 +1,7 @@
+<html>
+<head>
+    <title>Deleting frame: iframe 2</title>
+</head>
+<body>
+<div id="success">Added back</div></body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/frameset.html b/WebDriverTests/imported/selenium/common/src/web/frameset.html
new file mode 100644 (file)
index 0000000..039c5f2
--- /dev/null
@@ -0,0 +1,14 @@
+<html>
+  <head>
+    <title>Unique title</title>
+  </head>
+<frameset cols="*, *, *, *, *, *, *">
+    <frame name="first" src="page/1"/>
+    <frame name="second" src="page/2?title=Fish"/>
+    <frame name="third" src="formPage.html"/>
+    <frame name="fourth" src="framesetPage2.html"/>
+    <frame id="fifth" src="xhtmlTest.html"/>
+    <frame id="sixth" src="iframes.html"/>
+    <frame id="sixth.iframe1" src="page/3"/>
+</frameset>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/framesetPage2.html b/WebDriverTests/imported/selenium/common/src/web/framesetPage2.html
new file mode 100644 (file)
index 0000000..4ea35ff
--- /dev/null
@@ -0,0 +1,7 @@
+<html>
+<head></head>
+<frameset cols="*, *">
+    <frame name="child1" src="page/10"/>
+    <frame name="child2" src="page/11"/>
+</frameset>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/framesetPage3.html b/WebDriverTests/imported/selenium/common/src/web/framesetPage3.html
new file mode 100644 (file)
index 0000000..42a9300
--- /dev/null
@@ -0,0 +1,4 @@
+<frameset>
+    <frame src="framePage3.html" id="first"></frame>
+    <frame src="framePage3.html" id="second"></frame>
+</frameset>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/galaxy/.gitignore b/WebDriverTests/imported/selenium/common/src/web/galaxy/.gitignore
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/WebDriverTests/imported/selenium/common/src/web/globalscope.html b/WebDriverTests/imported/selenium/common/src/web/globalscope.html
new file mode 100644 (file)
index 0000000..e4ca97a
--- /dev/null
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Global scope</title>
+    <script type="text/javascript">
+      window.w = "w";
+      window.h = "h";
+      window.__webdriver_w = "__webdriver_w";
+      window.__webdriver_h = "__webdriver_h";
+    </script>
+  </head>
+  <body>
+    <div style="position: absolute; left: 10px; top: 10px; height: 10px; width: 10px; background-color: blue;" id="toclick"></div>
+  </body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/hidden.html b/WebDriverTests/imported/selenium/common/src/web/hidden.html
new file mode 100644 (file)
index 0000000..0e8097e
--- /dev/null
@@ -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/WebDriverTests/imported/selenium/common/src/web/hidden_partially.html b/WebDriverTests/imported/selenium/common/src/web/hidden_partially.html
new file mode 100644 (file)
index 0000000..f0f9fe5
--- /dev/null
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title></title>
+    <script type="text/javascript">
+      var next = 0;
+
+      function addVisibleBox() {
+        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';
+        box.style.visibility = 'visible'
+
+        window.setTimeout(function() {
+          document.body.appendChild(box);
+        }, 1000);
+      }
+
+      function addHiddenBox() {
+        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';
+        box.style.visibility = 'hidden';
+
+        window.setTimeout(function() {
+          document.body.appendChild(box);
+        }, 1000);
+      }
+    </script>
+  </head>
+  <body>
+    <input id="addVisible" type="button" value="Add a visible box!" onclick="addVisibleBox()"/>
+    <input id="addHidden" type="button" value="Add a hidden box!" onclick="addHiddenBox();" />
+  </body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/html5/blue.jpg b/WebDriverTests/imported/selenium/common/src/web/html5/blue.jpg
new file mode 100644 (file)
index 0000000..8ea27c4
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/html5/blue.jpg differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/html5/database.js b/WebDriverTests/imported/selenium/common/src/web/html5/database.js
new file mode 100644 (file)
index 0000000..c6333be
--- /dev/null
@@ -0,0 +1,84 @@
+var database={};
+database.db={};
+
+database.onError = function(tx, e) {
+  var log = document.createElement('div');
+  log.setAttribute('name','error');
+  log.setAttribute('style','background-color:red');
+  log.innerText = e.message;
+  document.getElementById('logs').appendChild(log);
+}
+
+database.onSuccess = function(tx, r) {
+  if (r.rows.length) {
+    var ol;
+    for (var i = 0; i < r.rows.length; i++) {
+      ol = document.createElement('ol');
+      ol.innerHTML = r.rows.item(i).ID + ": " + r.rows.item(i).docname + " (" + r.rows.item(i).created + ")";
+      document.getElementById('logs').appendChild(ol);
+    }
+
+  }
+}
+
+database.open=function(){
+  database.db=openDatabase('HTML5', '1.0', 'Offline document storage', 100*1024);
+}
+
+database.create=function(){
+  database.db.transaction(function(tx) {
+    tx.executeSql("CREATE TABLE IF NOT EXISTS docs(ID INTEGER PRIMARY KEY ASC, docname TEXT, created TIMESTAMP DEFAULT CURRENT_TIMESTAMP)",
+      [],
+      database.onSuccess,
+      database.onError);
+  });}
+
+database.add = function(message) {
+  database.db.transaction(function(tx){
+    tx.executeSql("INSERT INTO docs(docname) VALUES (?)",
+        [message], database.onSuccess, database.onError);
+    });
+}
+
+database.selectAll = function() {
+  database.db.transaction(function(tx) {
+    tx.executeSql("SELECT * FROM docs", [], database.onSuccess,
+        database.onError);
+ });
+}
+
+database.onDeleteAllSuccess = function(tx, r) {
+  var doc = document.documentElement;
+  var db_completed = document.createElement("div");
+  db_completed.setAttribute("id", "db_completed");
+  db_completed.innerText = "db operation completed";
+  doc.appendChild(db_completed);
+}
+
+database.deleteAll = function() {
+  database.db.transaction(function(tx) {
+    tx.executeSql("delete from docs", [], database.onDeleteAllSuccess,
+        database.onError);
+  });
+}
+
+var log = document.createElement('div');
+log.setAttribute('name','notice');
+log.setAttribute('style','background-color:yellow');
+log.innerText = typeof window.openDatabase == "function" ? "Web Database is supported." : "Web Database is not supported.";
+document.getElementById('logs').appendChild(log);
+
+try {
+  database.open();
+  database.create();
+  database.add('Doc 1');
+  database.add('Doc 2');
+  database.selectAll();
+  database.deleteAll();
+} catch(error) {
+  var log = document.createElement('div');
+  log.setAttribute('name','critical');
+  log.setAttribute('style','background-color:pink');
+  log.innerText =  error;
+  document.getElementById('logs').appendChild(log);
+}
diff --git a/WebDriverTests/imported/selenium/common/src/web/html5/geolocation.js b/WebDriverTests/imported/selenium/common/src/web/html5/geolocation.js
new file mode 100644 (file)
index 0000000..f07af14
--- /dev/null
@@ -0,0 +1,18 @@
+function success(position) {
+  var message = document.getElementById("status");
+  message.innerHTML ="<img src='http://maps.google.com/maps/api/staticmap?center=" + position.coords.latitude + "," + position.coords.longitude + "&size=300x200&maptype=roadmap&zoom=12&&markers=size:mid|color:red|" + position.coords.latitude + "," + position.coords.longitude + "&sensor=false' />";
+  message.innerHTML += "<p>Longitude: " + position.coords.longitude + "</p>";
+  message.innerHTML += "<p>Latitude: " + position.coords.latitude + "</p>";
+  message.innerHTML += "<p>Altitude: " + position.coords.altitude + "</p>";
+}
+
+function error(msg) {
+  var message = document.getElementById("status");
+  message.innerHTML = "Failed to get geolocation.";
+}
+
+if (navigator.geolocation) {
+  navigator.geolocation.getCurrentPosition(success, error);
+} else {
+  error('Geolocation is not supported.');
+}
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/html5/green.jpg b/WebDriverTests/imported/selenium/common/src/web/html5/green.jpg
new file mode 100644 (file)
index 0000000..6a0d3be
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/html5/green.jpg differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/html5/red.jpg b/WebDriverTests/imported/selenium/common/src/web/html5/red.jpg
new file mode 100644 (file)
index 0000000..f296e27
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/html5/red.jpg differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/html5/status.html b/WebDriverTests/imported/selenium/common/src/web/html5/status.html
new file mode 100644 (file)
index 0000000..394116a
--- /dev/null
@@ -0,0 +1 @@
+<html><head><title>Online</title></head><body></body></html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/html5/test.appcache b/WebDriverTests/imported/selenium/common/src/web/html5/test.appcache
new file mode 100644 (file)
index 0000000..3bc4e00
--- /dev/null
@@ -0,0 +1,11 @@
+CACHE MANIFEST
+
+CACHE:
+# Additional items to cache.
+yellow.jpg
+red.jpg
+blue.jpg
+green.jpg
+
+FALLBACK:
+status.html offline.html
diff --git a/WebDriverTests/imported/selenium/common/src/web/html5/yellow.jpg b/WebDriverTests/imported/selenium/common/src/web/html5/yellow.jpg
new file mode 100644 (file)
index 0000000..7c609b3
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/html5/yellow.jpg differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/html5Page.html b/WebDriverTests/imported/selenium/common/src/web/html5Page.html
new file mode 100644 (file)
index 0000000..355ddc3
--- /dev/null
@@ -0,0 +1,32 @@
+<html manifest="html5/test.appcache">
+<head>
+<title>HTML5</title>
+</head>
+<body>
+
+<h3>Geolocation Test</h3>
+<div id="status">Location unknown</div>
+<script language="javascript" type="text/javascript" src="html5/geolocation.js"></script>
+
+<h3>Web SQL Database Test</h3>
+<div id="logs"></div>
+<script language="javascript" type="text/javascript" src="html5/database.js"></script>
+
+<h3>Application Cache Test</h3>
+<div id="images">
+  <p>Current network status: <span id="state"></span></p>
+  <script>
+    var state = document.getElementById('state')
+    setInterval(function () {
+      state.className = navigator.onLine ? 'online' : 'offline';
+      state.innerHTML = navigator.onLine ? 'online' : 'offline';
+    }, 250);
+  </script>
+  <img id="red" src="html5/red.jpg">
+  <img id="blue" src="html5/blue.jpg">
+  <img id="green" src="html5/green.jpg">
+  <img id="yellow" src="html5/yellow.jpg">
+</div>
+
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/icon.gif b/WebDriverTests/imported/selenium/common/src/web/icon.gif
new file mode 100644 (file)
index 0000000..bb99461
Binary files /dev/null and b/WebDriverTests/imported/selenium/common/src/web/icon.gif differ
diff --git a/WebDriverTests/imported/selenium/common/src/web/idElements.html b/WebDriverTests/imported/selenium/common/src/web/idElements.html
new file mode 100644 (file)
index 0000000..47f0834
--- /dev/null
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<div id="with.dots">Element with a dot in the id</div>
diff --git a/WebDriverTests/imported/selenium/common/src/web/iframeAtBottom.html b/WebDriverTests/imported/selenium/common/src/web/iframeAtBottom.html
new file mode 100644 (file)
index 0000000..a686ba3
--- /dev/null
@@ -0,0 +1,15 @@
+<html>
+<head>
+    <title>This page has iframes</title>
+</head>
+<body>
+<h1 id="iframe_page_heading">This is the heading</h1>
+
+<div style="position: fixed; bottom: 0px; right: 0px; width: 150px; height: 150px;">
+  <iframe src="dragAndDropTest.html" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" allowtransparency="true" frameborder="1" height="100" scrolling="no" width="100" id="iframe1" name="iframe1-name" />
+</div>
+
+</body>
+</html>
+
+
diff --git a/WebDriverTests/imported/selenium/common/src/web/iframeWithAlert.html b/WebDriverTests/imported/selenium/common/src/web/iframeWithAlert.html
new file mode 100644 (file)
index 0000000..bc54ddd
--- /dev/null
@@ -0,0 +1 @@
+<a href="#" id="alertInFrame" onclick="alert('framed cheese');">click me</a>
diff --git a/WebDriverTests/imported/selenium/common/src/web/iframeWithIframe.html b/WebDriverTests/imported/selenium/common/src/web/iframeWithIframe.html
new file mode 100644 (file)
index 0000000..b29c54f
--- /dev/null
@@ -0,0 +1 @@
+<iframe src="iframeWithAlert.html" name="iframeWithAlert"></iframe>
diff --git a/WebDriverTests/imported/selenium/common/src/web/iframes.html b/WebDriverTests/imported/selenium/common/src/web/iframes.html
new file mode 100644 (file)
index 0000000..e00b482
--- /dev/null
@@ -0,0 +1,11 @@
+<html>
+<head>
+    <title>This page has iframes</title>
+</head>
+<body>
+<h1 id="iframe_page_heading">This is the heading</h1>
+
+<iframe src="formPage.html" marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" allowtransparency="true"
+        frameborder="0" height="600" scrolling="no" width="120" id="iframe1" name="iframe1-name" />
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/injectableContent.html b/WebDriverTests/imported/selenium/common/src/web/injectableContent.html
new file mode 100644 (file)
index 0000000..7248dcc
--- /dev/null
@@ -0,0 +1,22 @@
+<html>
+  <head>
+    <title>random numbers</title>
+    <script>
+      function display() {
+        document.getElementById('numbers').textContent = numbers.join(' ');
+      }
+    </script>
+  </head>
+  <body onload="display()">
+    <p>Some random numbers between 0 and 100:</p>
+
+    <!-- Placeholder for the list of random numbers -->
+    <p id="numbers"></p>
+    <script>
+      numbers = [];
+      while (numbers.length < 100) {
+        numbers.push(Math.round(Math.random() * 100));
+      }
+    </script>
+  </body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/inputs.html b/WebDriverTests/imported/selenium/common/src/web/inputs.html
new file mode 100644 (file)
index 0000000..b60854f
--- /dev/null
@@ -0,0 +1,42 @@
+<html>
+<head>
+    <title>inputs</title>
+</head>
+<body>
+<h1>Testing Inputs</h1>
+
+<form action="#">
+  <input name="no_type" value="input with no type" /><br/>
+  <br/>
+  <input name="number_input" type="number" value="42" /><br/>
+  <input name="range_input" type="range" value="42" /><br/>
+  <br/>
+  <input name="email_input" type="email" value="admin@localhost" /><br/>
+  <input name="password_input" type="password" value="qwerty" /><br/>
+  <input name="search_input" type="search" value="search" /><br/>
+  <input name="tel_input" type="tel" value="911" /><br/>
+  <input name="text_input" type="text" value="text input" /><br/>
+  <input name="url_input" type="url" value="http://seleniumhq.org/" /><br/>
+  <br/>
+  <input name="checkbox_input" type="checkbox" value="Checkbox" checked /><br/>
+  <input name="radio_input" type="radio" value="radio1" checked /><br/>
+  <input name="radio_input" type="radio" value="radio2" /><br/>
+  <br/>
+  <input name="color_input" type="color" value="#00ffff" /><br/>
+  <br/>
+  <input name="date_input" type="date" value="2017-11-22" /><br/>
+  <input name="datetime_input" type="datetime" value="2017-11-22T11:22" /><br/>
+  <input name="datetime_local_input" type="datetime-local" value="2017-11-22T11:22" /><br/>
+  <input name="time_input" type="time" value="11:22" /><br/>
+  <input name="month_input" type="month" value="2017-11" /><br/>
+  <input name="week_input" type="week" value="2017-W47" /><br/>
+  <br/>
+  <input name="button_input" type="button" value="button" />&nbsp;
+  <input name="image_input" type="image" value="image" src="icon.gif" />&nbsp;
+  <input name="reset_input" type="reset" value="reset" />&nbsp;
+  <input name="submit_input" type="submit" value="submit" />&nbsp;
+
+  <input name="hidden_input" type="hidden" value="hidden" />
+</form>
+</body>
+</html>
diff --git a/WebDriverTests/imported/selenium/common/src/web/javascriptEnhancedForm.html b/WebDriverTests/imported/selenium/common/src/web/javascriptEnhancedForm.html
new file mode 100644 (file)
index 0000000..cbcff43
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<html>
+    <head>
+        <title>Javascript Enhanced Page</title>
+    </head>
+    <body>
+        <form id="form1" action="javascriptEnhancedForm.html" method="post">
+            <p>
+                <label id="labelforusername" for="username">
+                    Username: <input id="username" type="text" name="username" />
+                    <script type="text/javascript">
+                        document.getElementById('username').value = 'Michael';
+                    </script>
+                </label>
+            </p>
+            <p>
+                <label for="password">
+                    Password: <input id="password" type="password" name="password" />
+                    <script type="text/javascript">
+                        var z = document.getElementById('password'); setTimeout('try{z.focus();z.select();} catch(e) {}', 1);
+                    </script>
+                </label>
+            </p>
+            <p>
+                <input type="submit" value="Submit" />
+            </p>
+        </form>
+    </body>
+</html>
\ No newline at end of file
diff --git a/WebDriverTests/imported/selenium/common/src/web/javascriptPage.html b/WebDriverTests/imported/selenium/common/src/web/javascriptPage.html
new file mode 100644 (file)
index 0000000..fcac252
--- /dev/null
@@ -0,0 +1,285 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <title>Testing Javascript</title>
+    <script type="text/javascript">
+        var seen = {};
+
+        function updateContent(input) {
+            document.getElementById('resultParagraph').innerHTML = input.value;
+        }
+
+        function displayMessage(message) {
+            document.getElementById('resultParagraph').innerHTML = message;
+        }
+
+        function appendMessage(message) {
+            document.getElementById('resultParagraph').innerHTML += message + " ";
+        }
+
+        function register(message) {
+          if (!seen[message]) {
+            appendMessage(message);
+            seen[message] = true;
+          }
+        }
+
+        function delayedShowHide(delay, show) {
+          var blackBox = document.getElementById('clickToHide');
+          window.setTimeout(function() {
+            blackBox.style.display = show ? '' : 'none';
+          }, delay);
+        }
+    </script>
+    <script type="text/javascript">
+        var startList = function() {
+            // Ugh. Let's hope no-one is faking their user agent when running the tests
+            if (navigator.userAgent.indexOf("MSIE") != -1) {
+                var navRoot = document.getElementById("nav");
+                for (var i = 0; i < navRoot.childNodes.length; i++) {
+                    var node = navRoot.childNodes[i];
+                    if (node.nodeName == "LI") {
+                        node.onmouseover = function() {
+                            this.className += " over";
+                        };
+                        node.onmouseout = function() {
+                            this.className = this.className.replace(" over", "");
+                        };
+                    }
+                }
+            }
+        };
+        window.onload=startList;
+    </script>
+    <style type="text/css">
+        #nav {
+            padding: 0; margin: 0; list-style: none;
+        }
+        #nav li {
+            float: left; position: relative; width: 10em;
+        }
+        #nav li ul {
+            display: none; position: absolute; top: 1em; left: 0;
+        }
+        #nav li > ul { top: auto; left: auto; }
+        #nav li:hover ul, #nav li.over ul{ display: block; background: white; }
+    </style>
+</head>
+<body>
+<h1>Type Stuff</h1>
+
+<div>
+    <ul id="nav">
+        <li id="menu1">Menu 1
+            <ul>
+                <li id="item1" onclick="displayMessage('item 1');">Item 1</li>
+                <li>Item 2</li>
+            </ul>
+        </li>
+    </ul>
+</div>
+
+<div id="resultContainer" height="30">&nbsp;
+  <div id="result" style="width:300;height:60">
+    <p id="resultParagraph">&nbsp;</p>
+  </div>
+
+</div>
+                                                                                         
+<div id="formageddon">
+    <form action="#">
+        Key Up: <input type="text" id="keyUp" onkeyup="javascript:updateContent(this)"/><br/>
+        Key Down: <input type="text" id="keyDown" onkeydown="javascript:updateContent(this)"/><br/>
+        Key Press: <input type="text" id="keyPress" onkeypress="javascript:updateContent(this)"/><br/>
+        Change: <input type="text" id="change" onkeypress="javascript:displayMessage('change')"/><br/>
+        <textarea id="keyDownArea" onkeydown="javascript:updateContent(this)" rows="2" cols="15"></textarea>
+        <textarea id="keyPressArea" onkeypress="javascript:updateContent(this)" rows="2" cols="15"></textarea>
+        <textarea id="keyUpArea" onkeyup="javascript:updateContent(this)" rows="2" cols="15"></textarea>
+        <select id="selector" onchange="javascript:updateContent(this)">
+            <option value="foo">Foo</option>
+            <option value="bar">Bar</option>
+        </select>
+        <select id="selector2" onclick="javascript:updateContent(this)">
+            <option value="foo">Foo</option>
+            <option value="bar">Bar</option>
+        </select>
+        <input type="checkbox" id="checkbox" value="checkbox thing" onchange="javascript:updateContent(this)"/>
+        <input id="clickField" type="text" onclick="document.getElementById('clickField').value='Clicked';" value="Hello"/>
+        <input id="doubleClickField" type="text" onclick="document.getElementById('doubleClickField').value='Clicked';" ondblclick="document.getElementById('doubleClickField').value='DoubleClicked';" oncontextmenu="document.getElementById('doubleClickField').value='ContextClicked'; return false;" value="DoubleHello"/>
+        <input id="clearMe" value="Something" onchange="displayMessage('Cleared')"/>
+    </form>
+</div>
+
+<div>
+    <p><a href="#" onclick="javascript:document.title='Changed'">Change the page title!</a></p>
+
+    <p><a onclick="javascript:document.title='Changed'" id="nohref">No href</a></p>
+
+    <p><a id="updatediv" href="#" onclick="javascript:document.getElementById('dynamo').innerHTML = 'Fish and chips!';">Update a
+        div</a></p>
+</div>
+
+<div id="dynamo">What's for dinner?</div>
+
+<div id="mousedown" onmousedown="javascript:displayMessage('mouse down');">
+    <p>Click for the mouse down event</p>
+    <span><p id="child">Here's some text</p></span>
+</div>
+
+<div id="mouseup" onmouseup="javascript:displayMessage('mouse up');">
+    <p>Click for the mouse up event</p>
+</div>
+
+<div id="mouseclick" onclick="javascript:displayMessage('mouse click');">
+    <p>Click for the mouse click event</p>
+</div>
+
+<div id="error" onclick="document.getElementById('doesnotexist').innerHTML = 'cheese';">
+    Clicking this causes a JS exception in the click handler
+</div>
+
+<div>
+  <form action="resultPage.html" id="on-form">
+    <input id="theworks"
+           onfocus="appendMessage('focus')"
+           onkeydown="appendMessage('keydown')"
+           onkeypress="appendMessage('keypress')"
+           onkeyup="appendMessage('keyup')"
+           onblur="appendMessage('blur')"
+           onchange="appendMessage('change')"
+           />
+
+    <input id="changeable" name="changeable" onfocus="appendMessage('focus')" onchange="appendMessage('change')" onblur="appendMessage('blur')"/>
+           
+    <button type="button" id="plainButton" 
+               onfocus="appendMessage('focus')"
+               onkeydown="appendMessage('keydown')"
+               onkeypress="appendMessage('keypress')"
+               onkeyup="appendMessage('keyup')"
+               onblur="appendMessage('blur')"
+               onclick="appendMessage('click')"
+               onmousedown="appendMessage('mousedown ')" 
+               onmouseup="appendMessage('mouseup ')"
+            onmouseover="register('mouseover ')"
+            onmousemove="register('mousemove ')"
+    >
+        <b>Go somewhere</b>
+    </button>
+    <button type="submit" id="submittingButton"><emph>submit</emph></button>
+    <button type="button" id="jsSubmitButton" onclick="javascript:document.getElementById('on-form').submit();">Submitomatic</button>
+
+    <button type="button" id="switchFocus" onclick="document.getElementById('theworks').focus();">Switch focus</button>
+    <button type="button" onclick="var element = document.getElementById('switchFocus'); var clickEvent = document.createEvent('MouseEvents'); clickEvent.initMouseEvent('click', true, true, null, 0, 0, 0, 0, 0,false, false, false, false, 0, element);element.dispatchEvent(clickEvent);">Do magic</button><br/>
+    <label id="labelForCheckbox" for="labeledCheckbox" onclick="appendMessage('labelclick')">Toggle checkbox</label><input type="checkbox" id="labeledCheckbox" onclick="appendMessage('chboxclick')"/>
+  </form>
+  
+  <form action="javascriptPage.html" id="submitListeningForm" onsubmit="appendMessage('form-onsubmit '); return false;">
+    <p>
+      <input id="submitListeningForm-text" type="text" onsubmit="appendMessage('text-onsubmit ')" onclick="appendMessage('text-onclick ');" />
+      <input id="submitListeningForm-submit" type="submit" onsubmit="appendMessage('submit-onsubmit ')" onclick="appendMessage('submit-onclick ');" />
+    </p>
+  </form>
+</div>
+
+<p id="suppressedParagraph" style="display: none">A paragraph suppressed using CSS display=none</p>
+
+<div>
+    <p id="displayed">Displayed</p>
+
+    <form action="#"><input type="hidden" name="hidden" /> </form>
+
+    <p id="none" style="display: none;">Display set to none</p>
+
+    <p id="hidden" style="visibility: hidden;">Hidden</p>
+
+    <div id="hiddenparent" style="height: 2em; display: none;">
+      <div id="hiddenchild">
+        <a href="#" id="hiddenlink">ok</a>
+      </div>
+    </div>
+    
+    <div style="visibility: hidden;">
+      <span>
+        <input id="unclickable" />
+        <input type="checkbox" id="untogglable" checked="checked" />Check box you can't see
+      </span>
+    </div>
+
+    <p id="outer" style="visibility: hidden">A <b id="visibleSubElement" style="visibility: visible">sub-element that is explicitly visible</b> using CSS visibility=visible</p>
+</div>
+
+<div>
+    <form>
+        <input type="text" id="keyReporter" size="80"
+               onkeyup="appendMessage('up: ' + event.keyCode)"
+               onkeypress="appendMessage('press: ' + event.keyCode)"
+               onkeydown="displayMessage(''); appendMessage('down: ' + event.keyCode)" />
+        <input name="suppress" onkeydown="if (event.preventDefault) event.preventDefault(); event.returnValue = false; return false;" onkeypress="appendMessage('press');"/>
+    </form>
+</div>
+
+<!-- Used for testing styles -->
+<div style="background-color: green;" id="green-parent">
+  <p id="style1">This should be greenish</p>
+    <ul>
+      <li id="green-item">So should this</li>
+      <li id="red-item" style="background-color: red;">But this is red</li>
+    </ul>
+</div>
+
+<a href="#" id="close" onclick="window.close();">Close window</a>
+
+<div id="delete" onclick="var d = document.getElementById('deleted'); this.removeChild(d);">
+    <p id="deleted">I should be deleted when you click my containing div</p>
+    <p>Whereas, I should not</p>
+</div>
+
+<div>
+    <span id="hideMe" onclick="this.style.display = 'none';">Click to hide me.</span>
+</div>
+
+<div id="hideOnBlur" tabindex="0"
+     style="width: 100px; height: 100px; border: 1px solid red"
+     onblur="appendMessage('blur'); this.style.display = 'none';">
+  <div id="hideOnBlurChild"
+       style="width: 30px; height: 30px; border: 1px solid blue">
+    x
+  </div>
+  Focusable. Will hide when focus is lost.
+</div>
+
+<div style="margin-top: 10px;">
+  Click actions delayed by 3000ms:
+  <div id="clickToShow" onclick="delayedShowHide(3000, true);"
+       style="float: left;width: 100px;height:100px;border: 1px solid black;">
+    Click to show black box
+  </div>
+  <div id="clickToHide" onclick="delayedShowHide(3000, false);"
+       style="float: left;width: 100px;height:100px;border: 1px solid black;
+              background-color: black; color: white; display: none;">
+    Click to hide black box
+  </div>
+  <div style="clear: both"></div>
+</div>
+
+<a id="new_window" onmouseup="window.open('closeable_window.html', 'close_me')" href="#">Click me to open a new window</a>
+
+<a id="throwing-mouseover" onmouseover="throw new Error()" href="#throwing-mouseover">Mouse over me will throw a JS error</a>
+
+<div id="parent">
+    <span id="movable" onmouseover="var p = document.getElementById('movable'); displayMessage('parent matches? ' + (p != event.relatedTarget));">
+        Click on me to show the related target
+    </span>
+</div>
+
+<div id="zero" style="width:0;height:0">
+  <div>
+    <img src="map.png">
+  </div>
+</div>
+
+</body>
+</html>
+
+
diff --git a/WebDriverTests/imported/selenium/common/src/web/jquery-1.3.2.js b/WebDriverTests/imported/selenium/common/src/web/jquery-1.3.2.js
new file mode 100644 (file)
index 0000000..462cde5
--- /dev/null
@@ -0,0 +1,4376 @@
+/*!
+ * jQuery JavaScript Library v1.3.2
+ * http://jquery.com/
+ *
+ * Copyright (c) 2009 John Resig
+ * Dual licensed under the MIT and GPL licenses.
+ * http://docs.jquery.com/License
+ *
+ * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
+ * Revision: 6246
+ */
+(function(){
+
+var 
+       // Will speed up references to window, and allows munging its name.
+       window = this,
+       // Will speed up references to undefined, and allows munging its name.
+       undefined,
+       // Map over jQuery in case of overwrite
+       _jQuery = window.jQuery,
+       // Map over the $ in case of overwrite
+       _$ = window.$,
+
+       jQuery = window.jQuery = window.$ = function( selector, context ) {
+               // The jQuery object is actually just the init constructor 'enhanced'
+               return new jQuery.fn.init( selector, context );
+       },
+
+       // A simple way to check for HTML strings or ID strings
+       // (both of which we optimize for)
+       quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
+       // Is it a simple selector
+       isSimple = /^.[^:#\[\.,]*$/;
+
+jQuery.fn = jQuery.prototype = {
+       init: function( selector, context ) {
+               // Make sure that a selection was provided
+               selector = selector || document;
+
+               // Handle $(DOMElement)
+               if ( selector.nodeType ) {
+                       this[0] = selector;
+                       this.length = 1;
+                       this.context = selector;
+                       return this;
+               }
+               // Handle HTML strings
+               if ( typeof selector === "string" ) {
+                       // Are we dealing with HTML string or an ID?
+                       var match = quickExpr.exec( selector );
+
+                       // Verify a match, and that no context was specified for #id
+                       if ( match && (match[1] || !context) ) {
+
+                               // HANDLE: $(html) -> $(array)
+                               if ( match[1] )
+                                       selector = jQuery.clean( [ match[1] ], context );
+
+                               // HANDLE: $("#id")
+                               else {
+                                       var elem = document.getElementById( match[3] );
+
+                                       // Handle the case where IE and Opera return items
+                                       // by name instead of ID
+                                       if ( elem && elem.id != match[3] )
+                                               return jQuery().find( selector );
+
+                                       // Otherwise, we inject the element directly into the jQuery object
+                                       var ret = jQuery( elem || [] );
+                                       ret.context = document;
+                                       ret.selector = selector;
+                                       return ret;
+                               }
+
+                       // HANDLE: $(expr, [context])
+                       // (which is just equivalent to: $(content).find(expr)
+                       } else
+                               return jQuery( context ).find( selector );
+
+               // HANDLE: $(function)
+               // Shortcut for document ready
+               } else if ( jQuery.isFunction( selector ) )
+                       return jQuery( document ).ready( selector );
+
+               // Make sure that old selector state is passed along
+               if ( selector.selector && selector.context ) {
+                       this.selector = selector.selector;
+                       this.context = selector.context;
+               }
+
+               return this.setArray(jQuery.isArray( selector ) ?
+                       selector :
+                       jQuery.makeArray(selector));
+       },
+
+       // Start with an empty selector
+       selector: "",
+
+       // The current version of jQuery being used
+       jquery: "1.3.2",
+
+       // The number of elements contained in the matched element set
+       size: function() {
+               return this.length;
+       },
+
+       // Get the Nth element in the matched element set OR
+       // Get the whole matched element set as a clean array
+       get: function( num ) {
+               return num === undefined ?
+
+                       // Return a 'clean' array
+                       Array.prototype.slice.call( this ) :
+
+                       // Return just the object
+                       this[ num ];
+       },
+
+       // Take an array of elements and push it onto the stack
+       // (returning the new matched element set)
+       pushStack: function( elems, name, selector ) {
+               // Build a new jQuery matched element set
+               var ret = jQuery( elems );
+
+               // Add the old object onto the stack (as a reference)
+               ret.prevObject = this;
+
+               ret.context = this.context;
+
+               if ( name === "find" )
+                       ret.selector = this.selector + (this.selector ? " " : "") + selector;
+               else if ( name )
+                       ret.selector = this.selector + "." + name + "(" + selector + ")";
+
+               // Return the newly-formed element set
+               return ret;
+       },
+
+       // Force the current matched set of elements to become
+       // the specified array of elements (destroying the stack in the process)
+       // You should use pushStack() in order to do this, but maintain the stack
+       setArray: function( elems ) {
+               // Resetting the length to 0, then using the native Array push
+               // is a super-fast way to populate an object with array-like properties
+               this.length = 0;
+               Array.prototype.push.apply( this, elems );
+
+               return this;
+       },
+
+       // Execute a callback for every element in the matched set.
+       // (You can seed the arguments with an array of args, but this is
+       // only used internally.)
+       each: function( callback, args ) {
+               return jQuery.each( this, callback, args );
+       },
+
+       // Determine the position of an element within
+       // the matched set of elements
+       index: function( elem ) {
+               // Locate the position of the desired element
+               return jQuery.inArray(
+                       // If it receives a jQuery object, the first element is used
+                       elem && elem.jquery ? elem[0] : elem
+               , this );
+       },
+
+       attr: function( name, value, type ) {
+               var options = name;
+
+               // Look for the case where we're accessing a style value
+               if ( typeof name === "string" )
+                       if ( value === undefined )
+                               return this[0] && jQuery[ type || "attr" ]( this[0], name );
+
+                       else {
+                               options = {};
+                               options[ name ] = value;
+                       }
+
+               // Check to see if we're setting style values
+               return this.each(function(i){
+                       // Set all the styles
+                       for ( name in options )
+                               jQuery.attr(
+                                       type ?
+                                               this.style :
+                                               this,
+                                       name, jQuery.prop( this, options[ name ], type, i, name )
+                               );
+               });
+       },
+
+       css: function( key, value ) {
+               // ignore negative width and height values
+               if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
+                       value = undefined;
+               return this.attr( key, value, "curCSS" );
+       },
+
+       text: function( text ) {
+               if ( typeof text !== "object" && text != null )
+                       return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+
+               var ret = "";
+
+               jQuery.each( text || this, function(){
+                       jQuery.each( this.childNodes, function(){
+                               if ( this.nodeType != 8 )
+                                       ret += this.nodeType != 1 ?
+                                               this.nodeValue :
+                                               jQuery.fn.text( [ this ] );
+                       });
+               });
+
+               return ret;
+       },
+
+       wrapAll: function( html ) {
+               if ( this[0] ) {
+                       // The elements to wrap the target around
+                       var wrap = jQuery( html, this[0].ownerDocument ).clone();
+
+                       if ( this[0].parentNode )
+                               wrap.insertBefore( this[0] );
+
+                       wrap.map(function(){
+                               var elem = this;
+
+                               while ( elem.firstChild )
+                                       elem = elem.firstChild;
+
+                               return elem;
+                       }).append(this);
+               }
+
+               return this;
+       },
+
+       wrapInner: function( html ) {
+               return this.each(function(){
+                       jQuery( this ).contents().wrapAll( html );
+               });
+       },
+
+       wrap: function( html ) {
+               return this.each(function(){
+                       jQuery( this ).wrapAll( html );
+               });
+       },
+
+       append: function() {
+               return this.domManip(arguments, true, function(elem){
+                       if (this.nodeType == 1)
+                               this.appendChild( elem );
+               });
+       },
+
+       prepend: function() {
+               return this.domManip(arguments, true, function(elem){
+                       if (this.nodeType == 1)
+                               this.insertBefore( elem, this.firstChild );
+               });
+       },
+
+       before: function() {
+               return this.domManip(arguments, false, function(elem){
+                       this.parentNode.insertBefore( elem, this );
+               });
+       },
+
+       after: function() {
+               return this.domManip(arguments, false, function(elem){
+                       this.parentNode.insertBefore( elem, this.nextSibling );
+               });
+       },
+
+       end: function() {
+               return this.prevObject || jQuery( [] );
+       },
+
+       // For internal use only.
+       // Behaves like an Array's method, not like a jQuery method.
+       push: [].push,
+       sort: [].sort,
+       splice: [].splice,
+
+       find: function( selector ) {
+               if ( this.length === 1 ) {
+                       var ret = this.pushStack( [], "find", selector );
+                       ret.length = 0;
+                       jQuery.find( selector, this[0], ret );
+                       return ret;
+               } else {
+                       return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){
+                               return jQuery.find( selector, elem );
+                       })), "find", selector );
+               }
+       },
+
+       clone: function( events ) {
+               // Do the clone
+               var ret = this.map(function(){
+                       if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
+                               // IE copies events bound via attachEvent when
+                               // using cloneNode. Calling detachEvent on the
+                               // clone will also remove the events from the orignal
+                               // In order to get around this, we use innerHTML.
+                               // Unfortunately, this means some modifications to
+                               // attributes in IE that are actually only stored
+                               // as properties will not be copied (such as the
+                               // the name attribute on an input).
+                               var html = this.outerHTML;
+                               if ( !html ) {
+                                       var div = this.ownerDocument.createElement("div");
+                                       div.appendChild( this.cloneNode(true) );
+                                       html = div.innerHTML;
+                               }
+
+                               return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
+                       } else
+                               return this.cloneNode(true);
+               });
+
+               // Copy the events from the original to the clone
+               if ( events === true ) {
+                       var orig = this.find("*").andSelf(), i = 0;
+
+                       ret.find("*").andSelf().each(function(){
+                               if ( this.nodeName !== orig[i].nodeName )
+                                       return;
+
+                               var events = jQuery.data( orig[i], "events" );
+
+                               for ( var type in events ) {
+                                       for ( var handler in events[ type ] ) {
+                                               jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
+                                       }
+                               }
+
+                               i++;
+                       });
+               }
+
+               // Return the cloned set
+               return ret;
+       },
+
+       filter: function( selector ) {
+               return this.pushStack(
+                       jQuery.isFunction( selector ) &&
+                       jQuery.grep(this, function(elem, i){
+                               return selector.call( elem, i );
+                       }) ||
+
+                       jQuery.multiFilter( selector, jQuery.grep(this, function(elem){
+                               return elem.nodeType === 1;
+                       }) ), "filter", selector );
+       },
+
+       closest: function( selector ) {
+               var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
+                       closer = 0;
+
+               return this.map(function(){
+                       var cur = this;
+                       while ( cur && cur.ownerDocument ) {
+                               if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {
+                                       jQuery.data(cur, "closest", closer);
+                                       return cur;
+                               }
+                               cur = cur.parentNode;
+                               closer++;
+                       }
+               });
+       },
+
+       not: function( selector ) {
+               if ( typeof selector === "string" )
+                       // test special case where just one selector is passed in
+                       if ( isSimple.test( selector ) )
+                               return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );
+                       else
+                               selector = jQuery.multiFilter( selector, this );
+
+               var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
+               return this.filter(function() {
+                       return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
+               });
+       },
+
+       add: function( selector ) {
+               return this.pushStack( jQuery.unique( jQuery.merge(
+                       this.get(),
+                       typeof selector === "string" ?
+                               jQuery( selector ) :
+                               jQuery.makeArray( selector )
+               )));
+       },
+
+       is: function( selector ) {
+               return !!selector && jQuery.multiFilter( selector, this ).length > 0;
+       },
+
+       hasClass: function( selector ) {
+               return !!selector && this.is( "." + selector );
+       },
+
+       val: function( value ) {
+               if ( value === undefined ) {                    
+                       var elem = this[0];
+
+                       if ( elem ) {
+                               if( jQuery.nodeName( elem, 'option' ) )
+                                       return (elem.attributes.value || {}).specified ? elem.value : elem.text;
+                               
+                               // We need to handle select boxes special
+                               if ( jQuery.nodeName( elem, "select" ) ) {
+                                       var index = elem.selectedIndex,
+                                               values = [],
+                                               options = elem.options,
+                                               one = elem.type == "select-one";
+
+                                       // Nothing was selected
+                                       if ( index < 0 )
+                                               return null;
+
+                                       // Loop through all the selected options
+                                       for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+                                               var option = options[ i ];
+
+                                               if ( option.selected ) {
+                                                       // Get the specifc value for the option
+                                                       value = jQuery(option).val();
+
+                                                       // We don't need an array for one selects
+                                                       if ( one )
+                                                               return value;
+
+                                                       // Multi-Selects return an array
+                                                       values.push( value );
+                                               }
+                                       }
+
+                                       return values;                          
+                               }
+
+                               // Everything else, we just grab the value
+                               return (elem.value || "").replace(/\r/g, "");
+
+                       }
+
+                       return undefined;
+               }
+
+               if ( typeof value === "number" )
+                       value += '';
+
+               return this.each(function(){
+                       if ( this.nodeType != 1 )
+                               return;
+
+                       if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )
+                               this.checked = (jQuery.inArray(this.value, value) >= 0 ||
+                                       jQuery.inArray(this.name, value) >= 0);
+
+                       else if ( jQuery.nodeName( this, "select" ) ) {
+                               var values = jQuery.makeArray(value);
+
+                               jQuery( "option", this ).each(function(){
+                                       this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
+                                               jQuery.inArray( this.text, values ) >= 0);
+                               });
+
+                               if ( !values.length )
+                                       this.selectedIndex = -1;
+
+                       } else
+                               this.value = value;
+               });
+       },
+
+       html: function( value ) {
+               return value === undefined ?
+                       (this[0] ?
+                               this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
+                               null) :
+                       this.empty().append( value );
+       },
+
+       replaceWith: function( value ) {
+               return this.after( value ).remove();
+       },
+
+       eq: function( i ) {
+               return this.slice( i, +i + 1 );
+       },
+
+       slice: function() {
+               return this.pushStack( Array.prototype.slice.apply( this, arguments ),
+                       "slice", Array.prototype.slice.call(arguments).join(",") );
+       },
+
+       map: function( callback ) {
+               return this.pushStack( jQuery.map(this, function(elem, i){
+                       return callback.call( elem, i, elem );
+               }));
+       },
+
+       andSelf: function() {
+               return this.add( this.prevObject );
+       },
+
+       domManip: function( args, table, callback ) {
+               if ( this[0] ) {
+                       var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
+                               scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
+                               first = fragment.firstChild;
+
+                       if ( first )
+                               for ( var i = 0, l = this.length; i < l; i++ )
+                                       callback.call( root(this[i], first), this.length > 1 || i > 0 ?
+                                                       fragment.cloneNode(true) : fragment );
+               
+                       if ( scripts )
+                               jQuery.each( scripts, evalScript );
+               }
+
+               return this;
+               
+               function root( elem, cur ) {
+                       return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?
+                               (elem.getElementsByTagName("tbody")[0] ||
+                               elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+                               elem;
+               }
+       }
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+function evalScript( i, elem ) {
+       if ( elem.src )
+               jQuery.ajax({
+                       url: elem.src,
+                       async: false,
+                       dataType: "script"
+               });
+
+       else
+               jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+
+       if ( elem.parentNode )
+               elem.parentNode.removeChild( elem );
+}
+
+function now(){
+       return +new Date;
+}
+
+jQuery.extend = jQuery.fn.extend = function() {
+       // copy reference to target object
+       var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
+
+       // Handle a deep copy situation
+       if ( typeof target === "boolean" ) {
+               deep = target;
+               target = arguments[1] || {};
+               // skip the boolean and the target
+               i = 2;
+       }
+
+       // Handle case when target is a string or something (possible in deep copy)
+       if ( typeof target !== "object" && !jQuery.isFunction(target) )
+               target = {};
+
+       // extend jQuery itself if only one argument is passed
+       if ( length == i ) {
+               target = this;
+               --i;
+       }
+
+       for ( ; i < length; i++ )
+               // Only deal with non-null/undefined values
+               if ( (options = arguments[ i ]) != null )
+                       // Extend the base object
+                       for ( var name in options ) {
+                               var src = target[ name ], copy = options[ name ];
+
+                               // Prevent never-ending loop
+                               if ( target === copy )
+                                       continue;
+
+                               // Recurse if we're merging object values
+                               if ( deep && copy && typeof copy === "object" && !copy.nodeType )
+                                       target[ name ] = jQuery.extend( deep, 
+                                               // Never move original objects, clone them
+                                               src || ( copy.length != null ? [ ] : { } )
+                                       , copy );
+
+                               // Don't bring in undefined values
+                               else if ( copy !== undefined )
+                                       target[ name ] = copy;
+
+                       }
+
+       // Return the modified object
+       return target;
+};
+
+// exclude the following css properties to add px
+var    exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
+       // cache defaultView
+       defaultView = document.defaultView || {},
+       toString = Object.prototype.toString;
+
+jQuery.extend({
+       noConflict: function( deep ) {
+               window.$ = _$;
+
+               if ( deep )
+                       window.jQuery = _jQuery;
+
+               return jQuery;
+       },
+
+       // See test/unit/core.js for details concerning isFunction.
+       // Since version 1.3, DOM methods and functions like alert
+       // aren't supported. They return false on IE (#2968).
+       isFunction: function( obj ) {
+               return toString.call(obj) === "[object Function]";
+       },
+
+       isArray: function( obj ) {
+               return toString.call(obj) === "[object Array]";
+       },
+
+       // check if an element is in a (or is an) XML document
+       isXMLDoc: function( elem ) {
+               return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
+                       !!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument );
+       },
+
+       // Evalulates a script in a global context
+       globalEval: function( data ) {
+               if ( data && /\S/.test(data) ) {
+                       // Inspired by code by Andrea Giammarchi
+                       // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+                       var head = document.getElementsByTagName("head")[0] || document.documentElement,
+                               script = document.createElement("script");
+
+                       script.type = "text/javascript";
+                       if ( jQuery.support.scriptEval )
+                               script.appendChild( document.createTextNode( data ) );
+                       else
+                               script.text = data;
+
+                       // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+                       // This arises when a base node is used (#2709).
+                       head.insertBefore( script, head.firstChild );
+                       head.removeChild( script );
+               }
+       },
+
+       nodeName: function( elem, name ) {
+               return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
+       },
+
+       // args is for internal usage only
+       each: function( object, callback, args ) {
+               var name, i = 0, length = object.length;
+
+               if ( args ) {
+                       if ( length === undefined ) {
+                               for ( name in object )
+                                       if ( callback.apply( object[ name ], args ) === false )
+                                               break;
+                       } else
+                               for ( ; i < length; )
+                                       if ( callback.apply( object[ i++ ], args ) === false )
+                                               break;
+
+               // A special, fast, case for the most common use of each
+               } else {
+                       if ( length === undefined ) {
+                               for ( name in object )
+                                       if ( callback.call( object[ name ], name, object[ name ] ) === false )
+                                               break;
+                       } else
+                               for ( var value = object[0];
+                                       i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
+               }
+
+               return object;
+       },
+
+       prop: function( elem, value, type, i, name ) {
+               // Handle executable functions
+               if ( jQuery.isFunction( value ) )
+                       value = value.call( elem, i );
+
+               // Handle passing in a number to a CSS property
+               return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
+                       value + "px" :
+                       value;
+       },
+
+       className: {
+               // internal only, use addClass("class")
+               add: function( elem, classNames ) {
+                       jQuery.each((classNames || "").split(/\s+/), function(i, className){
+                               if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
+                                       elem.className += (elem.className ? " " : "") + className;
+                       });
+               },
+
+               // internal only, use removeClass("class")
+               remove: function( elem, classNames ) {
+                       if (elem.nodeType == 1)
+                               elem.className = classNames !== undefined ?
+                                       jQuery.grep(elem.className.split(/\s+/), function(className){
+                                               return !jQuery.className.has( classNames, className );
+                                       }).join(" ") :
+                                       "";
+               },
+
+               // internal only, use hasClass("class")
+               has: function( elem, className ) {
+                       return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
+               }
+       },
+
+       // A method for quickly swapping in/out CSS properties to get correct calculations
+       swap: function( elem, options, callback ) {
+               var old = {};
+               // Remember the old values, and insert the new ones
+               for ( var name in options ) {
+                       old[ name ] = elem.style[ name ];
+                       elem.style[ name ] = options[ name ];
+               }
+
+               callback.call( elem );
+
+               // Revert the old values
+               for ( var name in options )
+                       elem.style[ name ] = old[ name ];
+       },
+
+       css: function( elem, name, force, extra ) {
+               if ( name == "width" || name == "height" ) {
+                       var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
+
+                       function getWH() {
+                               val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
+
+                               if ( extra === "border" )
+                                       return;
+
+                               jQuery.each( which, function() {
+                                       if ( !extra )
+                                               val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
+                                       if ( extra === "margin" )
+                                               val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
+                                       else
+                                               val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
+                               });
+                       }
+
+                       if ( elem.offsetWidth !== 0 )
+                               getWH();
+                       else
+                               jQuery.swap( elem, props, getWH );
+
+                       return Math.max(0, Math.round(val));
+               }
+
+               return jQuery.curCSS( elem, name, force );
+       },
+
+       curCSS: function( elem, name, force ) {
+               var ret, style = elem.style;
+
+               // We need to handle opacity special in IE
+&