mirror of
https://github.com/servo/servo.git
synced 2025-08-27 16:18:21 +01:00
Update web-platform-tests to 5582e4d2bfcfd1fa9f105406b143170ee2af7db1
This commit is contained in:
parent
9f892edd87
commit
78369e95cf
814 changed files with 57501 additions and 857 deletions
|
@ -1,38 +1,8 @@
|
|||
# W3C Browser Automation Specification Tests
|
||||
# WebDriver specification tests
|
||||
|
||||
This repository defines a set of conformance tests for the W3C web
|
||||
browser automation specification known as WebDriver. The purpose is
|
||||
for the different driver implementations to be tested to determine
|
||||
whether they meet the recognized standard.
|
||||
|
||||
## How to run the tests
|
||||
|
||||
1. Go to the WebDriver tests: `cd _WEBDRIVER_TEST_ROOT_`
|
||||
2. Run the tests: `python runtests.py`
|
||||
3. Run the test against a different config specified in webdriver.cfg:
|
||||
`WD_BROWSER=chrome python runtests.py`
|
||||
|
||||
To be run a specific test file you can just run `python test_file.py`
|
||||
|
||||
Similarly you can specify a different browser to run against if in webdriver.cfg:
|
||||
`WD_BROWSER=chrome python ecmascript/ecmascript_test.py`
|
||||
|
||||
Note: that you will need likely need to start the driver's server before running.
|
||||
|
||||
## Updating configuration
|
||||
|
||||
The _webdriver.cfg_ file holds any configuration that the tests might
|
||||
require. Change the value of browser to your needs. This will then
|
||||
be picked up by WebDriverBaseTest when tests are run.
|
||||
|
||||
Be sure not to commit your _webdriver.cfg_ changes when your create or modify tests.
|
||||
|
||||
## How to write tests
|
||||
|
||||
1. Create a test file per section from the specification.
|
||||
2. For each test there needs to be one or more corresponding HTML
|
||||
files that will be used for testing. HTML files are not to be
|
||||
reused between tests. HTML files and other support files
|
||||
should be stored in a folder named 'res'.
|
||||
3. Test name should explain the intention of the test e.g. `def
|
||||
test_navigate_and_return_title(self):`
|
||||
Herein lies a set of conformance tests
|
||||
for the W3C web browser automation specification
|
||||
known as [WebDriver](http://w3c.github.io/webdriver/webdriver-spec.html).
|
||||
The purpose of these tests is determine implementation compliance
|
||||
so that different driver implementations can determine
|
||||
whether they meet the recognised standard.
|
||||
|
|
|
@ -1,60 +0,0 @@
|
|||
import ConfigParser
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
from network import get_lan_ip
|
||||
|
||||
repo_root = os.path.abspath(os.path.join(__file__, "../.."))
|
||||
sys.path.insert(1, os.path.join(repo_root, "tools", "webdriver"))
|
||||
sys.path.insert(1, os.path.join(repo_root, "tools", "wptserve"))
|
||||
from wptserve import server
|
||||
from selenium import webdriver
|
||||
|
||||
|
||||
class WebDriverBaseTest(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.driver = create_driver()
|
||||
|
||||
cls.webserver = server.WebTestHttpd(host=get_lan_ip())
|
||||
cls.webserver.start()
|
||||
cls.webserver.where_is = cls.webserver.get_url
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
cls.webserver.stop()
|
||||
if cls.driver:
|
||||
cls.driver.quit()
|
||||
|
||||
|
||||
def create_driver():
|
||||
config = ConfigParser.ConfigParser()
|
||||
config.read('webdriver.cfg')
|
||||
section = os.environ.get("WD_BROWSER", 'firefox')
|
||||
if config.has_option(section, 'url'):
|
||||
url = config.get(section, "url")
|
||||
else:
|
||||
url = 'http://127.0.0.1:4444/wd/hub'
|
||||
capabilities = None
|
||||
if config.has_option(section, 'capabilities'):
|
||||
try:
|
||||
capabilities = json.loads(config.get(section, "capabilities"))
|
||||
except:
|
||||
pass
|
||||
mode = 'compatibility'
|
||||
if config.has_option(section, 'mode'):
|
||||
mode = config.get(section, 'mode')
|
||||
if section == 'firefox':
|
||||
driver = webdriver.Firefox()
|
||||
elif section == 'chrome':
|
||||
driver = webdriver.Chrome()
|
||||
elif section == 'edge':
|
||||
driver = webdriver.Remote()
|
||||
elif section == 'ie':
|
||||
driver = webdriver.Ie()
|
||||
elif section == 'selendroid':
|
||||
driver = webdriver.Android()
|
||||
|
||||
return driver
|
|
@ -1,64 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import random
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
repo_root = os.path.abspath(os.path.join(__file__, "../../.."))
|
||||
sys.path.insert(1, os.path.join(repo_root, "tools", "webdriver"))
|
||||
from webdriver import exceptions
|
||||
|
||||
|
||||
class OpenAndCloseWindowTest(base_test.WebDriverBaseTest):
|
||||
def setUp(self):
|
||||
self.driver.get(self.webserver.where_is("command_contexts/res/first-page.html"))
|
||||
|
||||
def tearDown(self):
|
||||
handles = self.driver.get_window_handles()
|
||||
|
||||
for i in range(len(handles) - 1):
|
||||
self.driver.switch_to_window(handles[i])
|
||||
self.driver.close()
|
||||
|
||||
self.driver.switch_to_window(self.driver.get_window_handles()[0])
|
||||
|
||||
def test_open_new_window(self):
|
||||
handles = self.driver.get_window_handles()
|
||||
self.driver.find_element_by_id("open_new_window").click()
|
||||
self.assertEquals(len(handles) + 1, len(self.driver.get_window_handles()))
|
||||
|
||||
def test_get_window_handles_returns_the_windows_that_have_been_opened(self):
|
||||
self.driver.find_element_by_id("open_new_window").click()
|
||||
handles = self.driver.get_window_handles()
|
||||
self.driver.switch_to_window(handles[0])
|
||||
url1 = self.driver.get_current_url()
|
||||
self.driver.switch_to_window(handles[1])
|
||||
url2 = self.driver.get_current_url()
|
||||
|
||||
if url1 == self.webserver.where_is("controlling_windows/res/other-page.html"):
|
||||
self.assertEquals(url2, self.webserver.where_is("controlling_windows/res/first-page.html"))
|
||||
elif url1 == self.webserver.where_is("controlling_windows/res/first-page.html"):
|
||||
self.assertEquals(url2, self.webserver.where_is("controlling_windows/res/other-page.html"))
|
||||
else:
|
||||
self.fail("The wrong set of URLs were returned")
|
||||
|
||||
def test_close_window(self):
|
||||
open_windows = len(self.driver.get_window_handles())
|
||||
|
||||
self.driver.find_element_by_id("open_new_window").click()
|
||||
self.assertEquals(1 + open_windows, len(self.driver.get_window_handles()))
|
||||
|
||||
self.driver.close()
|
||||
self.assertEquals(open_windows, len(self.driver.get_window_handles()))
|
||||
|
||||
def test_command_sent_to_closed_window_returns_no_such_window_exception(self):
|
||||
self.driver.find_element_by_id("open_new_window").click()
|
||||
self.driver.close()
|
||||
|
||||
with self.assertRaises(exceptions.NoSuchWindowException):
|
||||
self.driver.get_window_handle()
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -1,11 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>First Page</title>
|
||||
</head>
|
||||
<body>
|
||||
<a href="./other-page.html" target="_blank" id="open_new_window">Open new window</a>
|
||||
</body>
|
||||
</html>
|
|
@ -1,11 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Other Page</title>
|
||||
</head>
|
||||
<body>
|
||||
<a href="./other-page.html" target="_blank" id="open_new_window">Open new window</a>
|
||||
</body>
|
||||
</html>
|
|
@ -1,33 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import random
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
repo_root = os.path.abspath(os.path.join(__file__, "../../.."))
|
||||
sys.path.insert(1, os.path.join(repo_root, "tools", "webdriver"))
|
||||
from webdriver import exceptions
|
||||
|
||||
|
||||
class WindowHandleTest(base_test.WebDriverBaseTest):
|
||||
def setUp(self):
|
||||
self.driver.get(self.webserver.where_is("command_contexts/res/first-page.html"))
|
||||
|
||||
def test_window_handle_is_not_current(self):
|
||||
handle = self.driver.get_window_handle()
|
||||
self.assertNotEquals(handle, "current")
|
||||
|
||||
def test_window_handles_are_unique(self):
|
||||
number_of_windows = 20
|
||||
new_window_button = self.driver.find_element_by_id("open_new_window")
|
||||
for i in range(0, number_of_windows):
|
||||
new_window_button.click()
|
||||
|
||||
handles = self.driver.get_window_handles()
|
||||
if len(handles) > len(set(handles)):
|
||||
self.fail('At least one window handle was repeated')
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -1,35 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import random
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
repo_root = os.path.abspath(os.path.join(__file__, "../../.."))
|
||||
sys.path.insert(1, os.path.join(repo_root, "tools", "webdriver"))
|
||||
from webdriver import exceptions
|
||||
|
||||
class WindowSizeTest(base_test.WebDriverBaseTest):
|
||||
|
||||
def test_set_and_get_window_size(self):
|
||||
self.driver.get(self.webserver.where_is("command_contexts/res/first-page.html"))
|
||||
|
||||
initial_dimensions = self.driver.get_window_size()
|
||||
|
||||
new_dimensions = {
|
||||
"height": initial_dimensions["height"] - 100,
|
||||
"width": initial_dimensions["width"] - 100}
|
||||
|
||||
try:
|
||||
self.driver.set_window_size(new_dimensions["height"], new_dimensions["width"])
|
||||
|
||||
actual_dimensions = self.driver.get_window_size()
|
||||
|
||||
self.assertDictEqual(new_dimensions, actual_dimensions)
|
||||
except exceptions.UnsupportedOperationException:
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -1,57 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
from selenium.common import exceptions
|
||||
|
||||
|
||||
class CookieTest(base_test.WebDriverBaseTest):
|
||||
def setUp(self):
|
||||
self.driver.get(self.webserver.where_is("cookie/res/cookie_container.html"))
|
||||
|
||||
def test_can_create_a_well_formed_cookie( self ):
|
||||
self.driver.add_cookie({'name': 'foo', 'value': 'bar'})
|
||||
|
||||
def test_cookies_should_allow_secure_to_be_set( self ):
|
||||
name = 'foo'
|
||||
self.driver.add_cookie({'name': name,
|
||||
'value': 'bar',
|
||||
'path': '/',
|
||||
'secure': (True)})
|
||||
self.assertTrue(self.driver.get_cookie(name)[0]['secure'])
|
||||
|
||||
def test_secure_defaults_to_false( self ):
|
||||
name = 'foo'
|
||||
value = 'bar'
|
||||
|
||||
self.driver.add_cookie({ 'name': name,
|
||||
'value': value})
|
||||
|
||||
self.assertFalse(self.driver.get_cookie(name)[0]['secure'])
|
||||
|
||||
def test_should_throw_an_exception_when_semicolon_exists_in_the_cookie_attribute(self):
|
||||
invalid_name = 'foo;bar'
|
||||
try:
|
||||
self.driver.add_cookie({'name': invalid_name, 'value': 'foobar'})
|
||||
self.fail( 'should have thrown exceptions.' )
|
||||
|
||||
except exceptions.UnableToSetCookieException:
|
||||
pass
|
||||
except exceptions.InvalidCookieDomainException:
|
||||
pass
|
||||
|
||||
def test_should_throw_an_exception_the_name_is_null(self):
|
||||
try:
|
||||
self.driver.add_cookie({'name': None, 'value': 'foobar'})
|
||||
self.fail( 'should have thrown exceptions.' )
|
||||
|
||||
except exceptions.UnableToSetCookieException:
|
||||
pass
|
||||
except exceptions.InvalidCookieDomainException:
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>Cookie Container</title>
|
||||
<body>
|
||||
</body>
|
|
@ -1,17 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
|
||||
class EcmasScriptTest(base_test.WebDriverBaseTest):
|
||||
def test_that_ecmascript_returns_document_title(self):
|
||||
self.driver.get(self.webserver.where_is("ecmascript/res/ecmascript_test.html"))
|
||||
result = self.driver.execute_script("return document.title;");
|
||||
self.assertEquals("ecmascript test", result);
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -1,2 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<title>ecmascript test</title>
|
|
@ -1,60 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
class ElementLocationTest(base_test.WebDriverBaseTest):
|
||||
def test_find_element_by_name(self):
|
||||
self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
|
||||
e = self.driver.find_element_by_name("name")
|
||||
self.assertEquals("name", e.text)
|
||||
|
||||
def test_find_element_by_css_selector(self):
|
||||
self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
|
||||
e = self.driver.find_element_by_css_selector("#id")
|
||||
self.assertEquals("id", e.text)
|
||||
|
||||
def test_find_element_by_link_text(self):
|
||||
self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
|
||||
e = self.driver.find_element_by_link_text("link text")
|
||||
self.assertEquals("link text", e.text)
|
||||
|
||||
def test_find_element_by_partial_link_text(self):
|
||||
self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
|
||||
e = self.driver.find_element_by_partial_link_text("link tex")
|
||||
self.assertEquals("link text", e.text)
|
||||
|
||||
def test_find_element_by_xpath(self):
|
||||
self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
|
||||
e = self.driver.find_element_by_xpath("//*[@id='id']")
|
||||
self.assertEquals("id", e.text)
|
||||
|
||||
def test_find_elements_by_name(self):
|
||||
self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
|
||||
e = self.driver.find_elements_by_name("name")
|
||||
self.assertEquals("name", e[0].text)
|
||||
|
||||
def test_find_elements_by_css_selector(self):
|
||||
self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
|
||||
e = self.driver.find_elements_by_css_selector("#id")
|
||||
self.assertEquals("id", e[0].text)
|
||||
|
||||
def test_find_elements_by_link_text(self):
|
||||
self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
|
||||
e = self.driver.find_elements_by_link_text("link text")
|
||||
self.assertEquals("link text", e[0].text)
|
||||
|
||||
def test_find_elements_by_partial_link_text(self):
|
||||
self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
|
||||
e = self.driver.find_elements_by_partial_link_text("link tex")
|
||||
self.assertEquals("link text", e[0].text)
|
||||
|
||||
def test_find_elements_by_xpath(self):
|
||||
self.driver.get(self.webserver.where_is("element_location/res/elements.html"))
|
||||
e = self.driver.find_elements_by_xpath("//*[@id='id']")
|
||||
self.assertEquals("id", e[0].text)
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -1,10 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<title>Element location</title>
|
||||
|
||||
<body>
|
||||
<div id="id">id</div>
|
||||
<div id="name" name="name">name</div>
|
||||
<a id="link">link text</a>
|
||||
</body>
|
|
@ -1,107 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
|
||||
class GetElementAttributeTest(base_test.WebDriverBaseTest):
|
||||
def test_get_element_attribute(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-with-id-attribute.html"))
|
||||
el = self.driver.find_element_by_css_selector("div")
|
||||
self.assertEqual("myId", el.get_attribute("id"))
|
||||
|
||||
def test_style_attribute(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-with-style-attribute.html"))
|
||||
el = self.driver.find_element_by_css_selector("div")
|
||||
expected_style = """
|
||||
font-family: \"Gill Sans Extrabold\",Helvetica,sans-serif;
|
||||
line-height: 1.2; font-weight: bold;
|
||||
"""
|
||||
self.assertEqual(expected_style, el.get_attribute("style"))
|
||||
|
||||
def test_color_serialization_of_style_attribute(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-with-color-style-attribute.html"))
|
||||
el = self.driver.find_element_by_css_selector("div")
|
||||
self.assertEqual("color: rgba(255, 0, 0, 1.0);", el.get_attribute("style"))
|
||||
|
||||
def test_true_if_boolean_attribute_present(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/input-with-checked-attribute.html"))
|
||||
el = self.driver.find_element_by_css_selector("input")
|
||||
self.assertEqual("true", el.get_attribute("checked"))
|
||||
|
||||
def test_none_if_boolean_attribute_absent(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/input-without-checked-attribute.html"))
|
||||
el = self.driver.find_element_by_css_selector("input")
|
||||
self.assertIsNone(el.get_attribute("checked"))
|
||||
|
||||
def test_option_with_attribute_value(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/option-with-value-attribute.html"))
|
||||
el = self.driver.find_element_by_css_selector("option")
|
||||
self.assertEqual("value1", el.get_attribute("value"))
|
||||
|
||||
def test_option_without_value_attribute(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/option-without-value-attribute.html"))
|
||||
el = self.driver.find_element_by_css_selector("option")
|
||||
self.assertEqual("Value 1", el.get_attribute("value"))
|
||||
|
||||
def test_a_href_attribute(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/a-with-href-attribute.html"))
|
||||
el = self.driver.find_element_by_css_selector("a")
|
||||
self.assertEqual("http://web-platform.test:8000/path#fragment", el.get_attribute("href"))
|
||||
|
||||
def test_img_src_attribute(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/img-with-src-attribute.html"))
|
||||
el = self.driver.find_element_by_css_selector("img")
|
||||
self.assertEqual("http://web-platform.test:8000/images/blue.png", el.get_attribute("src"))
|
||||
|
||||
def test_custom_attribute(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-with-custom-attribute.html"))
|
||||
el = self.driver.find_element_by_css_selector("div")
|
||||
self.assertEqual("attribute value", el.get_attribute("webdriver-custom-attribute"))
|
||||
|
||||
def test_attribute_not_present(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-without-attribute.html"))
|
||||
el = self.driver.find_element_by_css_selector("div")
|
||||
self.assertIsNone(el.get_attribute("class"))
|
||||
|
||||
def test_find_attribute_with_special_characters(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/get-element-attribute-extended.html"))
|
||||
element = self.driver.find_element_by_id("id_special_char_attribute_name")
|
||||
attribute = element.get_attribute("*")
|
||||
self.assertEquals("special_char_attribute_name", attribute)
|
||||
|
||||
def test_find_attribute_with_special_char_name_and_value(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/get-element-attribute-extended.html"))
|
||||
element = self.driver.find_element_by_id("id_special_char_attribute_name_and_value")
|
||||
attribute = element.get_attribute("@")
|
||||
self.assertEquals("(", attribute)
|
||||
|
||||
def test_find_attribute_with_numeric_name(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/get-element-attribute-extended.html"))
|
||||
element = self.driver.find_element_by_id("id_attribute_name_numeric")
|
||||
attribute = element.get_attribute("1")
|
||||
self.assertEquals("numeric attribute name", attribute)
|
||||
|
||||
def test_find_attribute_with_numeric_value(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/get-element-attribute-extended.html"))
|
||||
element = self.driver.find_element_by_id("id_attribute_value_numeric")
|
||||
attribute = element.get_attribute("one")
|
||||
self.assertEquals("2", attribute)
|
||||
|
||||
def test_find_attribute_with_negative_numeric_name(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/get-element-attribute-extended.html"))
|
||||
element = self.driver.find_element_by_id("id_attribute_negative_numeric_name")
|
||||
attribute = element.get_attribute("-5")
|
||||
self.assertEquals("attribute name is -5", attribute)
|
||||
|
||||
def test_find_attribute_with_negative_numeric_value(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/get-element-attribute-extended.html"))
|
||||
element = self.driver.find_element_by_id("id_attribute_negative_numeric_value")
|
||||
attribute = element.get_attribute("negative_numeric_value")
|
||||
self.assertEquals("-9", attribute)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -1,17 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
|
||||
class GetElementPropertiesTest(base_test.WebDriverBaseTest):
|
||||
def test_get_element_text(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/elements_text.html"))
|
||||
e = self.driver.find_element_by_name("name")
|
||||
self.assertEquals("name", e.text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -1,12 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset='utf-8'>
|
||||
<title>0x0 pixel element</title>
|
||||
|
||||
<style>
|
||||
div {
|
||||
height: 0;
|
||||
width: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div>This element is not visible.</div>
|
|
@ -1,12 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset='utf-8'>
|
||||
<title>1x1 pixel element</title>
|
||||
|
||||
<style>
|
||||
p {
|
||||
height: 1px;
|
||||
width: 1px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>This element is visible.</p>
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>"a" element with not fully qualified url</title>
|
||||
|
||||
<a href="//web-platform.test:8000/path#fragment"> </a>
|
|
@ -1,16 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<title>Parent node visible with absolutely positioned children, where ancestor overflow is hidden</title>
|
||||
|
||||
<style>
|
||||
body {
|
||||
overflow: hidden;
|
||||
height: 0;
|
||||
width: 0;
|
||||
}
|
||||
.child { position: absolute }
|
||||
</style>
|
||||
|
||||
<div id=parent>
|
||||
<div class=child>grated</div>
|
||||
<div class=child>cheese</div>
|
|
@ -1,4 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<title>BODY element has no children. MUST be reported displayed</title>
|
||||
<body/>
|
|
@ -1,3 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<title>BODY tag is omitted; BODY element MUST be reported displayed</title>
|
|
@ -1,4 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<title>BODY element with style=overflow:hidden. MUST be reported displayed</title>
|
||||
<body style="overflow:hidden"/>
|
|
@ -1,4 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<title>BODY element with style=visibility:hidden. MUST be reported displayed</title>
|
||||
<body style="visibility:hidden"/>
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset='utf-8'>
|
||||
<title>display: block;</title>
|
||||
|
||||
<p>This element is visible.</p>
|
|
@ -1,11 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>display: none applies to child node links</title>
|
||||
|
||||
<style>
|
||||
#parent { display: none }
|
||||
</style>
|
||||
|
||||
<div id="parent">
|
||||
<a id="child">hidden</a>
|
||||
</div>
|
|
@ -1,11 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>display: none applies to child node paragraphs</title>
|
||||
|
||||
<style>
|
||||
#parent { display: none }
|
||||
</style>
|
||||
|
||||
<div id="parent">
|
||||
<p id="child">hidden</p>
|
||||
</div>
|
|
@ -1,11 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>display: none applies to child nodes</title>
|
||||
|
||||
<style>
|
||||
#parent { display: none }
|
||||
</style>
|
||||
|
||||
<div id="parent">
|
||||
<div id="child">Brie is good</div>
|
||||
</div>
|
|
@ -1,10 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>display: none set dynamically</title>
|
||||
|
||||
<p id="hidden">Should not be visible</span>
|
||||
|
||||
<script>
|
||||
var hidden = document.getElementById("hidden");
|
||||
hidden.style.display = "none";
|
||||
</script>
|
|
@ -1,15 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>display: none on parent takes presedence over visibility: visible on child node</title>
|
||||
|
||||
<style>
|
||||
#parent { display: none }
|
||||
#child { visibility: visible }
|
||||
</style>
|
||||
|
||||
<div id="parent">
|
||||
<div id="child">
|
||||
hidden
|
||||
</div>
|
||||
</div>
|
||||
in
|
|
@ -1,14 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>display: none on parent takes presedence</title>
|
||||
|
||||
<style>
|
||||
#parent { display: none }
|
||||
#child { dipslay: block }
|
||||
</style>
|
||||
|
||||
<div id="parent">
|
||||
<div id="child">
|
||||
hidden
|
||||
</div>
|
||||
</div>
|
|
@ -1,11 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset='utf-8'>
|
||||
<title>display: none;</title>
|
||||
|
||||
<style>
|
||||
p {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>This element is not visible.</p>
|
|
@ -1,15 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element outside viewport</title>
|
||||
|
||||
<style>
|
||||
div { position: absolute }
|
||||
</style>
|
||||
|
||||
<div>hidden</div>
|
||||
|
||||
<script>
|
||||
var el = document.getElementsByTagName("div")[0];
|
||||
el.style.top = "-500px";
|
||||
el.style.left = "-500px";
|
||||
</script>
|
|
@ -1,20 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element hidden by other element</title>
|
||||
|
||||
<style>
|
||||
div {
|
||||
position: absolute;
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
#overlay {
|
||||
background: blue;
|
||||
}
|
||||
|
||||
#hidden { background: red }
|
||||
</style>
|
||||
|
||||
<div id="hidden"></div>
|
||||
<div id="overlay"></div>
|
|
@ -1,29 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element hidden by z-index</title>
|
||||
|
||||
<style>
|
||||
* { position: relative }
|
||||
|
||||
#overlay,
|
||||
#hidden {
|
||||
height: 50px;
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
#overlay {
|
||||
background: blue;
|
||||
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
#hidden {
|
||||
background: red;
|
||||
top: -50px;
|
||||
|
||||
z-index: -1;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="overlay"></div>
|
||||
<div id="hidden"></div>
|
|
@ -1,31 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element moved behind other element by transform</title>
|
||||
|
||||
<style>
|
||||
* { position: relative }
|
||||
|
||||
#overlay {
|
||||
height: 50px;
|
||||
width: 50px;
|
||||
background: blue;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
#hidden {
|
||||
height: 50px;
|
||||
width: 50px;
|
||||
background: red;
|
||||
z-index: -1;
|
||||
|
||||
transform: translate(0, -50px);
|
||||
|
||||
/* fix your browsers god damnit */
|
||||
-webkit-transform: translate(0, -50px);
|
||||
-moz-transform: translate(0x, -50px);
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="overlay"></div>
|
||||
<div id="hidden"></div>
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element moved outside viewpor by transform</title>
|
||||
|
||||
<style>
|
||||
div {
|
||||
transform: translate(-200px, -200px);
|
||||
|
||||
/* fix your browsers god damnit */
|
||||
-webkit-transform: translate(-200px, -200px);
|
||||
-moz-transform: translate(-200px, -200px);
|
||||
}
|
||||
</style>
|
||||
|
||||
<div>Cheddar!</div>
|
|
@ -1,13 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element outside viewport</title>
|
||||
|
||||
<style>
|
||||
div {
|
||||
position: absolute;
|
||||
top: -500px;
|
||||
left: -500px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div>hidden</div>
|
|
@ -1,23 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element partially hidden by other element</title>
|
||||
|
||||
<style>
|
||||
div {
|
||||
height: 100px;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
#partial {
|
||||
background: yellow;
|
||||
}
|
||||
|
||||
#other {
|
||||
background: blue;
|
||||
margin-top: -50px;
|
||||
margin-left: 50px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="partial"></div>
|
||||
<div id="other"></div>
|
|
@ -1,89 +0,0 @@
|
|||
<html>
|
||||
<body>
|
||||
<select>
|
||||
<option id="selected-1">selected-1</option>
|
||||
</select>
|
||||
<select>
|
||||
<option id="selected-2">selected-2</option>
|
||||
<option id="unselected-1">unselected-1</option>
|
||||
</select>
|
||||
<select disabled>
|
||||
<option id="unselected-2">unselected-2</option>
|
||||
<option id="selected-3" selected>selected-3</option>
|
||||
<option id="unselected-3">unselected-3</option>
|
||||
</select>
|
||||
<select>
|
||||
<option id="unselected-4" checked>unselected-4</option>
|
||||
<option id="unselected-5">unselected-5</option>
|
||||
<option id="selected-4" selected>selected-4</option>
|
||||
</select>
|
||||
<select>
|
||||
<option id="unselected-6" selected>unselected-6</option>
|
||||
<option id="selected-5">selected-5</option>
|
||||
</select>
|
||||
<script>
|
||||
document.getElementById("selected-5").selected = true;
|
||||
</script>
|
||||
<select multiple>
|
||||
<option id="unselected-7">unselected-7</option>
|
||||
<option id="unselected-8">unselected-8</option>
|
||||
</select>
|
||||
<select multiple>
|
||||
<option id="selected-6" selected>selected-6</option>
|
||||
<option id="unselected-9" selected>unselected-9</option>
|
||||
<option id="selected-7">selected-7</option>
|
||||
</select>
|
||||
<script>
|
||||
document.getElementById("unselected-9").selected = false;
|
||||
document.getElementById("selected-7").selected = true;
|
||||
</script>
|
||||
|
||||
<h1>Input Checkbox Elements</h1>
|
||||
<input type="checkbox" id="selected-8" />selected-8
|
||||
<script>
|
||||
document.getElementById("selected-8").checked = true;
|
||||
</script>
|
||||
<input type="checkbox" id="selected-9" checked />selected-9
|
||||
<script>
|
||||
document.getElementById("selected-9").indeterminate = true;
|
||||
</script>
|
||||
<input type="checkbox" id="unselected-10" />unselected-10
|
||||
<input type="checkbox" id="unselected-11" checked />unselected-11
|
||||
<script>
|
||||
document.getElementById("unselected-11").checked = false;
|
||||
</script>
|
||||
<input type="checkbox" id="unselected-12" />unselected-12
|
||||
<script>
|
||||
document.getElementById("unselected-12").indeterminate = true;
|
||||
</script>
|
||||
<input type="checkbox" id="unselected-13" selected />unselected-13
|
||||
<input type="checkbox" id="selected-10" checked />selected-10
|
||||
|
||||
<h1>Input Radio Elements</h1>
|
||||
<br>Group 1:<br>
|
||||
<input type="radio" name="group1" id="selected-11" checked />selected-11
|
||||
<br>Group 2:<br>
|
||||
<input type="radio" name="group2" id="selected-12" />selected-12
|
||||
<script>
|
||||
document.getElementById("selected-12").checked = true;
|
||||
</script>
|
||||
<br>Group 3:<br>
|
||||
<input type="radio" name="group3" id="unselected-14" />unselected-14
|
||||
<input type="radio" name="group3" id="selected-13" checked />selected-13
|
||||
<br>Group 4:<br>
|
||||
<input type="radio" name="group4" id="unselected-15" checked />unselected-15
|
||||
<input type="radio" name="group4" id="selected-14" checked />selected-14
|
||||
<br>Group 5:<br>
|
||||
<input type="radio" name="group5" id="unselected-16" />unselected-16
|
||||
<input type="radio" name="group5" id="unselected-17" checked />unselected-17
|
||||
<script>
|
||||
document.getElementById("unselected-17").checked = false;
|
||||
</script>
|
||||
<br>Group 6<br>
|
||||
<input type="radio" name="group6" id="selected-15" />selected-15
|
||||
<input type="radio" name="group6" id="unselected-18" checked />unselected-18
|
||||
<script>
|
||||
document.getElementById("selected-15").checked = true;
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element with color style attribute</title>
|
||||
|
||||
<div style="color: red"> </div>
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element with custom attribute</title>
|
||||
|
||||
<div webdriver-custom-attribute="attribute value"> </div>
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element with id attribute</title>
|
||||
|
||||
<div id="myId"> </div>
|
|
@ -1,10 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element with same color as background</title>
|
||||
|
||||
<style>
|
||||
body, div { background: white }
|
||||
div { width: 50px; height: 50px; }
|
||||
</style>
|
||||
|
||||
<div> </div>
|
|
@ -1,18 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element with same color as background</title>
|
||||
|
||||
<style>
|
||||
#overlay,
|
||||
#hidden {
|
||||
background: blue;
|
||||
width: 50px; height: 50px;
|
||||
}
|
||||
|
||||
#hidden {
|
||||
margin-top: -50px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="overlay"></div>
|
||||
<div id="hidden"></div>
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element with style attribute</title>
|
||||
|
||||
<div style='font-family: "Gill Sans Extrabold", Helvetica, sans-serif; line-height: 1.2; font-weight:bold'> </div>
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Element without attribute</title>
|
||||
|
||||
<div> </div>
|
|
@ -1,10 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<title>Element location</title>
|
||||
|
||||
<body>
|
||||
<div id="id">id</div>
|
||||
<div id="name" name="name">name</div>
|
||||
<a id="link">link text</a>
|
||||
</body>
|
|
@ -1,72 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset=utf-8>
|
||||
<title>Get Element Attribute Extended</title>
|
||||
|
||||
<span id=my_id_with_a_relatively_long_name_test class=my_id_with_a_relatively_long_name_test_class>Span</span>
|
||||
<span id=my-id>Span</span>
|
||||
|
||||
<div class=container>
|
||||
<div id=div1 name=div-name>
|
||||
<div id=div1-1_div1>
|
||||
<h1 id=h1_div1.1_div1 class=span-class>h1 element, id:h1_div1.1_div1</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class=div-depth-2>
|
||||
<div class=div-depth-3>
|
||||
<div class=div-depth-4>
|
||||
<span id=my_id_with_a_relatively_long_name_test class=my_id_with_a_relatively_long_name_test_class>Span</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a>anchor text 123</a>
|
||||
<a>anchor text 123</a>
|
||||
|
||||
<select>
|
||||
<option id="opt-1" style="font-size: 11px; display: block;" selected>My Option 1</option>
|
||||
<option class="opt" >My Option 2</option>
|
||||
<option value="one">My Option 3</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<a id="no-vi-1" class="cant-see" style="display:none">no visibility</a><br/>
|
||||
<a id="no-vi-2" style="display:none">no visibility</a><br/>
|
||||
<a id="no-vi-2" style="display:none">no visibility</a><br/>
|
||||
|
||||
<span id=my_id_with_a_relatively_long_name_test2>Span</span>
|
||||
<span id="id.period">Span</span>
|
||||
</div>
|
||||
|
||||
<div id=id_attribute_accesskey accesskey=nothing></div>
|
||||
|
||||
<!-- Multiple elements with same class -->
|
||||
|
||||
<div id=id_div_multiple_elements_same_class_nested_depth_0 class=multiple_elements_same_class_nested>
|
||||
<div id=id_multiple_elements_same_class_nested_div_depth_1 class=multiple_elements_same_class_nested>
|
||||
<div id=id_multiple_elements_same_class_nested_div_depth_2 class=multiple_elements_same_class_nested>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Attribute name with special characters -->
|
||||
<div id=id_special_char_attribute_name *=special_char_attribute_name></div>
|
||||
|
||||
<!-- Attribute value with special characters -->
|
||||
<div id=id_special_char_attribute_value name="*"></div>
|
||||
|
||||
<!-- Attribute value and name with special characters -->
|
||||
<div id=id_special_char_attribute_name_and_value @="("></div>
|
||||
|
||||
<!-- Attribute name is numeric. -->
|
||||
<div id"id_attribute_name_numeric 1="numeric attribute name"></div>
|
||||
|
||||
<!-- Attribute value is numeric. -->
|
||||
<div id=id_attribute_value_numeric one=2></div>
|
||||
|
||||
<!-- Attribute name is negative numeric. -->
|
||||
<div id=id_attribute_negative_numeric_name -5="attribute name is -5"></div>
|
||||
|
||||
<!-- Attribute value is negative numeric. -->
|
||||
<div id=id_attribute_negative_numeric_value negative_numeric_value=-9></div>
|
|
@ -1,9 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Hidden INPUT @type="checkbox" is untogglable</title>
|
||||
|
||||
<style>
|
||||
input { display: none }
|
||||
</style>
|
||||
|
||||
<input type="checkbox" />
|
|
@ -1,9 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Typing in hidden input is impossible</title>
|
||||
|
||||
<style>
|
||||
input { display: none }
|
||||
</style>
|
||||
|
||||
<input type="text" />
|
|
@ -1,5 +0,0 @@
|
|||
<!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>
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>"img" element with not fully qualified url</title>
|
||||
|
||||
<img src="//web-platform.test:8000/images/blue.png"> </a>
|
|
@ -1,10 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>INPUT motphs into @type="hidden"</title>
|
||||
|
||||
<input />
|
||||
|
||||
<script>
|
||||
var input = document.getElementsByTagName("input")[0];
|
||||
input.type = "hidden";
|
||||
</script>
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>INPUT @type="hidden" is unclickable</title>
|
||||
|
||||
<input type="hidden" />
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>INPUT @type="hidden" are always hidden</title>
|
||||
|
||||
<input type="hidden" />
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Input with checked attribute</title>
|
||||
|
||||
<input type=checkbox checked="false"> </input>
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Input without checked attribute</title>
|
||||
|
||||
<input type=checkbox> </input>
|
|
@ -1,7 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Option with value attribute</title>
|
||||
|
||||
<select>
|
||||
<option value="value1">Value 1</option>
|
||||
</select>
|
|
@ -1,7 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Option without value attribute</title>
|
||||
|
||||
<select>
|
||||
<option>Value 1</option>
|
||||
</select>
|
|
@ -1,14 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Text with matching color and background</title>
|
||||
|
||||
<style>
|
||||
p {
|
||||
background: blue;
|
||||
color: blue;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>
|
||||
This on the other hand, should be visible
|
||||
</p>
|
|
@ -1,12 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Text with same color as background</title>
|
||||
|
||||
<style>
|
||||
body { background: white }
|
||||
p { color: white }
|
||||
</style>
|
||||
|
||||
<p>
|
||||
Shouldn't be visible.
|
||||
</p>
|
|
@ -1,14 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Text with same color as parent background</title>
|
||||
|
||||
<style>
|
||||
#parent { background: gray }
|
||||
p { color: gray }
|
||||
</style>
|
||||
|
||||
<div id="parent">
|
||||
<p>
|
||||
Should not be visible
|
||||
</p>
|
||||
</div>g
|
|
@ -1,11 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>visibility: hidden applies to child node of type A</title>
|
||||
|
||||
<style>
|
||||
#parent { visibility: hidden }
|
||||
</style>
|
||||
|
||||
<div id="parent">
|
||||
<a id="child" href="#">Brie is good</a>
|
||||
</div>
|
|
@ -1,11 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>visibility: hidden applies to child nodes of type P</title>
|
||||
|
||||
<style>
|
||||
#parent { visibility: hidden }
|
||||
</style>
|
||||
|
||||
<div id="parent">
|
||||
<p id="child">Brie is good</p>
|
||||
</div>
|
|
@ -1,12 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<title>visibility: visible on child node takes presedence</title>
|
||||
|
||||
<style>
|
||||
#parent { visibility: hidden }
|
||||
#child { visibility: visible }
|
||||
</style>
|
||||
|
||||
<div id="parent">
|
||||
<div id="child">Brie is good</div>
|
||||
</div>
|
|
@ -1,11 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>visibility: hidden applies to child nodes</title>
|
||||
|
||||
<style>
|
||||
#parent { visibility: hidden }
|
||||
</style>
|
||||
|
||||
<div id="parent">
|
||||
<div id="child">Brie is good</div>
|
||||
</div>
|
|
@ -1,11 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset='utf-8'>
|
||||
<title>visibility: hidden;</title>
|
||||
|
||||
<style>
|
||||
p {
|
||||
visibility: hidden;
|
||||
}
|
||||
</style>
|
||||
|
||||
<p>This element is not visible.</p>
|
|
@ -1,5 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset='utf-8'>
|
||||
<title>visibility: visible;</title>
|
||||
|
||||
<p>This element is visible.</p>
|
|
@ -1,30 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Page with overflow</title>
|
||||
<style>
|
||||
#over {
|
||||
width:400px;
|
||||
height: 300px;
|
||||
overflow-x: auto;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="over">
|
||||
<div style="width: 5000px;">
|
||||
<div style="width: 100%; text-align: right;" ><a href="#" id="right" onclick="document.getElementById('right-clicked').textContent='ok'">Click right</a></div>
|
||||
</div>
|
||||
<div style="height: 5000px; width: 5000px;">
|
||||
Right clicked: <span id="right-clicked"></span></br>
|
||||
Bottom clicked: <span id="bottom-clicked"></span></br>
|
||||
Bottom-right clicked: <span id="bottom-right-clicked"></span></br>
|
||||
</div>
|
||||
<div style="width: 5000px;">
|
||||
<div style="width: 100%; text-align: right;" ><a href="#" id="bottom-right" onclick="document.getElementById('bottom-right-clicked').textContent='ok'">Click bottom-right</a></div>
|
||||
</div>
|
||||
<a href="#" id="bottom" onclick="document.getElementById('bottom-clicked').textContent='ok'">Click bottom</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,30 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Page with overflow</title>
|
||||
<style>
|
||||
#over {
|
||||
width:400px;
|
||||
height: 300px;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="over">
|
||||
<div style="width: 5000px;">
|
||||
<div style="width: 100%; text-align: right;" ><a href="#" id="right" onclick="document.getElementById('right-clicked').textContent='ok'">Click right</a></div>
|
||||
</div>
|
||||
<div style="height: 5000px; width: 5000px;">
|
||||
Right clicked: <span id="right-clicked"></span></br>
|
||||
Bottom clicked: <span id="bottom-clicked"></span></br>
|
||||
Bottom-right clicked: <span id="bottom-right-clicked"></span></br>
|
||||
</div>
|
||||
<div style="width: 5000px;">
|
||||
<div style="width: 100%; text-align: right;" ><a href="#" id="bottom-right" onclick="document.getElementById('bottom-right-clicked').textContent='ok'">Click bottom-right</a></div>
|
||||
</div>
|
||||
<a href="#" id="bottom" onclick="document.getElementById('bottom-clicked').textContent='ok'">Click bottom</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,30 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Page with overflow</title>
|
||||
<style>
|
||||
#over {
|
||||
width:400px;
|
||||
height: 300px;
|
||||
overflow-x: hidden;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="over">
|
||||
<div style="width: 5000px;">
|
||||
<div style="width: 100%; text-align: right;" ><a href="#" id="right" onclick="document.getElementById('right-clicked').textContent='ok'">Click right</a></div>
|
||||
</div>
|
||||
<div style="height: 5000px; width: 5000px;">
|
||||
Right clicked: <span id="right-clicked"></span></br>
|
||||
Bottom clicked: <span id="bottom-clicked"></span></br>
|
||||
Bottom-right clicked: <span id="bottom-right-clicked"></span></br>
|
||||
</div>
|
||||
<div style="width: 5000px;">
|
||||
<div style="width: 100%; text-align: right;" ><a href="#" id="bottom-right" onclick="document.getElementById('bottom-right-clicked').textContent='ok'">Click bottom-right</a></div>
|
||||
</div>
|
||||
<a href="#" id="bottom" onclick="document.getElementById('bottom-clicked').textContent='ok'">Click bottom</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,30 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Page with overflow</title>
|
||||
<style>
|
||||
#over {
|
||||
width:400px;
|
||||
height: 300px;
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="over">
|
||||
<div style="width: 5000px;">
|
||||
<div style="width: 100%; text-align: right;" ><a href="#" id="right" onclick="document.getElementById('right-clicked').textContent='ok'">Click right</a></div>
|
||||
</div>
|
||||
<div style="height: 5000px; width: 5000px;">
|
||||
Right clicked: <span id="right-clicked"></span></br>
|
||||
Bottom clicked: <span id="bottom-clicked"></span></br>
|
||||
Bottom-right clicked: <span id="bottom-right-clicked"></span></br>
|
||||
</div>
|
||||
<div style="width: 5000px;">
|
||||
<div style="width: 100%; text-align: right;" ><a href="#" id="bottom-right" onclick="document.getElementById('bottom-right-clicked').textContent='ok'">Click bottom-right</a></div>
|
||||
</div>
|
||||
<a href="#" id="bottom" onclick="document.getElementById('bottom-clicked').textContent='ok'">Click bottom</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,30 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Page with overflow</title>
|
||||
<style>
|
||||
#over {
|
||||
width:400px;
|
||||
height: 300px;
|
||||
overflow-x: scroll;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="over">
|
||||
<div style="width: 5000px;">
|
||||
<div style="width: 100%; text-align: right;" ><a href="#" id="right" onclick="document.getElementById('right-clicked').textContent='ok'">Click right</a></div>
|
||||
</div>
|
||||
<div style="height: 5000px; width: 5000px;">
|
||||
Right clicked: <span id="right-clicked"></span></br>
|
||||
Bottom clicked: <span id="bottom-clicked"></span></br>
|
||||
Bottom-right clicked: <span id="bottom-right-clicked"></span></br>
|
||||
</div>
|
||||
<div style="width: 5000px;">
|
||||
<div style="width: 100%; text-align: right;" ><a href="#" id="bottom-right" onclick="document.getElementById('bottom-right-clicked').textContent='ok'">Click bottom-right</a></div>
|
||||
</div>
|
||||
<a href="#" id="bottom" onclick="document.getElementById('bottom-clicked').textContent='ok'">Click bottom</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,14 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8" />
|
||||
<title>Zero sized element with sizable decendant</title>
|
||||
|
||||
<style>
|
||||
#parent { width: 0; height: 0; }
|
||||
#child { width: 100; height: 100; background-color: blue; }
|
||||
</style>
|
||||
|
||||
<div id="parent">
|
||||
<div id="child">
|
||||
|
||||
</div>
|
||||
</div>
|
|
@ -1,210 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
|
||||
class GetElementSelectedTest(base_test.WebDriverBaseTest):
|
||||
def test_selected_1(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-1")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_2(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-2")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_3(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-3")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_4(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-4")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_5(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-5")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_6(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-6")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_7(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-7")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_8(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-8")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_9(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-9")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_10(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-10")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_11(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-11")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_12(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-12")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_13(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-13")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_14(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-14")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_selected_15(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("selected-15")
|
||||
|
||||
self.assertEquals(element.is_selected(), True)
|
||||
|
||||
def test_unselected_1(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-1")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_2(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-2")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_3(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-3")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_4(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-4")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_5(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-5")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_6(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-6")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_7(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-7")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_8(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-8")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_9(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-9")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_10(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-10")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_11(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-11")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_12(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-12")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_13(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-13")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_14(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-14")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_15(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-15")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_16(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-16")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_17(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-17")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
def test_unselected_18(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-selected.html"))
|
||||
element = self.driver.find_element_by_id("unselected-18")
|
||||
|
||||
self.assertEquals(element.is_selected(), False)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -1,324 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
from selenium.common import exceptions
|
||||
|
||||
|
||||
class NaturalNonVisibleElementsTest(base_test.WebDriverBaseTest):
|
||||
def test_0x0_pixel_element_is_not_visible(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/0x0-pixels.html"))
|
||||
el = self.driver.find_element_by_css_selector("div")
|
||||
self.assertFalse(el.is_displayed())
|
||||
|
||||
def test_0x0_pixel_text_node_is_visible(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/0x0-pixels-text-node.html"))
|
||||
el = self.driver.find_element_by_css_selector("p")
|
||||
self.assertTrue(el.is_displayed())
|
||||
|
||||
def test_1x1_pixel_element(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/1x1-pixels.html"))
|
||||
el = self.driver.find_element_by_css_selector("p")
|
||||
self.assertTrue(el.is_displayed())
|
||||
|
||||
def test_zero_sized_element_is_shown_if_decendant_has_size(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/zero-sized-element-with-sizable-decendant.html"))
|
||||
parent = self.driver.find_element_by_css_selector("#parent")
|
||||
child = self.driver.find_element_by_css_selector("#child")
|
||||
|
||||
self.assertTrue(parent.is_displayed())
|
||||
self.assertTrue(child.is_displayed())
|
||||
|
||||
def test_input_type_hidden_is_never_visible(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/input-type-hidden.html"))
|
||||
input = self.driver.find_element_by_css_selector("input")
|
||||
self.assertFalse(input.is_displayed())
|
||||
|
||||
def test_input_morphs_into_hidden(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/input-morphs-into-hidden.html"))
|
||||
input = self.driver.find_element_by_css_selector("input")
|
||||
self.assertFalse(input.is_displayed())
|
||||
|
||||
def test_parent_node_visible_when_all_children_are_absolutely_positioned_and_overflow_is_hidden(self):
|
||||
pass
|
||||
|
||||
def test_parent_of_absolutely_positioned_elements_visible_where_ancestor_overflow_is_hidden(self):
|
||||
"""When a parent's ancestor hides any overflow, absolutely positioned child elements are
|
||||
still visible. The parent container is also considered visible by webdriver for this
|
||||
reason because it is interactable."""
|
||||
|
||||
self.driver.get(self.webserver.where_is("element_state/res/absolute-children-ancestor-hidden-overflow.html"))
|
||||
|
||||
children = self.driver.find_elements_by_css_selector(".child")
|
||||
assert all(child.is_displayed() for child in children)
|
||||
|
||||
parent = self.driver.find_element_by_css_selector("#parent")
|
||||
assert parent.is_displayed()
|
||||
|
||||
def test_element_hidden_by_overflow_x_is_not_visible(self):
|
||||
# TODO(andreastt): This test should probably be split in three. Also it's making two
|
||||
# assertions.
|
||||
pages = ["element_state/res/x-hidden-y-hidden.html",
|
||||
"element_state/res/x-hidden-y-scroll.html",
|
||||
"element_state/res/x-hidden-y-auto.html"]
|
||||
|
||||
for page in pages:
|
||||
self.driver.get(self.webserver.where_is(page))
|
||||
right = self.driver.find_element_by_css_selector("#right")
|
||||
bottom_right = self.driver.find_element_by_css_selector("#bottom-right")
|
||||
|
||||
self.assertFalse(right.is_displayed())
|
||||
self.assertFalse(bottom_right.is_displayed())
|
||||
|
||||
def test_element_hidden_by_overflow_y_is_not_visible(self):
|
||||
# TODO(andreastt): This test should probably be split in three. Also it's making two
|
||||
# assertions.
|
||||
pages = ["element_state/res/x-hidden-y-hidden.html",
|
||||
"element_state/res/x-scroll-y-hidden.html",
|
||||
"element_state/res/x-auto-y-hidden.html"]
|
||||
|
||||
for page in pages:
|
||||
self.driver.get(self.webserver.where_is(page))
|
||||
bottom = self.driver.find_element_by_css_selector("#bottom")
|
||||
bottom_right = self.driver.find_element_by_css_selector("#bottom-right")
|
||||
|
||||
self.assertFalse(bottom.is_displayed())
|
||||
self.assertFalse(bottom_right.is_displayed())
|
||||
|
||||
def test_parent_node_visible_when_all_children_are_absolutely_position_and_overflow_is_hidden(self):
|
||||
pass
|
||||
|
||||
def test_element_scrollable_by_overflow_x_is_visible(self):
|
||||
pass
|
||||
|
||||
def test_element_scrollable_by_overflow_y_is_visible(self):
|
||||
pass
|
||||
|
||||
def test_element_scrollable_by_overflow_x_and_y_is_visible(self):
|
||||
pass
|
||||
|
||||
def test_element_scrollable_by_overflow_y_is_visible(self):
|
||||
pass
|
||||
|
||||
def test_element_outside_viewport(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-outside-viewport.html"))
|
||||
hidden = self.driver.find_element_by_css_selector("div")
|
||||
self.assertFalse(hidden.is_displayed())
|
||||
|
||||
def test_element_dynamically_moved_outside_viewport(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-dynamically-moved-outside-viewport.html"))
|
||||
hidden = self.driver.find_element_by_css_selector("div")
|
||||
self.assertFalse(hidden.is_displayed())
|
||||
|
||||
def test_element_hidden_by_other_element(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-hidden-by-other-element.html"))
|
||||
overlay = self.driver.find_element_by_css_selector("#overlay")
|
||||
hidden = self.driver.find_element_by_css_selector("#hidden")
|
||||
|
||||
self.assertTrue(overlay.is_displayed())
|
||||
self.assertFalse(hidden.is_displayed())
|
||||
|
||||
def test_element_partially_hidden_by_other_element(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-partially-hidden-by-other-element.html"))
|
||||
partial = self.driver.find_element_by_css_selector("#partial")
|
||||
self.assertTrue(partial.is_displayed())
|
||||
|
||||
def test_element_hidden_by_z_index(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-hidden-by-z-index.html"))
|
||||
overlay = self.driver.find_element_by_css_selector("#overlay")
|
||||
hidden = self.driver.find_element_by_css_selector("#hidden")
|
||||
|
||||
self.assertTrue(overlay.is_displayed())
|
||||
self.assertFalse(hidden.is_displayed())
|
||||
|
||||
def test_element_moved_outside_viewport_by_transform(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-moved-outside-viewport-by-transform.html"))
|
||||
el = self.driver.find_element_by_css_selector("div")
|
||||
self.assertFalse(el.is_displayed())
|
||||
|
||||
def test_element_moved_behind_other_element_by_transform(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-moved-behind-other-element-by-transform.html"))
|
||||
overlay = self.driver.find_element_by_css_selector("#overlay")
|
||||
hidden = self.driver.find_element_by_css_selector("#hidden")
|
||||
|
||||
self.assertTrue(overlay.is_displayed())
|
||||
self.assertFalse(hidden.is_displayed())
|
||||
|
||||
def test_text_with_same_color_as_background(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/text-with-same-color-as-background.html"))
|
||||
p = self.driver.find_element_by_css_selector("p")
|
||||
self.assertFalse(p.is_displayed())
|
||||
|
||||
def test_text_with_same_color_as_parent_background(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/text-with-same-color-as-parent-background.html"))
|
||||
p = self.driver.find_element_by_css_selector("p")
|
||||
self.assertFalse(p.is_displayed())
|
||||
|
||||
def test_text_with_matching_color_and_background(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/text-with-matching-color-and-background.html"))
|
||||
p = self.driver.find_element_by_css_selector("p")
|
||||
self.assertTrue(p.is_displayed())
|
||||
|
||||
def test_element_with_same_color_as_background(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-with-same-color-as-background.html"))
|
||||
el = self.driver.find_element_by_css_selector("div")
|
||||
self.assertFalse(el.is_displayed())
|
||||
|
||||
def test_element_with_same_color_as_parent_background(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/element-with-same-color-as-parent-background.html"))
|
||||
hidden = self.driver.find_element_by_css_selector("#hidden")
|
||||
self.assertFalse(hidden.is_displayed())
|
||||
|
||||
|
||||
class BodyElementIsAlwaysDisplayedTest(base_test.WebDriverBaseTest):
|
||||
def assert_body_is_displayed_on(self, page):
|
||||
self.driver.get(self.webserver.where_is(page))
|
||||
body = self.driver.find_element_by_css_selector("body")
|
||||
assert body.is_displayed()
|
||||
|
||||
def test_implicit(self):
|
||||
self.assert_body_is_displayed_on("element_state/res/body_implicit.html")
|
||||
|
||||
def test_empty(self):
|
||||
self.assert_body_is_displayed_on("element_state/res/body_empty.html")
|
||||
|
||||
def test_visibility_hidden(self):
|
||||
self.assert_body_is_displayed_on("element_state/res/body_visibility_hidden.html")
|
||||
|
||||
def test_overflow_hidden(self):
|
||||
self.assert_body_is_displayed_on("element_state/res/body_overflow_hidden.html")
|
||||
|
||||
|
||||
class DisplayTest(base_test.WebDriverBaseTest):
|
||||
def test_display_block(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/display-block.html"))
|
||||
el = self.driver.find_element_by_css_selector("p")
|
||||
self.assertTrue(el.is_displayed())
|
||||
|
||||
def test_display_none(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/display-none.html"))
|
||||
el = self.driver.find_element_by_css_selector("p")
|
||||
self.assertFalse(el.is_displayed())
|
||||
|
||||
def test_display_none_hides_child_node(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/display-none-child.html"))
|
||||
parent = self.driver.find_element_by_css_selector("#parent")
|
||||
child = self.driver.find_element_by_css_selector("#child")
|
||||
|
||||
self.assertFalse(parent.is_displayed())
|
||||
self.assertFalse(child.is_displayed())
|
||||
|
||||
def test_display_none_hides_child_node_link(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/display-none-child-link.html"))
|
||||
child = self.driver.find_element_by_css_selector("#child")
|
||||
self.assertFalse(child.is_displayed())
|
||||
|
||||
def test_display_none_hides_child_node_paragraph(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/display-none-child-paragraph.html"))
|
||||
child = self.driver.find_element_by_css_selector("#child")
|
||||
self.assertFalse(child.is_displayed())
|
||||
|
||||
def test_display_none_on_parent_takes_presedence(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/display-none-parent-presedence.html"))
|
||||
child = self.driver.find_element_by_css_selector("#child")
|
||||
self.assertFalse(child.is_displayed())
|
||||
|
||||
def test_display_none_on_parent_takes_presedence_over_visibility_visible(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/display-none-parent-presedence-visibility.html"))
|
||||
child = self.driver.find_element_by_css_selector("#child")
|
||||
self.assertFalse(child.is_displayed())
|
||||
|
||||
def test_display_none_hidden_dynamically(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/display-none-dynamic.html"))
|
||||
hidden = self.driver.find_element_by_css_selector("#hidden")
|
||||
self.assertFalse(hidden.is_displayed())
|
||||
|
||||
|
||||
class VisibilityTest(base_test.WebDriverBaseTest):
|
||||
def test_element_state_hidden(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/visibility-hidden.html"))
|
||||
el = self.driver.find_element_by_css_selector("p")
|
||||
self.assertFalse(el.is_displayed())
|
||||
|
||||
def test_element_state_visible(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/visibility-visible.html"))
|
||||
el = self.driver.find_element_by_css_selector("p")
|
||||
self.assertTrue(el.is_displayed())
|
||||
|
||||
def test_visibility_hidden_hides_child_node(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/visibility-child.html"))
|
||||
parent = self.driver.find_element_by_css_selector("#parent")
|
||||
child = self.driver.find_element_by_css_selector("#child")
|
||||
|
||||
self.assertFalse(parent.is_displayed())
|
||||
self.assertFalse(child.is_displayed())
|
||||
|
||||
def test_visibility_hidden_hides_child_node_link(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/visibility-child-link.html"))
|
||||
parent = self.driver.find_element_by_css_selector("#parent")
|
||||
child = self.driver.find_element_by_css_selector("#child")
|
||||
|
||||
self.assertFalse(parent.is_displayed())
|
||||
self.assertFalse(child.is_displayed())
|
||||
|
||||
def test_visibility_hidden_hides_child_node_paragraph(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/visibility-child-paragraph.html"))
|
||||
parent = self.driver.find_element_by_css_selector("#parent")
|
||||
child = self.driver.find_element_by_css_selector("#child")
|
||||
|
||||
self.assertFalse(parent.is_displayed())
|
||||
self.assertFalse(child.is_displayed())
|
||||
|
||||
def test_visibility_hidden_on_child_takes_precedence(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/visibility-child-presedence.html"))
|
||||
child = self.driver.find_element_by_css_selector("#child")
|
||||
self.assertTrue(child.is_displayed())
|
||||
|
||||
def test_visibility_hidden_on_parent_takes_precedence_over_display_block(self):
|
||||
pass
|
||||
|
||||
def test_visibility_hidden_set_dynamically(self):
|
||||
pass
|
||||
|
||||
def test_should_show_element_not_visible_with_hidden_attribute(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/hidden.html"))
|
||||
singleHidden = self.driver.find_element_by_css_selector('#singleHidden')
|
||||
self.assertFalse(singleHidden.is_displayed())
|
||||
|
||||
def test_should_show_element_not_visible_when_parent_element_has_hidden_attribute(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/hidden.html"))
|
||||
child = self.driver.find_element_by_css_selector('#child')
|
||||
self.assertFalse(child.is_displayed())
|
||||
|
||||
|
||||
class VisibilityInteractionTest(base_test.WebDriverBaseTest):
|
||||
def test_input_hidden_is_unclickable(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/input-type-hidden-unclickable.html"))
|
||||
input = self.driver.find_element_by_css_selector("input")
|
||||
|
||||
with self.assertRaises(exceptions.ElementNotVisibleException):
|
||||
input.click()
|
||||
|
||||
def test_hidden_input_checkbox_is_untogglable(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/hidden-input-type-checkbox-untogglable.html"))
|
||||
checkbox = self.driver.find_element_by_css_selector("input")
|
||||
|
||||
with self.assertRaises(exceptions.ElementNotVisibleException):
|
||||
checkbox.click()
|
||||
|
||||
def test_typing_in_hidden_input_is_impossible(self):
|
||||
self.driver.get(self.webserver.where_is("element_state/res/hidden-input-type-text-writing.html"))
|
||||
textfield = self.driver.find_element_by_css_selector("input")
|
||||
|
||||
with self.assertRaises(exceptions.ElementNotVisibleException):
|
||||
textfield.send_keys("Koha is a popular Indian cheese")
|
||||
|
||||
|
||||
class OpacityTest(base_test.WebDriverBaseTest):
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -1,129 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
from selenium.webdriver.remote.webelement import WebElement
|
||||
|
||||
|
||||
class ExecuteScriptTest(base_test.WebDriverBaseTest):
|
||||
def test_ecmascript_translates_null_return_to_none(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
result = self.driver.execute_script("return null;")
|
||||
self.assertIsNone(result)
|
||||
|
||||
def test_ecmascript_translates_undefined_return_to_none(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
result = self.driver.execute_script("var undef; return undef;")
|
||||
self.assertIsNone(result)
|
||||
|
||||
def test_can_return_numbers_from_scripts(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
self.assertEquals(1, self.driver.execute_script("return 1;"))
|
||||
self.assertEquals(3.14, self.driver.execute_script("return 3.14;"))
|
||||
|
||||
def test_can_return_strings_from_scripts(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
self.assertEquals("hello, world!",
|
||||
self.driver.execute_script("return 'hello, world!'"))
|
||||
|
||||
def test_can_return_booleans_from_scripts(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
self.assertTrue(self.driver.execute_script("return true;"))
|
||||
self.assertFalse(self.driver.execute_script("return false;"))
|
||||
|
||||
def test_can_return_an_array_of_primitives(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
|
||||
result = self.driver.execute_script("return [1, false, null, 3.14]")
|
||||
self.assertListEqual([1, False, None, 3.14], result)
|
||||
|
||||
def test_can_return_nested_arrays(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
result = self.driver.execute_script("return [[1, 2, [3]]]")
|
||||
|
||||
self.assertIsInstance(result, list)
|
||||
self.assertEquals(1, len(result))
|
||||
|
||||
result = result[0]
|
||||
self.assertListEqual([1, 2], result[:2])
|
||||
self.assertListEqual([3], result[2])
|
||||
|
||||
def test_can_return_object_literals(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
|
||||
result = self.driver.execute_script("return {}")
|
||||
self.assertDictEqual({}, result)
|
||||
|
||||
result = self.driver.execute_script("return {a: 1, b: false, c: null}")
|
||||
self.assertDictEqual({
|
||||
"a": 1,
|
||||
"b": False,
|
||||
"c": None
|
||||
}, result)
|
||||
|
||||
def test_can_return_complex_object_literals(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
result = self.driver.execute_script("return {a:{b: 'hello'}}")
|
||||
self.assertIsInstance(result, dict)
|
||||
self.assertIsInstance(result['a'], dict)
|
||||
self.assertDictEqual({"b": "hello"}, result["a"])
|
||||
|
||||
def test_dom_element_return_value_is_translated_to_a_web_element(self):
|
||||
self.driver.get(self.webserver.where_is(
|
||||
"javascript/res/return_document_body.html"))
|
||||
|
||||
result = self.driver.execute_script("return document.body")
|
||||
self.assertEquals(result.text, "Hello, world!")
|
||||
|
||||
def test_return_an_array_of_dom_elements(self):
|
||||
self.driver.get(self.webserver.where_is(
|
||||
"javascript/res/return_array_of_dom_elements.html"))
|
||||
|
||||
result = self.driver.execute_script(
|
||||
"var nodes = document.getElementsByTagName('div');"
|
||||
"return [nodes[0], nodes[1]]")
|
||||
|
||||
self.assertIsInstance(result, list)
|
||||
self.assertEquals(2, len(result))
|
||||
self.assertEquals("a", result[0].text)
|
||||
self.assertEquals("b", result[1].text)
|
||||
|
||||
def test_node_list_return_value_is_translated_to_list_of_web_elements(self):
|
||||
self.driver.get(self.webserver.where_is(
|
||||
"javascript/res/return_array_of_dom_elements.html"))
|
||||
|
||||
result = self.driver.execute_script(
|
||||
"return document.getElementsByTagName('div');")
|
||||
|
||||
self.assertIsInstance(result, list)
|
||||
self.assertEquals(2, len(result))
|
||||
self.assertEquals("a", result[0].text)
|
||||
self.assertEquals("b", result[1].text)
|
||||
|
||||
def test_return_object_literal_with_dom_element_property(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
result = self.driver.execute_script("return {a: document.body}")
|
||||
self.assertIsInstance(result, dict)
|
||||
self.assertEquals("body", result["a"].tag_name)
|
||||
|
||||
def test_scripts_execute_in_anonymous_function_and_do_not_pollute_global_scope(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
self.driver.execute_script("var x = 1;")
|
||||
self.assertEquals("undefined", self.driver.execute_script("return typeof x;"));
|
||||
|
||||
def test_scripts_can_modify_context_window_object(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
self.driver.execute_script("window.x = 1;")
|
||||
self.assertEquals("number", self.driver.execute_script("return typeof x;"));
|
||||
self.assertEquals(1, self.driver.execute_script("return x;"));
|
||||
|
||||
def test_that_ecmascript_returns_document_title(self):
|
||||
self.driver.get(self.webserver.where_is("javascript/res/execute_script_test.html"))
|
||||
result = self.driver.execute_script("return document.title;")
|
||||
self.assertEquals("executeScript test", result)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -1,2 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<title>executeScript test</title>
|
|
@ -1,3 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<div id="one">a</div>
|
||||
<div id="two">b</div>
|
|
@ -1,2 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<div>Hello, world!</div>
|
|
@ -1,3 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<div id="one">a</div>
|
||||
<div id="two">b</div>
|
|
@ -1,26 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
from selenium.common import exceptions
|
||||
from selenium.webdriver.support import wait
|
||||
|
||||
|
||||
class AlertsQuitTest(base_test.WebDriverBaseTest):
|
||||
def setUp(self):
|
||||
self.wait = wait.WebDriverWait(self.driver, 5, ignored_exceptions=[exceptions.NoAlertPresentException])
|
||||
self.driver.get(self.webserver.where_is('modal/res/alerts.html'))
|
||||
|
||||
def test_can_quit_when_an_alert_is_present(self):
|
||||
self.driver.find_element_by_css_selector('#alert').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
self.driver.quit()
|
||||
with self.assertRaises(Exception):
|
||||
alert.accept()
|
||||
AlertsQuitTest.driver = None
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
|
@ -1,148 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
from selenium.common import exceptions
|
||||
from selenium.webdriver.support import wait
|
||||
|
||||
class AlertsTest(base_test.WebDriverBaseTest):
|
||||
def setUp(self):
|
||||
self.wait = wait.WebDriverWait(self.driver, 5, ignored_exceptions = [exceptions.NoAlertPresentException])
|
||||
self.driver.get(self.webserver.where_is('modal/res/alerts.html'))
|
||||
|
||||
def tearDown(self):
|
||||
try:
|
||||
self.driver.switch_to_alert().dismiss()
|
||||
except exceptions.NoAlertPresentException:
|
||||
pass
|
||||
|
||||
# Alerts
|
||||
def test_should_allow_user_to_accept_an_alert(self):
|
||||
self.driver.find_element_by_css_selector('#alert').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.accept()
|
||||
self.driver.current_url
|
||||
|
||||
def test_should_allow_user_to_accept_an_alert_with_no_text(self):
|
||||
self.driver.find_element_by_css_selector('#empty-alert').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.accept()
|
||||
self.driver.current_url
|
||||
|
||||
def test_should_allow_user_to_dismiss_an_alert(self):
|
||||
self.driver.find_element_by_css_selector('#alert').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.dismiss()
|
||||
self.driver.current_url
|
||||
|
||||
def test_should_allow_user_to_get_text_of_an_alert(self):
|
||||
self.driver.find_element_by_css_selector('#alert').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.text
|
||||
alert.accept()
|
||||
self.assertEquals('cheese', value)
|
||||
|
||||
def test_setting_the_value_of_an_alert_throws(self):
|
||||
self.driver.find_element_by_css_selector('#alert').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
with self.assertRaises(exceptions.ElementNotVisibleException):
|
||||
alert.send_keys('cheese')
|
||||
alert.accept()
|
||||
|
||||
def test_alert_should_not_allow_additional_commands_if_dismissed(self):
|
||||
self.driver.find_element_by_css_selector('#alert').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.accept()
|
||||
with self.assertRaises(exceptions.NoAlertPresentException):
|
||||
alert.text
|
||||
|
||||
# Prompts
|
||||
def test_should_allow_user_to_accept_a_prompt(self):
|
||||
self.driver.find_element_by_css_selector('#prompt').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.accept()
|
||||
self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == '')
|
||||
|
||||
def test_should_allow_user_to_dismiss_a_prompt(self):
|
||||
self.driver.find_element_by_css_selector('#prompt').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.dismiss()
|
||||
self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'null')
|
||||
|
||||
def test_should_allow_user_to_set_the_value_of_a_prompt(self):
|
||||
self.driver.find_element_by_css_selector('#prompt').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.send_keys('cheese')
|
||||
alert.accept()
|
||||
self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'cheese')
|
||||
|
||||
def test_should_allow_user_to_get_text_of_a_prompt(self):
|
||||
self.driver.find_element_by_css_selector('#prompt').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.text
|
||||
alert.accept()
|
||||
self.assertEquals('Enter something', value)
|
||||
|
||||
def test_prompt_should_not_allow_additional_commands_if_dismissed(self):
|
||||
self.driver.find_element_by_css_selector('#prompt').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.accept()
|
||||
with self.assertRaises(exceptions.NoAlertPresentException):
|
||||
alert.text
|
||||
|
||||
def test_prompt_should_use_default_value_if_no_keys_sent(self):
|
||||
self.driver.find_element_by_css_selector('#prompt-with-default').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.accept()
|
||||
self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'This is a default value')
|
||||
|
||||
def test_prompt_should_have_null_value_if_dismissed(self):
|
||||
self.driver.find_element_by_css_selector('#prompt-with-default').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.dismiss()
|
||||
self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'null')
|
||||
|
||||
# Confirmations
|
||||
def test_should_allow_user_to_accept_a_confirm(self):
|
||||
self.driver.find_element_by_css_selector('#confirm').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.accept()
|
||||
self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'true')
|
||||
|
||||
def test_should_allow_user_to_dismiss_a_confirm(self):
|
||||
self.driver.find_element_by_css_selector('#confirm').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.dismiss()
|
||||
self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'false')
|
||||
|
||||
def test_setting_the_value_of_a_confirm_throws(self):
|
||||
self.driver.find_element_by_css_selector('#confirm').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
with self.assertRaises(exceptions.ElementNotVisibleException):
|
||||
alert.send_keys('cheese')
|
||||
alert.accept()
|
||||
|
||||
def test_should_allow_user_to_get_text_of_a_confirm(self):
|
||||
self.driver.find_element_by_css_selector('#confirm').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.text
|
||||
alert.accept()
|
||||
self.assertEquals('cheese', value)
|
||||
|
||||
def test_confirm_should_not_allow_additional_commands_if_dismissed(self):
|
||||
self.driver.find_element_by_css_selector('#confirm').click()
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
alert.accept()
|
||||
with self.assertRaises(exceptions.NoAlertPresentException):
|
||||
alert.text
|
||||
|
||||
"""
|
||||
def test_switch_to_missing_alert_fails(self):
|
||||
with self.assertRaises(exceptions.NoAlertPresentException):
|
||||
self.driver.switch_to_alert()
|
||||
"""
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
|
@ -1,53 +0,0 @@
|
|||
<html>
|
||||
<!-- Padding to account for small screens of mobile devices -->
|
||||
<style>
|
||||
p {margin-top:48px;}
|
||||
</style>
|
||||
<head>
|
||||
<title>Testing Alerts</title>
|
||||
|
||||
<script type="text/javascript">
|
||||
function setInnerText(id, value) {
|
||||
document.getElementById(id).innerHTML = '<p>' + value + '</p>';
|
||||
}
|
||||
|
||||
function displayPrompt() {
|
||||
setInnerText('text', prompt('Enter something'));
|
||||
}
|
||||
|
||||
function displayPromptWithDefault() {
|
||||
setInnerText('text', prompt('Enter something', 'This is a default value'));
|
||||
}
|
||||
|
||||
function displayTwoPrompts() {
|
||||
setInnerText('text1', prompt('First'));
|
||||
setInnerText('text2', prompt('Second'));
|
||||
}
|
||||
|
||||
function displayConfirm() {
|
||||
setInnerText('text', confirm('cheese'));
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>Testing Alerts and Stuff</h1>
|
||||
|
||||
<p>This tests alerts: <a href="#" id="alert" onclick="alert('cheese');">click me</a></p>
|
||||
|
||||
<p>This tests alerts: <a href="#" id="empty-alert" onclick="alert('');">click me</a></p>
|
||||
|
||||
<p>Let's make the <a href="#" id="prompt" onclick="displayPrompt();">prompt happen</a></p>
|
||||
|
||||
<p>Let's make the <a href="#" id="prompt-with-default" onclick="displayPromptWithDefault();">prompt with default happen</a></p>
|
||||
|
||||
<p>Let's make TWO <a href="#" id="double-prompt" onclick="displayTwoPrompts();">prompts happen</a></p>
|
||||
|
||||
<p>This tests confirm: <a href="#" id="confirm" onclick="displayConfirm();">test confirm</a></p>
|
||||
|
||||
<div id="text"></div>
|
||||
<div id="text1"></div>
|
||||
<div id="text2"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,42 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
import ConfigParser
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
from selenium.common import exceptions
|
||||
from wptserve import server
|
||||
from wptserve.router import any_method
|
||||
from wptserve.handlers import basic_auth_handler
|
||||
|
||||
class WebDriverAuthTest(unittest.TestCase):
|
||||
|
||||
# Set up class to start HTTP Server that responds to
|
||||
# test URLs with various 401 responses
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.driver = base_test.create_driver()
|
||||
cls.webserver = server.WebTestHttpd(routes=[(any_method, "*", basic_auth_handler)])
|
||||
cls.webserver.start()
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
cls.driver.quit()
|
||||
cls.webserver.stop()
|
||||
|
||||
# Test that when 401 is seen by browser, a WebDriver response is still sent
|
||||
def test_response_401_auth_basic(self):
|
||||
page = self.webserver.get_url('navigation/res/authenticated.html')
|
||||
self.driver.set_page_load_timeout(5)
|
||||
try:
|
||||
self.driver.get( page )
|
||||
# if we got a responses instead of timeout, that's success
|
||||
self.assertTrue(True)
|
||||
except exceptions.TimeoutException:
|
||||
self.fail("Did not get response from browser.")
|
||||
except:
|
||||
self.fail("Unexpected failure. Please investigate.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -1,24 +0,0 @@
|
|||
import unittest
|
||||
import sys
|
||||
import os
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
|
||||
class ForwardTest(base_test.WebDriverBaseTest):
|
||||
# Get a static page that must be the same upon refresh
|
||||
def test_forward(self):
|
||||
self.driver.get(self.webserver.where_is('navigation/res/forwardStart.html'))
|
||||
self.driver.get(self.webserver.where_is('navigation/res/forwardNext.html'))
|
||||
nextbody = self.driver.find_element_by_css_selector("body").text
|
||||
self.driver.back()
|
||||
currbody = self.driver.find_element_by_css_selector("body").text
|
||||
self.assertNotEqual(nextbody, currbody)
|
||||
self.driver.forward()
|
||||
currbody = self.driver.find_element_by_css_selector("body").text
|
||||
self.assertEqual(nextbody, currbody)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
|
@ -1,20 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
|
||||
class ForwardToNothingTest(base_test.WebDriverBaseTest):
|
||||
# Get a static page that must be the same upon refresh
|
||||
def test_forwardToNothing(self):
|
||||
self.driver.get(self.webserver.where_is('navigation/forwardStart.html'))
|
||||
body = self.driver.find_element_by_css_selector("body").text
|
||||
self.driver.forward()
|
||||
currbody = self.driver.find_element_by_css_selector("body").text
|
||||
self.assertEqual(body, currbody)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
|
@ -1,60 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
|
||||
class GetFromHttpTest(base_test.WebDriverBaseTest):
|
||||
def testGetUrlWithNoRedirectionOverHttp(self):
|
||||
page = self.webserver.where_is('navigation/res/empty.html')
|
||||
self.driver.get(page)
|
||||
url = self.driver.current_url
|
||||
self.assertEquals(page, url)
|
||||
|
||||
|
||||
def testGetWillFollowTheLocationHeader(self):
|
||||
page = self.webserver.where_is('navigation/redirect')
|
||||
self.driver.get(page)
|
||||
expected = self.webserver.where_is('navigation/res/empty.html')
|
||||
url = self.driver.current_url
|
||||
self.assertEquals(expected, url)
|
||||
|
||||
|
||||
def testGetWillFollowMetaRefreshThatRefreshesInstantly(self):
|
||||
page = self.webserver.where_is('navigation/res/instant-meta-redirect.html')
|
||||
self.driver.get(page)
|
||||
expected = self.webserver.where_is('navigation/res/empty.html')
|
||||
url = self.driver.current_url
|
||||
self.assertEquals(expected, url)
|
||||
|
||||
|
||||
def testGetWillFollowMetaRefreshThatRefreshesAfterOneSecond(self):
|
||||
page = self.webserver.where_is('navigation/res/1s-meta-redirect.html')
|
||||
self.driver.get(page)
|
||||
expected = self.webserver.where_is('navigation/res/empty.html')
|
||||
url = self.driver.current_url
|
||||
self.assertEquals(expected, url)
|
||||
|
||||
|
||||
def testGetWillNotFollowMetaRefreshThatRefreshesAfterMoreThanOneSecond(self):
|
||||
page = self.webserver.where_is('navigation/res/60s-meta-redirect.html')
|
||||
self.driver.get(page)
|
||||
url = self.driver.current_url
|
||||
self.assertEquals(page, url)
|
||||
|
||||
|
||||
def testGetFragmentInCurrentDocumentDoesNotReloadPage(self):
|
||||
page = self.webserver.where_is("navigation/res/fragment.html")
|
||||
fragment_page = "%s#%s" % (page, "fragment")
|
||||
|
||||
self.driver.get(page)
|
||||
self.driver.execute_script("state = true")
|
||||
|
||||
self.driver.get(fragment_page)
|
||||
self.assertEquals(True, self.driver.execute_script("return state"))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
|
@ -1,28 +0,0 @@
|
|||
import BaseHTTPServer
|
||||
import os
|
||||
import ssl
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
|
||||
here = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
||||
class InvalidCertTest(base_test.WebDriverBaseTest):
|
||||
def testCanNavigateToSiteWithSelfSignedCert(self):
|
||||
self.webserver.httpd.socket = ssl.wrap_socket(
|
||||
self.webserver.httpd.socket,
|
||||
certfile=os.path.join(here, 'res/self-signed.key'),
|
||||
server_side=True)
|
||||
expected = self.webserver.where_is(
|
||||
'navigation/res/empty.html').replace('http:', 'https:', 1)
|
||||
|
||||
self.driver.get(expected)
|
||||
self.assertEquals(expected, self.driver.current_url)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
|
@ -1,27 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
|
||||
class RefreshPageTest(base_test.WebDriverBaseTest):
|
||||
# Get a static page that must be the same upon refresh
|
||||
def test_refreshPage(self):
|
||||
self.driver.get(self.webserver.where_is('navigation/res/refreshPageStatic.html'))
|
||||
body = self.driver.find_element_by_css("body").text
|
||||
self.driver.execute_script("document.getElementById('body').innerHTML=''")
|
||||
self.driver.refresh()
|
||||
newbody = self.driver.find_element_by_css("body").text
|
||||
self.assertEqual(body, newbody)
|
||||
|
||||
self.driver.get(self.webserver.where_is('navigation/res/refreshPageDynamic.html'))
|
||||
body = self.driver.find_element_by_css("body").text
|
||||
self.driver.refresh()
|
||||
newbody = self.driver.find_element_by_css("body").text
|
||||
self.assertNotEqual(body, newbody)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
|
@ -1,27 +0,0 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
|
||||
class RefreshPageTest(base_test.WebDriverBaseTest):
|
||||
# Get a static page that must be the same upon refresh
|
||||
def test_refreshPage(self):
|
||||
self.driver.get(self.webserver.where_is('navigation/res/refreshPageStatic.html'))
|
||||
body = self.driver.find_element_by_css_selector("body").text
|
||||
self.driver.execute_script("document.getElementById('body').innerHTML=''")
|
||||
self.driver.refresh()
|
||||
newbody = self.driver.find_element_by_css_selector("body").text
|
||||
self.assertEqual(body, newbody)
|
||||
|
||||
self.driver.get(self.webserver.where_is('navigation/res/refreshPageDynamic.html'))
|
||||
body = self.driver.find_element_by_css_selector("body").text
|
||||
self.driver.refresh()
|
||||
newbody = self.driver.find_element_by_css_selector("body").text
|
||||
self.assertNotEqual(body, newbody)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
|
@ -1,4 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Refresh" content="1; URL=empty.html">
|
||||
<title>meta-redirect</title>
|
|
@ -1,4 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Refresh" content="60; URL=empty.html">
|
||||
<title>meta-redirect</title>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue