def actor_decides_to_click_back_until_reaches_product_search_page( context, actor_alias, element_name, max_number_pages, page_name): counter = 0 while counter < int(max_number_pages): current_page_url = str(context.driver.current_url) # logging.debug(f"current_page_url -> {current_page_url}") if "tradedata/?code" in current_page_url: page = get_page_object("Search - Tradedata codes") find_and_click_on_page_element(context.driver, page.SELECTORS, element_name) elif "check-your-answers" in current_page_url: page = get_page_object("ImportTariff - CheckYourAnswers") find_and_click_on_page_element(context.driver, page.SELECTORS, element_name) elif "search/" in current_page_url: page = get_page_object(page_name) break elif "refine/?interaction" in current_page_url: page = get_page_object("Search - Refinement Interaction") find_and_click_on_page_element(context.driver, page.SELECTORS, element_name) else: error = f"Landed on unrecognized page after {counter} attempts!" assert False, error counter += 1
def visit_page(context: Context, actor_alias: str, page_name: str): """Will visit specific page. NOTE: In order for the retry scheme to work properly you should have the webdriver' page load timeout set to value lower than the retry's `wait_fixed` timer, e.g `driver.set_page_load_timeout(time_to_wait=30)` """ def is_special_case(page_name: str) -> bool: parts = page_name.split(" - ") return len(parts) == 3 if not get_actor(context, actor_alias): add_actor(context, unauthenticated_actor(actor_alias)) page = get_page_object(page_name) has_action(page, "visit") if is_special_case(page_name) and hasattr(page, "SubURLs"): subpage_name = page_name.split(" - ")[1].lower() special_url = page.SubURLs[subpage_name] logging.debug( f"{actor_alias} will visit '{page_name}' subpage using: '{special_url}" ) page.visit(context.driver, page_name=subpage_name) else: logging.debug( f"{actor_alias} will visit '{page_name}' page using: '{page.URL}'") page.visit(context.driver) take_screenshot(context.driver, f"visit page {page_name}") accept_all_cookies(context.driver) check_for_errors(context.driver.page_source, context.driver.current_url) update_actor(context, actor_alias, visited_page=page)
def click_on_link_element_in_page(context: Context, actor_alias: str, element_name: str, *, page_name: str = None): if page_name: page = get_page_object(page_name) else: page = get_last_visited_page(context, actor_alias) # logging.debug(page) has_action(page, "find_and_click") page.find_and_click(context.driver, element_selector_name=element_name)
def actor_select_or_enter_random_data_click_continue_until_checkanswers_page( context, actor_alias, max_number_pages): counter = 0 while counter < int(max_number_pages): current_page_url = str(context.driver.current_url) # logging.debug(f"current_page_url -> {current_page_url}") # time.sleep(1) if "tradedata/?code" in current_page_url: page = get_page_object("Search - Tradedata codes") has_action(page, "find_and_select_random_radio_and_click_continue") has_action(page, "searchcontinue") page.find_and_select_random_radio_and_click_continue( context.driver) page.searchcontinue(context.driver) elif "check-your-answers" in current_page_url: break elif "refine/?interaction" in current_page_url: try: page = get_page_object("Search - Refinement Interaction") has_action(page, "find_and_select_random_radio_and_click_continue") page.find_and_select_random_radio_and_click_continue( context.driver) # time.sleep(1) composition_text_element = context.driver.find_element_by_xpath( "//*[@id=\"composition_message\"]") composition_text = str(composition_text_element.text) if "The numbers need to add up to 100." in composition_text: page = get_page_object("Search - Refinement Interaction") has_action(page, "find_and_enter_random_composition_percent") page.find_and_enter_random_composition_percent( context.driver, "100") find_and_click_on_page_element(context.driver, page.SELECTORS, "Continue") except NoSuchElementException: pass counter += 1
def click_on_page_element(context: Context, actor_alias: str, element_name: str, *, page_name: str = None): if page_name: page = get_page_object(page_name) else: page = get_last_visited_page(context, actor_alias) logging.debug(page) find_and_click_on_page_element(context.driver, page.SELECTORS, element_name) logging.debug("%s decided to click on '%s' on '%s' page", actor_alias, element_name, page.NAME)
def should_be_on_page(context: Context, actor_alias: str, page_name: str): page = get_page_object(page_name) # revisit_page_on_access_denied(context.driver, page, page_name) take_screenshot(context.driver, f"should be on {page_name}") check_for_errors(context.driver.page_source, context.driver.current_url) has_action(page, "should_be_here") if hasattr(page, "SubURLs"): special_page_name = page_name.split(" - ")[1].lower() if signature(page.should_be_here).parameters.get("page_name"): page.should_be_here(context.driver, page_name=special_page_name) else: raise TypeError( f"{page.__name__}.should_be_here() doesn't accept 'page_name' keyword " f"argument but it should as this Page Object has 'SubURLs' attribute." ) else: page.should_be_here(context.driver) update_actor(context, actor_alias, visited_page=page) logging.debug( f"{actor_alias} is on {page.SERVICE} - {page.NAME} - {page.TYPE} -> " f"{page}")
def actor_should_be_able_to_enter_products_and_country(context, products, country): page = get_page_object("GreatMagna - Dashboard") has_action(page, "fill_out_products_and_country") page.fill_out_products_and_country(context.driver, products, country)