fix: set_checkbox propagates click failure; coerce set_el_value; cover alerts/selects
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user