fix: set_checkbox propagates click failure; coerce set_el_value; cover alerts/selects

This commit is contained in:
Mathew Sir Guest the best
2026-07-07 23:12:11 -06:00
parent c99b9509f4
commit 2adb7b2236
3 changed files with 164 additions and 15 deletions
+73
View File
@@ -223,3 +223,76 @@ class TestStaleness:
page = PlainPage(make_browser())
assert page.is_element_stale(StaleEl()) is True
class TestAlert:
def test_accept_alert_accepts_and_returns_text(self, monkeypatch):
browser = make_browser()
page = PlainPage(browser)
monkeypatch.setattr(page_mod, "WebDriverWait", MagicMock()) # until() won't raise
alert = browser.driver.switch_to.alert
alert.text = "confirm?"
assert page.accept_alert() == "confirm?"
alert.accept.assert_called_once_with()
def test_accept_alert_can_dismiss(self, monkeypatch):
browser = make_browser()
page = PlainPage(browser)
monkeypatch.setattr(page_mod, "WebDriverWait", MagicMock())
alert = browser.driver.switch_to.alert
alert.text = "confirm?"
page.accept_alert(accept=False)
alert.dismiss.assert_called_once_with()
def test_accept_alert_returns_false_when_no_alert(self, monkeypatch):
from selenium.common.exceptions import TimeoutException
page = PlainPage(make_browser())
wait = MagicMock()
wait.return_value.until.side_effect = TimeoutException()
monkeypatch.setattr(page_mod, "WebDriverWait", wait)
assert page.accept_alert(timeout=0) is False
class TestSelectHelpers:
def test_get_select_value(self):
select = MagicMock()
select.first_selected_option.get_attribute.return_value = "CO"
assert PlainPage(make_browser()).get_select_value(select) == "CO"
def test_get_select_value_null_returns_none(self):
assert PlainPage(make_browser()).get_select_value(None) is None
def test_set_select_value_by_value_including_zero(self):
# legacy `if value:` skipped a valid 0/"" — verify the fix
select = MagicMock()
assert PlainPage(make_browser()).set_select_value(select, value=0) is True
select.select_by_value.assert_called_once_with("0")
def test_set_select_value_by_text(self):
select = MagicMock()
assert PlainPage(make_browser()).set_select_value(select, text="Colorado") is True
select.select_by_visible_text.assert_called_once_with("Colorado")
class TestCheckboxAndCoercion:
def test_set_checkbox_returns_false_when_click_fails(self, monkeypatch):
page = PlainPage(make_browser())
el = make_element()
el.is_enabled.return_value = True
el.is_selected.return_value = False # needs toggling
monkeypatch.setattr(page, "click", lambda e: False) # click fails
assert page.set_checkbox(el, True) is False
def test_set_checkbox_disabled_returns_false(self):
page = PlainPage(make_browser())
el = make_element()
el.is_enabled.return_value = False
assert page.set_checkbox(el, True) is False
def test_set_el_value_coerces_non_str(self):
page = PlainPage(make_browser())
el = make_element()
el.get_attribute.return_value = "42"
assert page.set_el_value(el, 42) is True
el.send_keys.assert_called_once_with("42")