"Fossies" - the Fresh Open Source Software Archive

Member "selenium-selenium-4.8.1/py/test/selenium/webdriver/common/select_class_tests.py" (17 Feb 2023, 12637 Bytes) of package /linux/www/selenium-selenium-4.8.1.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Python source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. See also the last Fossies "Diffs" side-by-side code changes report for "select_class_tests.py": 4.5.0_vs_4.6.0.

    1 # Licensed to the Software Freedom Conservancy (SFC) under one
    2 # or more contributor license agreements.  See the NOTICE file
    3 # distributed with this work for additional information
    4 # regarding copyright ownership.  The SFC licenses this file
    5 # to you under the Apache License, Version 2.0 (the
    6 # "License"); you may not use this file except in compliance
    7 # with the License.  You may obtain a copy of the License at
    8 #
    9 #   http://www.apache.org/licenses/LICENSE-2.0
   10 #
   11 # Unless required by applicable law or agreed to in writing,
   12 # software distributed under the License is distributed on an
   13 # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   14 # KIND, either express or implied.  See the License for the
   15 # specific language governing permissions and limitations
   16 # under the License.
   17 
   18 import pytest
   19 
   20 from selenium.common.exceptions import NoSuchElementException
   21 from selenium.common.exceptions import UnexpectedTagNameException
   22 from selenium.webdriver.common.by import By
   23 from selenium.webdriver.support.ui import Select
   24 
   25 disabledSelect = {"name": "no-select", "values": ["Foo"]}
   26 disabledSingleSelect = {"name": "single_disabled", "values": ["Enabled", "Disabled"]}
   27 disabledMultiSelect = {"name": "multi_disabled", "values": ["Enabled", "Disabled"]}
   28 singleSelectValues1 = {
   29     "name": "selectomatic",
   30     "values": ["One", "Two", "Four", "Still learning how to count, apparently"],
   31 }
   32 singleSelectValues2 = {"name": "redirect", "values": ["One", "Two"]}
   33 singleSelectValuesWithSpaces = {
   34     "name": "select_with_spaces",
   35     "values": ["One", "Two", "Four", "Still learning how to count, apparently"],
   36 }
   37 multiSelectValues1 = {"name": "multi", "values": ["Eggs", "Ham", "Sausages", "Onion gravy"]}
   38 multiSelectValues2 = {"name": "select_empty_multiple", "values": ["select_1", "select_2", "select_3", "select_4"]}
   39 
   40 
   41 def test_select_by_index_single(driver, pages):
   42     pages.load("formPage.html")
   43 
   44     for select in [singleSelectValues1]:
   45         sel = Select(driver.find_element(By.NAME, select["name"]))
   46         for x in range(len(select["values"])):
   47             sel.select_by_index(x)
   48             assert sel.first_selected_option.text == select["values"][x]
   49 
   50 
   51 def test_raises_exception_select_by_index_single_disabled(driver, pages):
   52     pages.load("formPage.html")
   53     sel = Select(driver.find_element(By.NAME, disabledSingleSelect["name"]))
   54     with pytest.raises(NotImplementedError):
   55         sel.select_by_index(1)
   56 
   57 
   58 def test_select_by_value_single(driver, pages):
   59     pages.load("formPage.html")
   60     for select in [singleSelectValues1]:
   61         sel = Select(driver.find_element(By.NAME, select["name"]))
   62         for x in range(len(select["values"])):
   63             sel.select_by_value(select["values"][x].lower())
   64             assert sel.first_selected_option.text == select["values"][x]
   65 
   66 
   67 def test_raises_exception_select_by_value_single_disabled(driver, pages):
   68     pages.load("formPage.html")
   69     sel = Select(driver.find_element(By.NAME, disabledSingleSelect["name"]))
   70     with pytest.raises(NotImplementedError):
   71         sel.select_by_value(disabledSingleSelect["values"][1].lower())
   72 
   73 
   74 def test_select_by_visible_text_single(driver, pages):
   75     pages.load("formPage.html")
   76 
   77     for select in [singleSelectValues1]:
   78         sel = Select(driver.find_element(By.NAME, select["name"]))
   79         for x in range(len(select["values"])):
   80             print(select["values"][x])
   81             sel.select_by_visible_text(select["values"][x])
   82             assert sel.first_selected_option.text == select["values"][x]
   83 
   84 
   85 def test_raises_exception_select_by_text_single_disabled(driver, pages):
   86     pages.load("formPage.html")
   87     sel = Select(driver.find_element(By.NAME, disabledSingleSelect["name"]))
   88     with pytest.raises(NotImplementedError):
   89         sel.select_by_visible_text(disabledSingleSelect["values"][1])
   90 
   91 
   92 def test_select_by_index_multiple(driver, pages):
   93     pages.load("formPage.html")
   94 
   95     for select in [multiSelectValues1, multiSelectValues2]:
   96         sel = Select(driver.find_element(By.NAME, select["name"]))
   97         sel.deselect_all()
   98         for x in range(len(select["values"])):
   99             sel.select_by_index(x)
  100             selected = sel.all_selected_options
  101             assert len(selected) == x + 1
  102             for j in range(len(selected)):
  103                 assert selected[j].text == select["values"][j]
  104 
  105 
  106 def test_raises_exception_select_by_index_multiple_disabled(driver, pages):
  107     pages.load("formPage.html")
  108 
  109     sel = Select(driver.find_element(By.NAME, disabledMultiSelect["name"]))
  110     with pytest.raises(NotImplementedError):
  111         sel.select_by_index(1)
  112 
  113 
  114 def test_select_by_value_multiple(driver, pages):
  115     pages.load("formPage.html")
  116 
  117     for select in [multiSelectValues1, multiSelectValues2]:
  118         sel = Select(driver.find_element(By.NAME, select["name"]))
  119         sel.deselect_all()
  120         for x in range(len(select["values"])):
  121             sel.select_by_value(select["values"][x].lower())
  122             selected = sel.all_selected_options
  123             assert len(selected) == x + 1
  124             for j in range(len(selected)):
  125                 assert selected[j].text == select["values"][j]
  126 
  127 
  128 def test_raises_exception_select_by_value_multiple_disabled(driver, pages):
  129     pages.load("formPage.html")
  130 
  131     sel = Select(driver.find_element(By.NAME, disabledMultiSelect["name"]))
  132     with pytest.raises(NotImplementedError):
  133         sel.select_by_value(disabledMultiSelect["values"][1].lower())
  134 
  135 
  136 def test_select_by_visible_text_multiple(driver, pages):
  137     pages.load("formPage.html")
  138 
  139     for select in [multiSelectValues1, multiSelectValues2]:
  140         sel = Select(driver.find_element(By.NAME, select["name"]))
  141         sel.deselect_all()
  142         for x in range(len(select["values"])):
  143             sel.select_by_visible_text(select["values"][x])
  144             selected = sel.all_selected_options
  145             assert len(selected) == x + 1
  146             for j in range(len(selected)):
  147                 assert selected[j].text == select["values"][j]
  148 
  149 
  150 def test_raises_exception_select_by_text_multiple_disabled(driver, pages):
  151     pages.load("formPage.html")
  152 
  153     sel = Select(driver.find_element(By.NAME, disabledMultiSelect["name"]))
  154     with pytest.raises(NotImplementedError):
  155         sel.select_by_visible_text(disabledMultiSelect["values"][1])
  156 
  157 
  158 def test_deselect_all_single(driver, pages):
  159     pages.load("formPage.html")
  160     for select in [singleSelectValues1, singleSelectValues2]:
  161         with pytest.raises(NotImplementedError):
  162             Select(driver.find_element(By.NAME, select["name"])).deselect_all()
  163 
  164 
  165 def test_deselect_all_multiple(driver, pages):
  166     pages.load("formPage.html")
  167     for select in [multiSelectValues1, multiSelectValues2]:
  168         sel = Select(driver.find_element(By.NAME, select["name"]))
  169         sel.deselect_all()
  170         assert len(sel.all_selected_options) == 0
  171 
  172 
  173 def test_deselect_by_index_single(driver, pages):
  174     pages.load("formPage.html")
  175     for select in [singleSelectValues1, singleSelectValues2]:
  176         with pytest.raises(NotImplementedError):
  177             Select(driver.find_element(By.NAME, select["name"])).deselect_by_index(0)
  178 
  179 
  180 def test_deselect_by_value_single(driver, pages):
  181     pages.load("formPage.html")
  182     for select in [singleSelectValues1, singleSelectValues2]:
  183         with pytest.raises(NotImplementedError):
  184             Select(driver.find_element(By.NAME, select["name"])).deselect_by_value(select["values"][0].lower())
  185 
  186 
  187 def test_deselect_by_visible_text_single(driver, pages):
  188     pages.load("formPage.html")
  189     for select in [singleSelectValues1, singleSelectValues2]:
  190         with pytest.raises(NotImplementedError):
  191             Select(driver.find_element(By.NAME, select["name"])).deselect_by_visible_text(select["values"][0])
  192 
  193 
  194 def test_deselect_by_index_multiple(driver, pages):
  195     pages.load("formPage.html")
  196     for select in [multiSelectValues1, multiSelectValues2]:
  197         sel = Select(driver.find_element(By.NAME, select["name"]))
  198         sel.deselect_all()
  199         sel.select_by_index(0)
  200         sel.select_by_index(1)
  201         sel.select_by_index(2)
  202         sel.select_by_index(3)
  203         sel.deselect_by_index(1)
  204         sel.deselect_by_index(3)
  205         selected = sel.all_selected_options
  206         assert len(selected) == 2
  207         assert selected[0].text == select["values"][0]
  208         assert selected[1].text == select["values"][2]
  209 
  210 
  211 def test_deselect_by_value_multiple(driver, pages):
  212     pages.load("formPage.html")
  213     for select in [multiSelectValues1, multiSelectValues2]:
  214         sel = Select(driver.find_element(By.NAME, select["name"]))
  215         sel.deselect_all()
  216         sel.select_by_index(0)
  217         sel.select_by_index(1)
  218         sel.select_by_index(2)
  219         sel.select_by_index(3)
  220         sel.deselect_by_value(select["values"][1].lower())
  221         sel.deselect_by_value(select["values"][3].lower())
  222         selected = sel.all_selected_options
  223         assert len(selected) == 2
  224         assert selected[0].text == select["values"][0]
  225         assert selected[1].text == select["values"][2]
  226 
  227 
  228 def test_deselect_by_visible_text_multiple(driver, pages):
  229     pages.load("formPage.html")
  230     for select in [multiSelectValues1, multiSelectValues2]:
  231         sel = Select(driver.find_element(By.NAME, select["name"]))
  232         sel.deselect_all()
  233         sel.select_by_index(0)
  234         sel.select_by_index(1)
  235         sel.select_by_index(2)
  236         sel.select_by_index(3)
  237         sel.deselect_by_visible_text(select["values"][1])
  238         sel.deselect_by_visible_text(select["values"][3])
  239         selected = sel.all_selected_options
  240         assert len(selected) == 2
  241         assert selected[0].text == select["values"][0]
  242         assert selected[1].text == select["values"][2]
  243 
  244 
  245 def test_get_options(driver, pages):
  246     pages.load("formPage.html")
  247     for select in [singleSelectValues1, singleSelectValues2, multiSelectValues1, multiSelectValues2]:
  248         opts = Select(driver.find_element(By.NAME, select["name"])).options
  249         assert len(opts) == len(select["values"])
  250         for i in range(len(opts)):
  251             assert opts[i].text == select["values"][i]
  252 
  253 
  254 def test_get_all_selected_options_single(driver, pages):
  255     pages.load("formPage.html")
  256     for select in [singleSelectValues1, singleSelectValues2, disabledSelect]:
  257         opts = Select(driver.find_element(By.NAME, select["name"])).all_selected_options
  258         assert len(opts) == 1
  259         assert opts[0].text == select["values"][0]
  260 
  261 
  262 def test_get_all_selected_options_multiple(driver, pages):
  263     pages.load("formPage.html")
  264     opts = Select(driver.find_element(By.NAME, multiSelectValues1["name"])).all_selected_options
  265     assert len(opts) == 2
  266     assert opts[0].text, multiSelectValues1["values"][0]
  267     assert opts[1].text, multiSelectValues1["values"][2]
  268     opts = Select(driver.find_element(By.NAME, multiSelectValues2["name"])).all_selected_options
  269     assert len(opts) == 0
  270 
  271 
  272 def test_get_first_selected_option_single(driver, pages):
  273     pages.load("formPage.html")
  274     for select in [singleSelectValues1, singleSelectValues2]:
  275         opt = Select(driver.find_element(By.NAME, select["name"])).first_selected_option
  276         assert opt.text == select["values"][0]
  277 
  278 
  279 def test_get_first_selected_option_multiple(driver, pages):
  280     pages.load("formPage.html")
  281     opt = Select(driver.find_element(By.NAME, multiSelectValues1["name"])).first_selected_option
  282     assert opt.text == multiSelectValues1["values"][0]
  283     opt = Select(driver.find_element(By.NAME, multiSelectValues2["name"])).all_selected_options
  284     assert len(opt) == 0
  285 
  286 
  287 def test_raises_exception_for_invalid_tag_name(driver, pages):
  288     pages.load("formPage.html")
  289     with pytest.raises(UnexpectedTagNameException):
  290         Select(driver.find_element(By.TAG_NAME, "div"))
  291 
  292 
  293 def test_deselect_by_index_non_existent(driver, pages):
  294     pages.load("formPage.html")
  295     for select in [multiSelectValues1, multiSelectValues2]:
  296         with pytest.raises(NoSuchElementException):
  297             Select(driver.find_element(By.NAME, select["name"])).deselect_by_index(10)
  298 
  299 
  300 def test_deselect_by_value_non_existent(driver, pages):
  301     pages.load("formPage.html")
  302     for select in [multiSelectValues1, multiSelectValues2]:
  303         with pytest.raises(NoSuchElementException):
  304             Select(driver.find_element(By.NAME, select["name"])).deselect_by_value("not there")
  305 
  306 
  307 def test_deselect_by_text_non_existent(driver, pages):
  308     pages.load("formPage.html")
  309     for select in [multiSelectValues1, multiSelectValues2]:
  310         with pytest.raises(NoSuchElementException):
  311             Select(driver.find_element(By.NAME, select["name"])).deselect_by_visible_text("not there")