Skip to content

Commit 0eb286a

Browse files
committed
[py] do not allow Select class to work with disabled selects
1 parent f207270 commit 0eb286a

File tree

2 files changed

+9
-31
lines changed

2 files changed

+9
-31
lines changed

py/selenium/webdriver/support/select.py

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ def __init__(self, webelement) -> None:
3737
raise UnexpectedTagNameException(
3838
"Select only works on <select> elements, not on <%s>" %
3939
webelement.tag_name)
40+
if not webelement.is_enabled():
41+
raise NotImplementedError("Select element is disabled and may not be used.")
4042
self._el = webelement
4143
multi = self._el.get_dom_attribute("multiple")
4244
self.is_multiple = multi and multi != "false"

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

+7-31
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,6 @@ def test_select_by_index_single(driver, pages):
4141
assert sel.first_selected_option.text == select['values'][x]
4242

4343

44-
@pytest.mark.xfail_firefox(reason='https://bugzilla.mozilla.org/show_bug.cgi?id=1429403')
45-
@pytest.mark.xfail_remote
46-
def test_select_disabled_by_index(driver, pages):
47-
pages.load("formPage.html")
48-
sel = Select(driver.find_element(By.NAME, disabledSelect['name']))
49-
selected = sel.first_selected_option
50-
sel.select_by_index(1)
51-
assert selected == sel.first_selected_option
52-
53-
5444
def test_select_by_value_single(driver, pages):
5545
pages.load("formPage.html")
5646
for select in [singleSelectValues1]:
@@ -60,16 +50,6 @@ def test_select_by_value_single(driver, pages):
6050
assert sel.first_selected_option.text == select['values'][x]
6151

6252

63-
@pytest.mark.xfail_firefox(reason='https://bugzilla.mozilla.org/show_bug.cgi?id=1429403')
64-
@pytest.mark.xfail_remote
65-
def test_select_disabled_by_value(driver, pages):
66-
pages.load("formPage.html")
67-
sel = Select(driver.find_element(By.NAME, disabledSelect['name']))
68-
selected = sel.first_selected_option
69-
sel.select_by_value('bar')
70-
assert selected == sel.first_selected_option
71-
72-
7353
def test_select_by_visible_text_single(driver, pages):
7454
pages.load("formPage.html")
7555

@@ -97,16 +77,6 @@ def test_select_by_visible_text_single(driver, pages):
9777
# assert sel.first_selected_option.text == select['values'][x]
9878

9979

100-
@pytest.mark.xfail_firefox(reason='https://bugzilla.mozilla.org/show_bug.cgi?id=1429403')
101-
@pytest.mark.xfail_remote
102-
def test_select_disabled_by_visible_text(driver, pages):
103-
pages.load("formPage.html")
104-
sel = Select(driver.find_element(By.NAME, disabledSelect['name']))
105-
selected = sel.first_selected_option
106-
sel.select_by_visible_text('Bar')
107-
assert selected == sel.first_selected_option
108-
109-
11080
def test_select_by_index_multiple(driver, pages):
11181
pages.load("formPage.html")
11282

@@ -247,7 +217,7 @@ def test_get_options(driver, pages):
247217

248218
def test_get_all_selected_options_single(driver, pages):
249219
pages.load("formPage.html")
250-
for select in [singleSelectValues1, singleSelectValues2, disabledSelect]:
220+
for select in [singleSelectValues1, singleSelectValues2]:
251221
opts = Select(driver.find_element(By.NAME, select['name'])).all_selected_options
252222
assert len(opts) == 1
253223
assert opts[0].text == select['values'][0]
@@ -284,6 +254,12 @@ def test_raises_exception_for_invalid_tag_name(driver, pages):
284254
Select(driver.find_element(By.TAG_NAME, "div"))
285255

286256

257+
def test_raises_exception_for_disabled_element(driver, pages):
258+
pages.load("formPage.html")
259+
with pytest.raises(NotImplementedError):
260+
Select(driver.find_element(By.NAME, disabledSelect["name"]))
261+
262+
287263
def test_deselect_by_index_non_existent(driver, pages):
288264
pages.load("formPage.html")
289265
for select in [multiSelectValues1, multiSelectValues2]:

0 commit comments

Comments
 (0)