From 2808a918675558d1f0e548e8e153ea5e85a61e78 Mon Sep 17 00:00:00 2001 From: "dmy.berezovskyi" Date: Sat, 8 Mar 2025 00:46:15 +0200 Subject: [PATCH 1/3] added element_interactor.py --- conftest.py | 36 +++++++++++++++++++++++++++++++---- src/drivers/event_listener.py | 29 ++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 4 deletions(-) create mode 100644 src/drivers/event_listener.py 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..dac025a --- /dev/null +++ b/src/drivers/event_listener.py @@ -0,0 +1,29 @@ +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.") From 976ee95a9e731ace840cba4745734e8558b6100d Mon Sep 17 00:00:00 2001 From: "dmy.berezovskyi" Date: Sat, 8 Mar 2025 00:47:16 +0200 Subject: [PATCH 2/3] added element_interactor.py --- src/drivers/event_listener.py | 41 +++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/drivers/event_listener.py b/src/drivers/event_listener.py index dac025a..40552a1 100644 --- a/src/drivers/event_listener.py +++ b/src/drivers/event_listener.py @@ -8,22 +8,25 @@ 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.") + """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") From 28ec3b57c46dfde3ac9f014054bd827643d55959 Mon Sep 17 00:00:00 2001 From: "dmy.berezovskyi" Date: Sat, 8 Mar 2025 00:50:34 +0200 Subject: [PATCH 3/3] added element_interactor.py --- src/drivers/event_listener.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/event_listener.py b/src/drivers/event_listener.py index 40552a1..2412a1a 100644 --- a/src/drivers/event_listener.py +++ b/src/drivers/event_listener.py @@ -29,4 +29,4 @@ def after_quit(self, driver): logger.info("Driver has quit.") def on_exception(self, exception, driver) -> None: - logger.info(f"On exception") + logger.info(f"On exception") \ No newline at end of file