Path: blob/trunk/py/test/selenium/webdriver/common/api_example_tests.py
1865 views
# Licensed to the Software Freedom Conservancy (SFC) under one1# or more contributor license agreements. See the NOTICE file2# distributed with this work for additional information3# regarding copyright ownership. The SFC licenses this file4# to you under the Apache License, Version 2.0 (the5# "License"); you may not use this file except in compliance6# with the License. You may obtain a copy of the License at7#8# http://www.apache.org/licenses/LICENSE-2.09#10# Unless required by applicable law or agreed to in writing,11# software distributed under the License is distributed on an12# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY13# KIND, either express or implied. See the License for the14# specific language governing permissions and limitations15# under the License.1617import pytest1819from selenium.common.exceptions import NoSuchElementException20from selenium.webdriver.common.by import By21from selenium.webdriver.support import expected_conditions as EC22from selenium.webdriver.support.wait import WebDriverWait232425def test_get_title(driver, pages):26pages.load("simpleTest.html")27title = driver.title28assert "Hello WebDriver" == title293031def test_get_current_url(driver, pages, webserver):32pages.load("simpleTest.html")33url = driver.current_url34assert webserver.where_is("simpleTest.html") == url353637def test_find_element_by_xpath(driver, pages):38pages.load("simpleTest.html")39elem = driver.find_element(By.XPATH, "//h1")40assert "Heading" == elem.text414243def test_find_element_by_xpath_throw_no_such_element_exception(driver, pages):44pages.load("simpleTest.html")45with pytest.raises(NoSuchElementException):46driver.find_element(By.XPATH, "//h4")474849def test_find_elements_by_xpath(driver, pages):50pages.load("nestedElements.html")51elems = driver.find_elements(By.XPATH, "//option")52assert 48 == len(elems)53assert "One" == elems[0].get_attribute("value")545556def test_find_elements_by_name(driver, pages):57pages.load("xhtmlTest.html")58elem = driver.find_element(By.NAME, "windowOne")59assert "Open new window" == elem.text606162def test_find_elements_by_name_in_element_context(driver, pages):63pages.load("nestedElements.html")64elem = driver.find_element(By.NAME, "form2")65sub_elem = elem.find_element(By.NAME, "selectomatic")66assert "2" == sub_elem.get_attribute("id")676869def test_find_elements_by_link_text_in_element_context(driver, pages):70pages.load("nestedElements.html")71elem = driver.find_element(By.NAME, "div1")72sub_elem = elem.find_element(By.LINK_TEXT, "hello world")73assert "link1" == sub_elem.get_attribute("name")747576def test_find_element_by_id_in_element_context(driver, pages):77pages.load("nestedElements.html")78elem = driver.find_element(By.NAME, "form2")79sub_elem = elem.find_element(By.ID, "2")80assert "selectomatic" == sub_elem.get_attribute("name")818283def test_find_element_by_xpath_in_element_context(driver, pages):84pages.load("nestedElements.html")85elem = driver.find_element(By.NAME, "form2")86sub_elem = elem.find_element(By.XPATH, "select")87assert "2" == sub_elem.get_attribute("id")888990def test_find_element_by_xpath_in_element_context_not_found(driver, pages):91pages.load("nestedElements.html")92elem = driver.find_element(By.NAME, "form2")93with pytest.raises(NoSuchElementException):94elem.find_element(By.XPATH, "div")959697def test_should_be_able_to_enter_data_into_form_fields(driver, pages):98pages.load("xhtmlTest.html")99elem = driver.find_element(By.XPATH, "//form[@name='someForm']/input[@id='username']")100elem.clear()101elem.send_keys("some text")102elem = driver.find_element(By.XPATH, "//form[@name='someForm']/input[@id='username']")103assert "some text" == elem.get_attribute("value")104105106def test_find_element_by_tag_name(driver, pages):107pages.load("simpleTest.html")108elems = driver.find_elements(By.TAG_NAME, "div")109num_by_xpath = len(driver.find_elements(By.XPATH, "//div"))110assert num_by_xpath == len(elems)111elems = driver.find_elements(By.TAG_NAME, "iframe")112assert 0 == len(elems)113114115def test_find_element_by_tag_name_within_element(driver, pages):116pages.load("simpleTest.html")117div = driver.find_element(By.ID, "multiline")118elems = div.find_elements(By.TAG_NAME, "p")119assert len(elems) == 1120121122def test_switch_frame_by_name(driver, pages):123pages.load("frameset.html")124driver.switch_to.frame(driver.find_element(By.NAME, "third"))125checkbox = driver.find_element(By.ID, "checky")126checkbox.click()127checkbox.submit()128129130def test_is_enabled(driver, pages):131pages.load("formPage.html")132elem = driver.find_element(By.XPATH, "//input[@id='working']")133assert elem.is_enabled()134elem = driver.find_element(By.XPATH, "//input[@id='notWorking']")135assert not elem.is_enabled()136137138def test_is_selected_and_toggle(driver, pages):139pages.load("formPage.html")140elem = driver.find_element(By.ID, "multi")141option_elems = elem.find_elements(By.XPATH, "option")142assert option_elems[0].is_selected()143option_elems[0].click()144assert not option_elems[0].is_selected()145option_elems[0].click()146assert option_elems[0].is_selected()147assert option_elems[2].is_selected()148149150def test_navigate(driver, pages):151pages.load("formPage.html")152driver.find_element(By.ID, "imageButton").submit()153WebDriverWait(driver, 3).until(EC.title_is("We Arrive Here"))154driver.back()155assert "We Leave From Here" == driver.title156driver.forward()157assert "We Arrive Here" == driver.title158159160def test_get_attribute(driver, pages):161url = pages.url("xhtmlTest.html")162driver.get(url)163elem = driver.find_element(By.ID, "id1")164attr = elem.get_attribute("href")165assert f"{url}#" == attr166167168def test_get_implicit_attribute(driver, pages):169pages.load("nestedElements.html")170elems = driver.find_elements(By.XPATH, "//option")171assert len(elems) >= 3172for i, elem in enumerate(elems[:3]):173assert i == int(elem.get_attribute("index"))174175176def test_get_dom_attribute(driver, pages):177url = pages.url("formPage.html")178driver.get(url)179elem = driver.find_element(By.ID, "vsearchGadget")180attr = elem.get_dom_attribute("accesskey")181assert "4" == attr182183184def test_get_property(driver, pages):185url = pages.url("formPage.html")186driver.get(url)187elem = driver.find_element(By.ID, "withText")188prop = elem.get_property("value")189assert "Example text" == prop190191192def test_execute_simple_script(driver, pages):193pages.load("xhtmlTest.html")194title = driver.execute_script("return document.title;")195assert "XHTML Test Page" == title196197198def test_execute_script_and_return_element(driver, pages):199pages.load("xhtmlTest.html")200elem = driver.execute_script("return document.getElementById('id1');")201assert "WebElement" in str(type(elem))202203204def test_execute_script_with_args(driver, pages):205pages.load("xhtmlTest.html")206result = driver.execute_script("return arguments[0] == 'fish' ? 'fish' : 'not fish';", "fish")207assert "fish" == result208209210def test_execute_script_with_multiple_args(driver, pages):211pages.load("xhtmlTest.html")212result = driver.execute_script("return arguments[0] + arguments[1]", 1, 2)213assert 3 == result214215216def test_execute_script_with_element_args(driver, pages):217pages.load("javascriptPage.html")218button = driver.find_element(By.ID, "plainButton")219result = driver.execute_script(220"arguments[0]['flibble'] = arguments[0].getAttribute('id'); return arguments[0]['flibble'];", button221)222assert "plainButton" == result223224225def test_find_elements_by_partial_link_text(driver, pages):226pages.load("xhtmlTest.html")227elem = driver.find_element(By.PARTIAL_LINK_TEXT, "new window")228elem.click()229230231def test_is_element_displayed(driver, pages):232pages.load("javascriptPage.html")233visible = driver.find_element(By.ID, "displayed").is_displayed()234not_visible = driver.find_element(By.ID, "hidden").is_displayed()235assert visible236assert not not_visible237238239@pytest.mark.xfail_edge240@pytest.mark.xfail_firefox(reason="https://github.com/mozilla/geckodriver/issues/2224")241@pytest.mark.xfail_remote(reason="https://github.com/mozilla/geckodriver/issues/2224")242@pytest.mark.xfail_safari243def test_move_window_position(driver, pages):244pages.load("blank.html")245loc = driver.get_window_position()246# note can't test 0,0 since some OS's dont allow that location247# because of system toolbars248new_x = 50249new_y = 50250if loc["x"] == new_x:251new_x += 10252if loc["y"] == new_y:253new_y += 10254driver.set_window_position(new_x, new_y)255loc = driver.get_window_position()256assert loc["x"] == new_x257assert loc["y"] == new_y258259260@pytest.mark.xfail_edge(reason="Window does not resize")261def test_change_window_size(driver, pages):262pages.load("blank.html")263size = driver.get_window_size()264newSize = [600, 600]265if size["width"] == 600:266newSize[0] = 500267if size["height"] == 600:268newSize[1] = 500269driver.set_window_size(newSize[0], newSize[1])270size = driver.get_window_size()271assert size["width"] == newSize[0]272assert size["height"] == newSize[1]273274275@pytest.mark.xfail_ie(raises=AttributeError, reason="Logging API is no longer available")276@pytest.mark.xfail_firefox(raises=AttributeError, reason="Logging API is no longer available")277@pytest.mark.xfail_remote(raises=AttributeError, reason="Logging API is no longer available")278@pytest.mark.xfail_safari(raises=AttributeError, reason="Logging API is no longer available")279@pytest.mark.xfail_webkitgtk(raises=AttributeError, reason="Logging API is no longer available")280@pytest.mark.xfail_wpewebkit(raises=AttributeError, reason="Logging API is no longer available")281def test_get_log_types(driver, pages):282pages.load("blank.html")283assert isinstance(driver.log_types, list)284285286@pytest.mark.xfail_ie(raises=AttributeError, reason="Logging API is no longer available")287@pytest.mark.xfail_firefox(raises=AttributeError, reason="Logging API is no longer available")288@pytest.mark.xfail_remote(raises=AttributeError, reason="Logging API is no longer available")289@pytest.mark.xfail_safari(raises=AttributeError, reason="Logging API is no longer available")290@pytest.mark.xfail_webkitgtk(raises=AttributeError, reason="Logging API is no longer available")291@pytest.mark.xfail_wpewebkit()(raises=AttributeError, reason="Logging API is no longer available")292def test_get_log(driver, pages):293pages.load("blank.html")294for log_type in driver.log_types:295log = driver.get_log(log_type)296assert isinstance(log, list)297298299