import json from datetime import datetime from allure import step from assertpy import assert_that from playwright.sync_api import Page from playwright.sync_api import expect from src.pages.common_page import CommonPage from src.locators.saved_discoveries_locators import SavedDiscoveriesLocators from src.ui_elements.base_ui_element import BaseUIElement class SavedDiscoveriesPage(CommonPage): def __init__(self, page: Page): super().__init__(page) self.page = page self.url = '/saved-discoveries' self.title_saved_discoveries = BaseUIElement(self.page, SavedDiscoveriesLocators.TITLE_SAVED_DISCOVERIES, 'Saved Discoveries title') self.lb_create_first_discovery = BaseUIElement(self.page, SavedDiscoveriesLocators.LB_CREATE_FIRST_DISCOVERY, 'Create your first discovery title') self.bn_start_new_discovery = BaseUIElement(self.page, SavedDiscoveriesLocators.BN_START_NEW_DISCOVERY, 'Start New Discovery button') self.discovery_item = self.page.locator(SavedDiscoveriesLocators.DISCOVERY_ITEM) self.discovery_item_icon = BaseUIElement(self.page, SavedDiscoveriesLocators.DISCOVERY_ITEM_ICON, 'Discovery card icon') self.discovery_item_name = BaseUIElement(self.page, SavedDiscoveriesLocators.DISCOVERY_ITEM_NAME, 'Discovery card name') self.discovery_item_info = BaseUIElement(self.page, SavedDiscoveriesLocators.DISCOVERY_ITEM_INFO, 'Discovery card info') self.discovery_item_results = BaseUIElement(self.page, SavedDiscoveriesLocators.DISCOVERY_ITEM_RESULTS, 'Discovery card results') self.discovery_item_menu = BaseUIElement(self.page, SavedDiscoveriesLocators.DISCOVERY_ITEM_MENU, 'Discovery card menu') self.discovery_item_menu_preview_params = BaseUIElement( self.page, SavedDiscoveriesLocators.DISCOVERY_ITEM_PREVIEW_PARAMS, 'Discovery card Preview Parameters') self.discovery_item_menu_rename = BaseUIElement( self.page, SavedDiscoveriesLocators.DISCOVERY_ITEM_RENAME, 'Discovery card Rename') self.discovery_item_menu_delete = BaseUIElement( self.page, SavedDiscoveriesLocators.DISCOVERY_ITEM_DELETE, 'Discovery card Delete') @step("Saved Discoveries page is loaded") def is_page_loaded(self): self.title_saved_discoveries.exists() @step("Check there are no saved discoveries") def check_no_saved_discoveries(self): self.lb_create_first_discovery.exists() @step("Count saved discoveries") def discoveries_count(self): return self.discovery_item.count() @step("Run saved discovery #{index}") def run_discovery(self, index): self.discovery_item.nth(index-1).click() @step("Check all parameters for saved {search_type} discovery card #{index}") def check_discovery_card(self, index, search_type): discovery_name = self.discovery_item_name.get_by(index).get_text() discovery_info = self.discovery_item_info.get_by(index).get_text() discovery_results = self.discovery_item_results.get_by(index).get_text() with open(f'src/data/{search_type}_discovery.json') as json_file: discovery_json = json.load(json_file) json_name = discovery_json['name'] json_type = discovery_json['type'] assert_that(discovery_name).is_equal_to(json_name) today_date = datetime.today().strftime('%m/%d/%y') assert_that(discovery_info).is_equal_to(f'created{today_date}') assert_that(search_type).is_equal_to(json_type) assert_that(discovery_results.isdigit()).is_true() self.discovery_item_icon.get_by(index, search_type).exists() @step("Check discovery Total Count upon previewing") def check_discovery_preview_payload(self, search_type, total_request): total_count = total_request.value.post_data_json with open(f'src/data/{search_type}_discovery.json') as inserted_file: input_discovery = json.load(inserted_file)['params'] for dsp, values in input_discovery.items(): print('Payload Expected \n{}'.format(input_discovery[dsp])) print('Payload TotalCount \n{}'.format(total_count[dsp])) assert_that(total_count[dsp]).is_equal_to(input_discovery[dsp])