Skip to content

Commit e2bbb54

Browse files
committed
[py] do not allow Select class to select disabled options
1 parent 0eb286a commit e2bbb54

2 files changed

Lines changed: 47 additions & 14 deletions

File tree

py/selenium/webdriver/support/select.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,8 @@ def deselect_by_visible_text(self, text):
207207

208208
def _set_selected(self, option) -> None:
209209
if not option.is_selected():
210+
if not option.is_enabled():
211+
raise NotImplementedError("You may not select a disabled option")
210212
option.click()
211213

212214
def _unset_selected(self, option) -> None:

py/test/selenium/webdriver/common/select_class_tests.py

Lines changed: 45 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
from selenium.webdriver.common.by import By
2525

2626
disabledSelect = {'name': 'no-select', 'values': ['Foo']}
27+
disabledSingleSelect = {'name': 'single_disabled', 'values': ['Enabled', 'Disabled']}
28+
disabledMultiSelect = {'name': 'multi_disabled', 'values': ['Enabled', 'Disabled']}
2729
singleSelectValues1 = {'name': 'selectomatic', 'values': ['One', 'Two', 'Four', 'Still learning how to count, apparently']}
2830
singleSelectValues2 = {'name': 'redirect', 'values': ['One', 'Two']}
2931
singleSelectValuesWithSpaces = {'name': 'select_with_spaces', 'values': ['One', 'Two', 'Four', 'Still learning how to count, apparently']}
@@ -41,6 +43,13 @@ def test_select_by_index_single(driver, pages):
4143
assert sel.first_selected_option.text == select['values'][x]
4244

4345

46+
def test_raises_exception_select_by_index_single_disabled(driver, pages):
47+
pages.load("formPage.html")
48+
sel = Select(driver.find_element(By.NAME, disabledSingleSelect['name']))
49+
with pytest.raises(NotImplementedError):
50+
sel.select_by_index(1)
51+
52+
4453
def test_select_by_value_single(driver, pages):
4554
pages.load("formPage.html")
4655
for select in [singleSelectValues1]:
@@ -50,6 +59,13 @@ def test_select_by_value_single(driver, pages):
5059
assert sel.first_selected_option.text == select['values'][x]
5160

5261

62+
def test_raises_exception_select_by_value_single_disabled(driver, pages):
63+
pages.load("formPage.html")
64+
sel = Select(driver.find_element(By.NAME, disabledSingleSelect['name']))
65+
with pytest.raises(NotImplementedError):
66+
sel.select_by_value(disabledSingleSelect['values'][1].lower())
67+
68+
5369
def test_select_by_visible_text_single(driver, pages):
5470
pages.load("formPage.html")
5571

@@ -61,20 +77,11 @@ def test_select_by_visible_text_single(driver, pages):
6177
assert sel.first_selected_option.text == select['values'][x]
6278

6379

64-
# @pytest.mark.xfail_chrome(
65-
# reason='https://bugs.chromium.org/p/chromedriver/issues/detail?id=822')
66-
# @pytest.mark.xfail_chromiumedge(
67-
# reason='https://bugs.chromium.org/p/chromedriver/issues/detail?id=822')
68-
# @pytest.mark.xfail_safari
69-
# def test_select_by_visible_text_should_normalize_spaces(driver, pages):
70-
# pages.load("formPage.html")
71-
72-
# for select in [singleSelectValuesWithSpaces]:
73-
# sel = Select(driver.find_element(By.NAME, select['name']))
74-
# for x in range(len(select['values'])):
75-
# print(select['values'][x])
76-
# sel.select_by_visible_text(select['values'][x])
77-
# assert sel.first_selected_option.text == select['values'][x]
80+
def test_raises_exception_select_by_text_single_disabled(driver, pages):
81+
pages.load("formPage.html")
82+
sel = Select(driver.find_element(By.NAME, disabledSingleSelect['name']))
83+
with pytest.raises(NotImplementedError):
84+
sel.select_by_visible_text(disabledSingleSelect['values'][1])
7885

7986

8087
def test_select_by_index_multiple(driver, pages):
@@ -91,6 +98,14 @@ def test_select_by_index_multiple(driver, pages):
9198
assert selected[j].text == select['values'][j]
9299

93100

101+
def test_raises_exception_select_by_index_multiple_disabled(driver, pages):
102+
pages.load("formPage.html")
103+
104+
sel = Select(driver.find_element(By.NAME, disabledMultiSelect['name']))
105+
with pytest.raises(NotImplementedError):
106+
sel.select_by_index(1)
107+
108+
94109
def test_select_by_value_multiple(driver, pages):
95110
pages.load("formPage.html")
96111

@@ -105,6 +120,14 @@ def test_select_by_value_multiple(driver, pages):
105120
assert selected[j].text == select['values'][j]
106121

107122

123+
def test_raises_exception_select_by_value_multiple_disabled(driver, pages):
124+
pages.load("formPage.html")
125+
126+
sel = Select(driver.find_element(By.NAME, disabledMultiSelect['name']))
127+
with pytest.raises(NotImplementedError):
128+
sel.select_by_value(disabledMultiSelect['values'][1].lower())
129+
130+
108131
def test_select_by_visible_text_multiple(driver, pages):
109132
pages.load("formPage.html")
110133

@@ -119,6 +142,14 @@ def test_select_by_visible_text_multiple(driver, pages):
119142
assert selected[j].text == select['values'][j]
120143

121144

145+
def test_raises_exception_select_by_text_multiple_disabled(driver, pages):
146+
pages.load("formPage.html")
147+
148+
sel = Select(driver.find_element(By.NAME, disabledMultiSelect['name']))
149+
with pytest.raises(NotImplementedError):
150+
sel.select_by_visible_text(disabledMultiSelect['values'][1])
151+
152+
122153
def test_deselect_all_single(driver, pages):
123154
pages.load("formPage.html")
124155
for select in [singleSelectValues1, singleSelectValues2]:

0 commit comments

Comments
 (0)