def should_see_page_number(driver: WebDriver, page_num: int): scroll_to(driver, find_element(driver, ACTIVE_PAGE)) take_screenshot(driver, NAME) selector = find_element(driver, ACTIVE_PAGE) with assertion_msg(f"Expected to see {page_num} but got {int(selector.text)}"): assert int(selector.text) == page_num
def should_see_it_on(driver: WebDriver, page: ModuleType): take_screenshot(driver, NAME + page.NAME) selector = find_selector_by_name(page.SELECTORS, "language selector") language_selector = find_element(driver, selector, element_name="language selector") with assertion_msg(f"Language selector is not visible on {driver.current_url}"): assert language_selector.is_displayed() logging.debug(f"Language selector is visible on {driver.current_url}")
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 has_pagination(driver: WebDriver, min_page_num: int): scroll_to(driver, find_element(driver, PAGINATION)) take_screenshot(driver, NAME) selectors = find_elements(driver, PAGES) with assertion_msg( f"Expected to see more that {min_page_num} search results page but got just {len(selectors)}" ): assert len(selectors) > min_page_num
def search(driver: WebDriver, country: str, category: str): form_selectors = SELECTORS["search form"] find_a_marketplace = find_element( driver, SEARCH_BUTTON, element_name="find your marketplace" ) scroll_to(driver, find_a_marketplace) details = generate_form_details(country, category) pick_option(driver, form_selectors, form_details=details) find_a_marketplace.click() take_screenshot(driver, "After submitting the form")
def open(driver: WebDriver, group: str, element: str): selector = SELECTORS[group.lower()][element.lower()] link = find_element(driver, selector, element_name=element, wait_for_it=True) check_if_element_is_visible(link, element_name=element) link.click() take_screenshot(driver, NAME + " after clicking on: %s link".format(element))
def pick_radio_option_and_submit(driver: WebDriver, name: str) -> ModuleType: radio_selectors = get_selectors(SELECTORS["form"], ElementType.RADIO) choose_one_form_option(driver, radio_selectors, name) take_screenshot(driver, "Before submitting the form") button = find_element( driver, SUBMIT_BUTTON, element_name="Submit button", wait_for_it=False ) button.click() take_screenshot(driver, "After submitting the form") return POs[name.lower()]
def pick_random_radio_option_and_submit(driver: WebDriver, ignored: List[str]): radio_selectors = get_selectors(SELECTORS["form"], ElementType.RADIO) selected = choose_one_form_option_except(driver, radio_selectors, ignored) take_screenshot(driver, "Before submitting the form") button = find_element( driver, SUBMIT_BUTTON, element_name="Submit button", wait_for_it=False ) button.click() take_screenshot(driver, "After submitting the form") return POs[selected.lower()]
def open_industry(driver: WebDriver, industry_name: str): industry_name = industry_name.split(" - ")[1].strip() selector = Selector(By.PARTIAL_LINK_TEXT, industry_name) logging.debug("Looking for: {}".format(industry_name)) industry_link = find_element(driver, selector, element_name="Industry card", wait_for_it=False) industry_link.click() take_screenshot(driver, NAME + " after opening " + industry_name + " page")
def sign_in(context: Context, actor_alias: str): actor = get_actor(context, actor_alias) email = actor.email password = actor.password sso.sign_in.visit(context.driver) take_screenshot(context.driver, sso.sign_in.NAME) sso.sign_in.should_be_here(context.driver) sso.sign_in.fill_out(context.driver, email, password) sso.sign_in.submit(context.driver) take_screenshot(context.driver, "after signing in") check_for_errors(context.driver.page_source, context.driver.current_url)
def find_trade_office(driver: WebDriver, post_code: str): form_selectors = SELECTORS["form"] details = {"postcode": post_code} fill_out_input_fields(driver, form_selectors, details) take_screenshot(driver, "After filling out the form") button = find_element(driver, SEARCH_BUTTON, element_name="Search button", wait_for_it=False) button.click() take_screenshot(driver, "After submitting the form")
def domestic_open_random_market(context: Context, actor_alias: str): if not get_actor(context, actor_alias): add_actor(context, unauthenticated_actor(actor_alias)) driver = context.driver domestic.markets_listing.visit(driver) take_screenshot(driver, domestic.markets_listing.NAME) check_for_errors(driver.page_source, driver.current_url) market_name = domestic.markets_listing.open_random_marketplace(driver) domestic.market_country_guide.should_be_here(driver) update_actor( context, actor_alias, visited_page=domestic.market_country_guide, article_url=driver.current_url, visited_articles=market_name, )
def pick_radio_option_and_submit(driver: WebDriver, name: str) -> ModuleType: radio_selectors = get_selectors(SELECTORS["form"], ElementType.RADIO) choose_one_form_option(driver, radio_selectors, name) take_screenshot(driver, "Before submitting the form") button = find_element(driver, SUBMIT_BUTTON, element_name="Submit button", wait_for_it=False) button.click() take_screenshot(driver, "After submitting the form") POs = { "export opportunities service": contact_us_triage_export_opportunities, "your account on great.gov.uk": contact_us_triage_great_account, "other": None, } return POs[name.lower()]
def domestic_open_random_advice_article(context: Context, actor_alias: str): if not get_actor(context, actor_alias): add_actor(context, unauthenticated_actor(actor_alias)) driver = context.driver domestic.advice_landing.visit(driver) take_screenshot(driver, domestic.advice_landing.NAME) check_for_errors(driver.page_source, driver.current_url) advice_name = domestic.advice_landing.open_any_article(driver) article_name = domestic.advice_article_list.open_any_article(driver) domestic.advice_article.should_be_here(driver) update_actor( context, actor_alias, visited_page=domestic.advice_article, article_url=driver.current_url, article_category=advice_name, visited_articles=article_name, )
def open(driver: WebDriver, group: str, element: str, *, same_tab: bool = True): selector = SELECTORS[group.lower()][element.lower()] link = find_element(driver, selector, element_name=element, wait_for_it=False) check_if_element_is_visible(link, element_name=element) if same_tab: href = link.get_attribute("href") logging.debug("Opening '%s' link '%s' in the same tab", element, href) driver.get(href) else: with wait_for_page_load_after_action(driver): link.click() take_screenshot(driver, NAME + " after clicking on: %s link".format(element))
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 close_video(driver: WebDriver): take_screenshot(driver, NAME + " before closing video modal window") close_button = find_element(driver, CLOSE_VIDEO) close_button.click()