diff --git a/conftest.py b/conftest.py index eb2bd31..d7d73c2 100644 --- a/conftest.py +++ b/conftest.py @@ -1,6 +1,10 @@ +import os + import pytest +from selenium.webdriver.support.event_firing_webdriver import EventFiringWebDriver from drivers.driver_factory import Driver +from drivers.event_listener import AppEventListener @pytest.hookimpl @@ -50,14 +54,38 @@ def device(request): @pytest.fixture(scope="function") def driver(request): platform = request.config.getoption("--platform") - driver = None try: + e_listener = AppEventListener() driver = Driver.get_driver(platform) + event_driver = EventFiringWebDriver(driver, e_listener) except Exception as e: pytest.fail(f"Failed to initialize driver: {e}") - yield driver + yield event_driver + + if event_driver is not None: + event_driver.quit() + - if driver is not None: - driver.quit() +# def pytest_runtest_makereport(item, call): +# """Capture screenshot on test failure.""" +# if call.excinfo is not None: +# driver = item.funcargs.get("driver", None) +# +# if driver is not None: +# screenshot_dir = "reports/screenshots" +# os.makedirs( +# screenshot_dir, exist_ok=True +# ) # Create directory if it does not exist +# screenshot_path = os.path.join(screenshot_dir, f"{item.name}.png") +# +# try: +# driver.save_screenshot(screenshot_path) +# # log.info(f"Screenshot saved to: {screenshot_path}") +# except Exception as e: +# pass +# # log.error(f"Failed to save screenshot: {e}") +# else: +# pass +# # log.error("Driver instance is not available for capturing screenshot.") diff --git a/src/drivers/event_listener.py b/src/drivers/event_listener.py new file mode 100644 index 0000000..2412a1a --- /dev/null +++ b/src/drivers/event_listener.py @@ -0,0 +1,32 @@ +import logging + +from selenium.webdriver.support.abstract_event_listener import AbstractEventListener + +# TODO make logger +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + + +class AppEventListener(AbstractEventListener): + """Custom Event Listener for Appium WebDriver.""" + + def before_find(self, by, value, driver): + logger.info(f"Looking for element: {by} -> {value}") + + def after_find(self, by, value, driver): + logger.info(f"Found element: {by} -> {value}") + + def before_click(self, element, driver): + logger.info(f"Before clicking: {element}") + + def after_click(self, element, driver): + logger.info(f"Clicked on: {element}") + + def before_quit(self, driver): + logger.info("Driver is about to quit.") + + def after_quit(self, driver): + logger.info("Driver has quit.") + + def on_exception(self, exception, driver) -> None: + logger.info(f"On exception") \ No newline at end of file