Path: blob/trunk/py/test/selenium/webdriver/common/select_class_tests.py
4011 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 NoSuchElementException, UnexpectedTagNameException20from selenium.webdriver.common.by import By21from selenium.webdriver.support.ui import Select2223disabledSelect = {"name": "no-select", "values": ["Foo"]}24disabledSingleSelect = {"name": "single_disabled", "values": ["Enabled", "Disabled"]}25disabledMultiSelect = {"name": "multi_disabled", "values": ["Enabled", "Disabled"]}26invisibleMultiSelect = {"id": "invisible_multi_select", "values": ["Apples", "Pears", "Oranges", "Lemons"]}27singleSelectValues1 = {28"name": "selectomatic",29"values": ["One", "Two", "Four", "Still learning how to count, apparently"],30}31singleSelectValues2 = {"name": "redirect", "values": ["One", "Two"]}32singleSelectValuesWithSpaces = {33"name": "select_with_spaces",34"values": ["One", "Two", "Four", "Still learning how to count, apparently"],35}36multiSelectValues1 = {"name": "multi", "values": ["Eggs", "Ham", "Sausages", "Onion gravy"]}37multiSelectValues2 = {"name": "select_empty_multiple", "values": ["select_1", "select_2", "select_3", "select_4"]}383940def test_select_by_index_single(driver, pages):41pages.load("formPage.html")4243for select in [singleSelectValues1]:44sel = Select(driver.find_element(By.NAME, select["name"]))45for x in range(len(select["values"])):46sel.select_by_index(x)47assert sel.first_selected_option.text == select["values"][x]484950@pytest.mark.xfail_safari(reason="options incorrectly reported as enabled")51def test_raises_exception_select_by_index_single_disabled(driver, pages):52pages.load("formPage.html")53sel = Select(driver.find_element(By.NAME, disabledSingleSelect["name"]))54with pytest.raises(NotImplementedError):55sel.select_by_index(1)565758def test_select_by_value_single(driver, pages):59pages.load("formPage.html")60for select in [singleSelectValues1]:61sel = Select(driver.find_element(By.NAME, select["name"]))62for x in range(len(select["values"])):63sel.select_by_value(select["values"][x].lower())64assert sel.first_selected_option.text == select["values"][x]656667@pytest.mark.xfail_safari(reason="options incorrectly reported as enabled")68def test_raises_exception_select_by_value_single_disabled(driver, pages):69pages.load("formPage.html")70sel = Select(driver.find_element(By.NAME, disabledSingleSelect["name"]))71with pytest.raises(NotImplementedError):72sel.select_by_value(disabledSingleSelect["values"][1].lower())737475def test_select_by_visible_text_single(driver, pages):76pages.load("formPage.html")7778for select in [singleSelectValues1]:79sel = Select(driver.find_element(By.NAME, select["name"]))80for x in range(len(select["values"])):81print(select["values"][x])82sel.select_by_visible_text(select["values"][x])83assert sel.first_selected_option.text == select["values"][x]848586@pytest.mark.xfail_safari(reason="options incorrectly reported as enabled")87def test_raises_exception_select_by_text_single_disabled(driver, pages):88pages.load("formPage.html")89sel = Select(driver.find_element(By.NAME, disabledSingleSelect["name"]))90with pytest.raises(NotImplementedError):91sel.select_by_visible_text(disabledSingleSelect["values"][1])929394def test_select_by_index_multiple(driver, pages):95pages.load("formPage.html")9697for select in [multiSelectValues1, multiSelectValues2]:98sel = Select(driver.find_element(By.NAME, select["name"]))99sel.deselect_all()100for x in range(len(select["values"])):101sel.select_by_index(x)102selected = sel.all_selected_options103assert len(selected) == x + 1104for j in range(len(selected)):105assert selected[j].text == select["values"][j]106107108@pytest.mark.xfail_safari(reason="options incorrectly reported as enabled")109def test_raises_exception_select_by_index_multiple_disabled(driver, pages):110pages.load("formPage.html")111112sel = Select(driver.find_element(By.NAME, disabledMultiSelect["name"]))113with pytest.raises(NotImplementedError):114sel.select_by_index(1)115116117def test_select_by_value_multiple(driver, pages):118pages.load("formPage.html")119120for select in [multiSelectValues1, multiSelectValues2]:121sel = Select(driver.find_element(By.NAME, select["name"]))122sel.deselect_all()123for x in range(len(select["values"])):124sel.select_by_value(select["values"][x].lower())125selected = sel.all_selected_options126assert len(selected) == x + 1127for j in range(len(selected)):128assert selected[j].text == select["values"][j]129130131@pytest.mark.xfail_safari(reason="options incorrectly reported as enabled")132def test_raises_exception_select_by_value_multiple_disabled(driver, pages):133pages.load("formPage.html")134135sel = Select(driver.find_element(By.NAME, disabledMultiSelect["name"]))136with pytest.raises(NotImplementedError):137sel.select_by_value(disabledMultiSelect["values"][1].lower())138139140def test_select_by_visible_text_multiple(driver, pages):141pages.load("formPage.html")142143for select in [multiSelectValues1, multiSelectValues2]:144sel = Select(driver.find_element(By.NAME, select["name"]))145sel.deselect_all()146for x in range(len(select["values"])):147sel.select_by_visible_text(select["values"][x])148selected = sel.all_selected_options149assert len(selected) == x + 1150for j in range(len(selected)):151assert selected[j].text == select["values"][j]152153154@pytest.mark.xfail_safari(reason="options incorrectly reported as enabled")155def test_raises_exception_select_by_text_multiple_disabled(driver, pages):156pages.load("formPage.html")157158sel = Select(driver.find_element(By.NAME, disabledMultiSelect["name"]))159with pytest.raises(NotImplementedError):160sel.select_by_visible_text(disabledMultiSelect["values"][1])161162163def test_raises_exception_select_by_text_multiple_hidden(driver, pages):164pages.load("formPage.html")165166sel = Select(driver.find_element(By.ID, invisibleMultiSelect["id"]))167for option in invisibleMultiSelect["values"]:168with pytest.raises(NoSuchElementException):169sel.select_by_visible_text(option)170171172def test_deselect_all_single(driver, pages):173pages.load("formPage.html")174for select in [singleSelectValues1, singleSelectValues2]:175with pytest.raises(NotImplementedError):176Select(driver.find_element(By.NAME, select["name"])).deselect_all()177178179def test_deselect_all_multiple(driver, pages):180pages.load("formPage.html")181for select in [multiSelectValues1, multiSelectValues2]:182sel = Select(driver.find_element(By.NAME, select["name"]))183sel.deselect_all()184assert len(sel.all_selected_options) == 0185186187def test_deselect_by_index_single(driver, pages):188pages.load("formPage.html")189for select in [singleSelectValues1, singleSelectValues2]:190with pytest.raises(NotImplementedError):191Select(driver.find_element(By.NAME, select["name"])).deselect_by_index(0)192193194def test_deselect_by_value_single(driver, pages):195pages.load("formPage.html")196for select in [singleSelectValues1, singleSelectValues2]:197with pytest.raises(NotImplementedError):198Select(driver.find_element(By.NAME, select["name"])).deselect_by_value(select["values"][0].lower())199200201def test_deselect_by_visible_text_single(driver, pages):202pages.load("formPage.html")203for select in [singleSelectValues1, singleSelectValues2]:204with pytest.raises(NotImplementedError):205Select(driver.find_element(By.NAME, select["name"])).deselect_by_visible_text(select["values"][0])206207208def test_deselect_by_index_multiple(driver, pages):209pages.load("formPage.html")210for select in [multiSelectValues1, multiSelectValues2]:211sel = Select(driver.find_element(By.NAME, select["name"]))212sel.deselect_all()213sel.select_by_index(0)214sel.select_by_index(1)215sel.select_by_index(2)216sel.select_by_index(3)217sel.deselect_by_index(1)218sel.deselect_by_index(3)219selected = sel.all_selected_options220assert len(selected) == 2221assert selected[0].text == select["values"][0]222assert selected[1].text == select["values"][2]223224225def test_deselect_by_value_multiple(driver, pages):226pages.load("formPage.html")227for select in [multiSelectValues1, multiSelectValues2]:228sel = Select(driver.find_element(By.NAME, select["name"]))229sel.deselect_all()230sel.select_by_index(0)231sel.select_by_index(1)232sel.select_by_index(2)233sel.select_by_index(3)234sel.deselect_by_value(select["values"][1].lower())235sel.deselect_by_value(select["values"][3].lower())236selected = sel.all_selected_options237assert len(selected) == 2238assert selected[0].text == select["values"][0]239assert selected[1].text == select["values"][2]240241242def test_deselect_by_visible_text_multiple(driver, pages):243pages.load("formPage.html")244for select in [multiSelectValues1, multiSelectValues2]:245sel = Select(driver.find_element(By.NAME, select["name"]))246sel.deselect_all()247sel.select_by_index(0)248sel.select_by_index(1)249sel.select_by_index(2)250sel.select_by_index(3)251sel.deselect_by_visible_text(select["values"][1])252sel.deselect_by_visible_text(select["values"][3])253selected = sel.all_selected_options254assert len(selected) == 2255assert selected[0].text == select["values"][0]256assert selected[1].text == select["values"][2]257258259def test_get_options(driver, pages):260pages.load("formPage.html")261for select in [singleSelectValues1, singleSelectValues2, multiSelectValues1, multiSelectValues2]:262opts = Select(driver.find_element(By.NAME, select["name"])).options263assert len(opts) == len(select["values"])264for i in range(len(opts)):265assert opts[i].text == select["values"][i]266267268def test_get_all_selected_options_single(driver, pages):269pages.load("formPage.html")270for select in [singleSelectValues1, singleSelectValues2, disabledSelect]:271opts = Select(driver.find_element(By.NAME, select["name"])).all_selected_options272assert len(opts) == 1273assert opts[0].text == select["values"][0]274275276def test_get_all_selected_options_multiple(driver, pages):277pages.load("formPage.html")278opts = Select(driver.find_element(By.NAME, multiSelectValues1["name"])).all_selected_options279assert len(opts) == 2280assert opts[0].text, multiSelectValues1["values"][0]281assert opts[1].text, multiSelectValues1["values"][2]282opts = Select(driver.find_element(By.NAME, multiSelectValues2["name"])).all_selected_options283assert len(opts) == 0284285286def test_get_first_selected_option_single(driver, pages):287pages.load("formPage.html")288for select in [singleSelectValues1, singleSelectValues2]:289opt = Select(driver.find_element(By.NAME, select["name"])).first_selected_option290assert opt.text == select["values"][0]291292293def test_get_first_selected_option_multiple(driver, pages):294pages.load("formPage.html")295opt = Select(driver.find_element(By.NAME, multiSelectValues1["name"])).first_selected_option296assert opt.text == multiSelectValues1["values"][0]297opt = Select(driver.find_element(By.NAME, multiSelectValues2["name"])).all_selected_options298assert len(opt) == 0299300301def test_raises_exception_for_invalid_tag_name(driver, pages):302pages.load("formPage.html")303with pytest.raises(UnexpectedTagNameException):304Select(driver.find_element(By.TAG_NAME, "div"))305306307def test_deselect_by_index_non_existent(driver, pages):308pages.load("formPage.html")309for select in [multiSelectValues1, multiSelectValues2]:310with pytest.raises(NoSuchElementException):311Select(driver.find_element(By.NAME, select["name"])).deselect_by_index(10)312313314def test_deselect_by_value_non_existent(driver, pages):315pages.load("formPage.html")316for select in [multiSelectValues1, multiSelectValues2]:317with pytest.raises(NoSuchElementException):318Select(driver.find_element(By.NAME, select["name"])).deselect_by_value("not there")319320321def test_deselect_by_text_non_existent(driver, pages):322pages.load("formPage.html")323for select in [multiSelectValues1, multiSelectValues2]:324with pytest.raises(NoSuchElementException):325Select(driver.find_element(By.NAME, select["name"])).deselect_by_visible_text("not there")326327328