pages/desktop/frontend/static_pages.py (117 lines of code) (raw):

from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from pages.desktop.base import Base from pages.desktop.frontend.details import Detail class StaticPages(Base): """This class will store informative pages, such as 404 pages, server error pages and other pages that have only an informative scope""" _not_found_page_locator = (By.CSS_SELECTOR, ".NotFound") _notice_text_locator = (By.CSS_SELECTOR, ".Notice-warning") _page_header_locator = (By.CSS_SELECTOR, ".Card-header-text") _content_locator = (By.CSS_SELECTOR, ".Card-contents") _content_card_links_locator = (By.CSS_SELECTOR, ".Card-contents a") # ------- Review Guidelines page _review_guidelines_page_forum_link_locator = (By.CSS_SELECTOR, "section > p > a") # ------- About Firefox Add-ons page _thunderbird_link_locator = (By.CSS_SELECTOR, "#about > p > a:nth-child(1)") _seamonkey_link_locator = (By.CSS_SELECTOR, "#about > p > a:nth-child(2)") _get_involved_links_locator = ( By.CSS_SELECTOR, ".Card-contents section > ul > li > a", ) # ------- Blocked Add-on page _blocked_addon_page_links_locator = (By.CSS_SELECTOR, ".Card-contents > p > a") # ------- Login Expired page _reload_the_page_link_locator = (By.CSS_SELECTOR, ".ReloadPageLink") def wait_for_page_to_load(self): """Waits for various page components to be loaded""" self.wait.until( EC.invisibility_of_element_located((By.CLASS_NAME, "LoadingText")), message="The requested page could not be loaded", ) return self @property def not_found_page(self): self.wait.until(EC.visibility_of_element_located(self._not_found_page_locator)) return self.find_element(*self._not_found_page_locator) @property def notice_messages(self): self.wait.until(EC.visibility_of_element_located(self._notice_text_locator)) return self.find_elements(*self._notice_text_locator) @property def page_header(self): self.wait.until(EC.visibility_of_element_located(self._page_header_locator)) return self.find_element(*self._page_header_locator).text @property def content(self): self.wait.until(EC.visibility_of_element_located(self._content_locator)) return self.find_element(*self._content_locator) # ------- Review Guidelines page @property def forum_link(self): self.wait.until( EC.visibility_of_element_located( self._review_guidelines_page_forum_link_locator ) ) return self.find_element(*self._review_guidelines_page_forum_link_locator) # ------- About Firefox Add-ons page @property def page_links(self): self.wait.until( EC.visibility_of_element_located(self._content_card_links_locator) ) return self.find_elements(*self._content_card_links_locator) @property def thunderbird_link(self): self.wait.until( EC.visibility_of_element_located(self._thunderbird_link_locator) ) return self.find_element(*self._thunderbird_link_locator) @property def seamonkey_link(self): self.wait.until(EC.visibility_of_element_located(self._seamonkey_link_locator)) return self.find_element(*self._seamonkey_link_locator) @property def get_involved_links(self): # add all the links except 'wiki' self.wait.until( EC.visibility_of_element_located(self._get_involved_links_locator) ) links = self.find_elements(*self._get_involved_links_locator) # add the 'wiki' link links.append(self.find_elements(*self._content_card_links_locator)[10]) return links @property def report_an_issue_links(self): self.wait.until( EC.visibility_of_element_located(self._content_card_links_locator) ) return self.find_elements(*self._content_card_links_locator)[11:15] @property def get_support_links(self): self.wait.until( EC.visibility_of_element_located(self._content_card_links_locator) ) return self.find_elements(*self._content_card_links_locator)[15:] # ------- Blocked Add-on page @property def addon_policies_link(self): self.wait.until( EC.visibility_of_element_located(self._blocked_addon_page_links_locator) ) return self.find_elements(*self._blocked_addon_page_links_locator)[0] @property def certain_criteria_link(self): self.wait.until( EC.visibility_of_element_located(self._blocked_addon_page_links_locator) ) return self.find_elements(*self._blocked_addon_page_links_locator)[1] @property def this_support_article_link(self): self.wait.until( EC.visibility_of_element_located(self._blocked_addon_page_links_locator) ) return self.find_elements(*self._blocked_addon_page_links_locator)[2] # ------- Login Expired page @property def logged_out_notice_message(self): self.wait.until( EC.visibility_of_element_located(self._logged_out_notice_locator) ) return self.find_element(*self._logged_out_notice_locator) @property def click_reload_page_link(self): self.wait.until(EC.element_to_be_clickable(self._reload_the_page_link_locator)) self.find_element(*self._reload_the_page_link_locator).click() self.wait.until( EC.visibility_of_element_located((By.CSS_SELECTOR, ".AddonTitle")) ) return Detail(self.driver, self.base_url)