module providing event firing and listening - simple sample event listener based on abstract template class of the Selenium project including not covered standard functions
SimpleEventListener(loggername: Optional[str] = None, events_include_list: list[str] = [], events_exclude_list: list[str] = [], events_generic_list: list[str] = [])
SimpleEventListener - sample event listener implementation (including extended events) with event logging
Source code in src/utils_seleniumxp/eventlistener.py
def __init__(
self,
loggername: Optional[str] = None,
events_include_list: list[str] = [],
events_exclude_list: list[str] = [],
events_generic_list: list[str] = []
):
class EventLoggerFilter_PyCharm_debug_exceptions(logging.Filter):
# filter function - however, internal on-exceptions from debug mode are not properly captured
def filter(self, record):
# https://stackoverflow.com/questions/38634988/check-if-program-runs-in-debug-mode
debugmode = getattr(sys, 'gettrace', None)() is not None
attriberror = "AttributeError" in record.msg
internalattrib = (
"no attribute '__'" in record.msg or
"no attribute 'shape'" in record.msg or
"no attribute '_ipython_canary_method" in record.msg
)
return not (debugmode and attriberror and internalattrib)
super().__init__(events_include_list, events_exclude_list, events_generic_list)
if loggername is None:
loggername = "Log_SeleniumEvents"
self._eventlogger = Utils.initLogger(loggername)
after_alerthandler(mode, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_alerthandler(self, mode, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' mode '{mode}'")
after_change_value_of(element, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_change_value_of(self, element, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' {element} (tagname '{element.tag_name}')")
after_click(element, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_click(self, element, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' of {element} (tagname '{element.tag_name}')")
after_close(driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_close(self, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}'")
after_closepopuphandler(mode, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_closepopuphandler(self, mode, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' mode '{mode}'")
after_cookiemanager(mode, cookiekey, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_cookiemanager(self, mode, cookiekey, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' mode '{mode}'")
after_execute_script(script, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_execute_script(self, script, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' '{script}'")
after_find(by, value, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_find(self, by, value, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' for {{by='{by}', value='{value}'}}")
after_navigate_back(driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_navigate_back(self, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}'")
after_navigate_forward(driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_navigate_forward(self, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}'")
after_navigate_to(url, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_navigate_to(self, url, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' URL '{url}'")
after_quit(driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_quit(self, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}'")
after_refresh(driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_refresh(self, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}'")
after_request(method, url, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_request(self, method, url, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' method '{method}' for URL '{url}'")
after_start_session(driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_start_session(self, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}'")
after_submit(element, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_submit(self, element, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' of {element}")
after_switch_to(objtyp, value, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def after_switch_to(self, objtyp, value, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' {objtyp} with identifier '{value}'")
before_alerthandler(mode, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_alerthandler(self, mode, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' mode '{mode}'")
before_change_value_of(element, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_change_value_of(self, element, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' {element} (tagname '{element.tag_name}')")
before_click(element, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_click(self, element, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' of {element} (tagname '{element.tag_name}')")
before_close(driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_close(self, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}'")
before_closepopuphandler(mode, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_closepopuphandler(self, mode, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' mode '{mode}'")
before_cookiemanager(mode, cookiekey, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_cookiemanager(self, mode, cookiekey, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
if mode == "add":
self._eventlogger.info(f"event '{event_name}' mode '{mode}' for cookie-key(s) '{cookiekey.keys()}'")
else:
if cookiekey != 'all':
self._eventlogger.info(f"event '{event_name}' mode '{mode}' for cookie-key '{cookiekey}'")
else:
self._eventlogger.info(f"event '{event_name}' mode '{mode}' for all cookies")
before_execute_script(script, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_execute_script(self, script, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' '{script}'")
before_find(by, value, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_find(self, by, value, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' for {{by='{by}', value='{value}'}}")
before_navigate_back(driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_navigate_back(self, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}'")
before_navigate_forward(driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_navigate_forward(self, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}'")
before_navigate_to(url, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_navigate_to(self, url, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' URL '{url}'")
before_quit(driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_quit(self, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}'")
before_refresh(driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_refresh(self, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}'")
before_request(method, url, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_request(self, method, url, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' method '{method}' for URL '{url}'")
before_start_session(driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_start_session(self, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}'")
before_submit(element, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_submit(self, element, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' of {element}")
before_switch_to(objtyp, value, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def before_switch_to(self, objtyp, value, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
self._eventlogger.info(f"event '{event_name}' {objtyp} with identifier '{value}'")
generic_listener(event_name: str, *args, **kwargs)
Source code in src/utils_seleniumxp/eventlistener.py
def generic_listener(self, event_name: str, *args, **kwargs):
if isinstance(event_name, str):
self._eventlogger.info(f"event '{event_name}'")
else:
err_msg = "Call for generic event logging not valid."
raise Exception(err_msg)
on_exception(exception, driver)
Source code in src/utils_seleniumxp/eventlistener.py
def on_exception(self, exception, driver):
event_name = self._getmethodname()
if self.checkevent(event_name):
exceptionmsg = str(exception).replace("\n", " ")
self._eventlogger.info(f"event '{event_name}' '{exception.__class__.__name__}', '{exceptionmsg}'")