import os import time import allure import pytest from ui_automation_framework.core import DriverFactory from src.pages.common_page import CommonPage from src.pages.login_page import LoginPage from src.pages.welcome_page import WelcomePage from src.pages.artists_selector_page import ArtistsSelectorPage from src.pages.navigation_page import NavigationPage from src.pages.search_page import SearchPage from src.pages.library_page import LibraryPage from src.pages.artist_page import ArtistPage from src.pages.settings_page import SettingsPage from src.pages.tracks_page import TracksPage from src.pages.videos_page import VideosPage from src.pages.albums_page import AlbumsPage from src.pages.track_view_page import TrackViewPage from src.pages.video_view_page import VideoViewPage from src.pages.album_view_page import AlbumViewPage from src.pages.countries_page import CountriesPage from src.pages.track_comparison_page import TrackComparisonPage from ui_automation_framework.utils import CoreConfig @pytest.hookimpl(hookwrapper=True, tryfirst=True) def pytest_runtest_makereport(item, call): outcome = yield rep = outcome.get_result() setattr(item, "rep_" + rep.when, rep) return rep @pytest.fixture(scope="function", autouse=True) def one_time_set_up(request): print("Running class setUp") def_lang = CoreConfig.LANG CoreConfig.LANG = request.cls.pytestmark[0].kwargs.get("lang", CoreConfig.LANG) driver = DriverFactory().get_driver() if request.cls is not None: request.cls.driver = driver request.cls.common_page = CommonPage(driver) request.cls.login_page = LoginPage(driver) request.cls.welcome_page = WelcomePage(driver) request.cls.artist_selector_page = ArtistsSelectorPage(driver) request.cls.navigation_page = NavigationPage(driver) request.cls.search_page = SearchPage(driver) request.cls.tracks_page = TracksPage(driver) request.cls.videos_page = VideosPage(driver) request.cls.albums_page = AlbumsPage(driver) request.cls.artist_page = ArtistPage(driver) request.cls.settings_page = SettingsPage(driver) request.cls.library_page = LibraryPage(driver) request.cls.track_view_page = TrackViewPage(driver) request.cls.video_view_page = VideoViewPage(driver) request.cls.album_view_page = AlbumViewPage(driver) request.cls.countries_page = CountriesPage(driver) request.cls.track_comparison_page = TrackComparisonPage(driver) yield driver CoreConfig.LANG = def_lang if request.node.rep_call.failed and driver is not None: screenshot_on_failure(driver) print_page_source(driver) if driver is not None: driver.quit() def screenshot_on_failure(driver): file_name = "screenshot" + str(round(time.time() * 1000)) + ".png" if len(file_name) >= 200: file_name = str(round(time.time() * 1000)) + ".png" screenshot_dir = "../../screenshots/" relative_name = screenshot_dir + file_name current_dir = os.path.dirname(__file__) destination_file = os.path.join(current_dir, relative_name) destination_dir = os.path.join(current_dir, screenshot_dir) if not os.path.exists(destination_dir): os.makedirs(destination_dir) driver.save_screenshot(destination_file) allure.attach(driver.get_screenshot_as_png(), name=file_name, attachment_type=allure.attachment_type.PNG) def print_page_source(driver): print("============== PAGE SOURCE =============================") print(driver.page_source)