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 search(driver: WebDriver, *, keyword: str = None, sector: str = None): input_field = find_element(driver, SEARCH_INPUT, element_name="Search input field", wait_for_it=False) input_field.clear() if keyword: input_field.send_keys(keyword) if sector: sector_dropdown = find_element( driver, SEARCH_SECTOR, element_name="Sector dropdown menu", wait_for_it=False, ) sector_value = "option[value='{}']".format(sector.upper().replace( " ", "_")) sector_option = sector_dropdown.find_element_by_css_selector( sector_value) sector_option.click() take_screenshot(driver, NAME + " after entering the keyword") button = find_element(driver, SEARCH_BUTTON, element_name="Search button", wait_for_it=False) button.click() take_screenshot(driver, NAME + " after submitting the search form")
def open_guide(driver: WebDriver, guide_name: str): guide_name = guide_name.split(" - ")[1].strip() selector = Selector(By.PARTIAL_LINK_TEXT, guide_name) logging.debug("Looking for: {}".format(guide_name)) guide = find_element(driver, selector, element_name="Guide card", wait_for_it=False) guide.click() take_screenshot(driver, PAGE_TITLE + " after opening " + guide_name)
def erp_should_see_correct_data_on_summary_page(context: Context, actor_alias: str): actor = get_actor(context, actor_alias) take_screenshot(context.driver, "should_see_correct_data_on_summary_page") erp.summary.should_see_correct_data_on_summary_page( context.driver, actor.forms_data) logging.debug( f"{actor_alias} saw: all expected data on the ERP Summary 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 generic_should_be_able_to_print(context: Context, actor_alias: str): page = get_last_visited_page(context, actor_alias) has_action(page, "should_be_able_to_print") take_screenshot(context.driver, "should_be_able_to_print") page.should_be_able_to_print(context.driver) logging.debug( f"{actor_alias} is able to print out contents of: {context.driver.current_url}" )
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 open_article(driver: WebDriver, number: int): selector = Selector(By.CSS_SELECTOR, ARTICLE_LINK.format(number=number)) link = find_element(driver, selector) if link.get_attribute("target") == "_blank": href = link.get_attribute("href") driver.get(href) else: link.click() take_screenshot(driver, NAME + " after clicking on article link")
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 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 search(driver: WebDriver, country: str, category: str): form_selectors = SELECTORS["search form"] find_a_marketplace = find_element(driver, SEARCH_BUTTON, element_name="find a 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 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 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 open_profile(driver: WebDriver, number: int): profile_links = find_elements(driver, PROFILE_LINKS) if number == 0: link = random.choice(profile_links) elif number == 1: link = profile_links[0] else: link = profile_links[0] logging.debug(f"Will click on profile link: {link.text}") link.click() take_screenshot(driver, NAME + " after clicking on company profile link")
def erp_should_see_number_of_product_categories_to_expand( context: Context, actor_alias: str, comparison_description: str): comparison_details = get_comparison_details(comparison_description) page = get_last_visited_page(context, actor_alias) has_action(page, "should_see_number_of_product_categories_to_expand") take_screenshot(context.driver, "should_see_number_of_product_categories_to_expand") check_for_errors(context.driver.page_source, context.driver.current_url) page.should_see_number_of_product_categories_to_expand( context.driver, comparison_details) logging.debug( f"{actor_alias} saw: {comparison_description} product categories(s) to expand" )
def search(driver: WebDriver, *, keyword: str = None, sector: str = None): search_box_selector = find_selector_by_name(SELECTORS, "search box") input_field = find_element(driver, search_box_selector, element_name="Search box", wait_for_it=False) input_field.clear() input_field.send_keys(keyword) take_screenshot(driver, NAME + " after entering the keyword") find_and_click_on_page_element(driver, SELECTORS, element_name="search button", wait_for_it=False) take_screenshot(driver, NAME + " after submitting the search form")
def search(driver: WebDriver, *, keyword: str = None, sector: str = None): """ sector is not used, but kept for compatibility with search() in other POs. """ input_field = find_element( driver, SEARCH_INPUT, element_name="Search input field", wait_for_it=False ) input_field.clear() if keyword: input_field.send_keys(keyword) take_screenshot(driver, NAME + " after entering the keyword") button = find_element( driver, SEARCH_BUTTON, element_name="Search button", wait_for_it=False ) button.click() take_screenshot(driver, NAME + " after submitting the search form")
def menu_items_should_be_visible(context: Context): ids = [ "great-header-nav-mobile", "great-header-mobile-nav", "great-header-nav" ] for value in ids: try: element = context.driver.find_element(by=By.ID, value=value) break except NoSuchElementException: continue else: raise with selenium_action(context.driver, f"Menu items should be visible"): take_screenshot(context.driver, "mobile menu") assert element.is_displayed()
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 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) page_source = context.driver.page_source revisit_page_on_access_denied(context.driver, page, page_name) take_screenshot(context.driver, f"should be on {page_name}") check_for_errors(page_source, context.driver.current_url) accept_all_cookies(context.driver) 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()
def open_profile(driver: WebDriver, number: int): selector = Selector(By.CSS_SELECTOR, COMPANY_PROFILE_LINK.format(number=number)) link = find_element(driver, selector) link.click() take_screenshot(driver, NAME + " after clicking on company profile link")