from selenium.common.exceptions import NoAlertPresentException
import nerodia
from .exception import UnknownObjectException
from .wait.wait import Waitable, TimeoutError
[docs]class Alert(Waitable):
def __init__(self, browser):
self.browser = browser
self.alert = None
@property
def text(self):
"""
Returns the text of the alert
:rtype: str
:Example:
browser.alert.text #=> 'ok'
"""
self.wait_for_exists()
return self.alert.text
[docs] def ok(self):
"""
Closes alert or accepts prompts/confirms
:Example:
browser.alert.ok
browser.alert.exists #=> False
"""
self.wait_for_exists()
self.alert.accept()
self.browser.after_hooks.run()
[docs] def close(self):
"""
Closes alert or cancels prmopts/confirms
:Example:
browser.alert.close()
browser.alert.exists #=> False
"""
self.wait_for_exists()
self.alert.dismiss()
self.browser.after_hooks.run()
[docs] def set(self, value):
"""
Enters text to prompt
:param value: keys to send
:Example:
browser.alert.set('Text for prompt')
browser.alert.ok()
"""
self.wait_for_exists()
self.alert.send_keys(value)
@property
def exists(self):
"""
Returns True if alert, confirm, or prompt is present and False otherwise
:rtype: bool
:Example:
browser.alert.exists #=> True
"""
try:
self.assert_exists()
return True
except UnknownObjectException:
return False
present = exists
@property
def selector_string(self):
return 'alert'
[docs] def assert_exists(self):
try:
self.alert = self.browser.driver.switch_to.alert
except NoAlertPresentException:
raise UnknownObjectException('unable to locate alert')
[docs] def wait_for_exists(self):
if not nerodia.relaxed_locate:
return self.assert_exists()
try:
return self.wait_until(lambda a: a.exists, message='waiting for alert')
except TimeoutError:
raise UnknownObjectException('unable to locate alert')