pages/desktop/reviewer_tools/reviewer_tools_homepage.py (203 lines of code) (raw):

from selenium.common.exceptions import NoSuchElementException 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.reviewer_tools.manual_review import ManualReview from pages.desktop.reviewer_tools.content_review import ContentReview from pages.desktop.reviewer_tools.reviewer_themes import ReviewerThemes from pages.desktop.reviewer_tools.manual_review_log import ManualReviewLog from pages.desktop.reviewer_tools.moderated_review_log import ModeratedReviewLog from pages.desktop.reviewer_tools.ratings_awaiting_moderation import RatingsAwaitingModeration from scripts import reusables class ReviewerToolsHomepage(Base): URL_TEMPLATE = "reviewers/" # Header section _site_title_locator = (By.CSS_SELECTOR, ".site-title > a:nth-child(1) > strong") _user_header_locator = (By.CSS_SELECTOR, ".user") _tools_header_locator = (By.CSS_SELECTOR, ".tools") _back_to_addons_locator = (By.CSS_SELECTOR, ".return") # Announcement section _announcement_section_locator = (By.CSS_SELECTOR, ".featured.daily-message") # Reviewer tools section _manual_review_link_locator = (By.XPATH, "//a[contains(text(),'Manual Review')]") _moderated_review_log_locator = (By.XPATH, "//h3[contains(text(),'User Ratings Moderation')]/following-sibling::ul//a[contains(text(),'Moderated Review Log')]") _content_review_link_locator = (By.XPATH, "//a[contains(text(),'Content Review')]") _manual_review_log_link_locator = (By.XPATH, "//h3[contains(text(),'Manual Review')]/following-sibling::ul//a[contains(text(),'Review Log')]") _addons_review_guide_locator = (By.XPATH, "//a[contains(text(),'Add-on Review Guide')]") _flagged_for_human_review_locator = (By.XPATH, "//a[contains(text(),'Flagged by MAD for Human Review')]") _themes_awaiting_review_locator = (By.XPATH, "//h3[contains(text(),'Themes')]/following-sibling::ul//a[contains(text(),'Awaiting Review')]") _themes_review_log_locator = (By.XPATH, "//h3[contains(text(),'Themes')]/following-sibling::ul//a[contains(text(),'Review Log')]") _themes_review_guide_locator = (By.XPATH, "//h3[contains(text(),'Themes')]/following-sibling::ul//a[contains(text(),'Review Guide')]") _add_ons_pending_rejection_locator = (By.XPATH, "//h3[contains(text(),'Admin Tools')]/following-sibling::ul//a[contains(text(),'Add-ons Pending Rejection')]") _user_ratings_moderation_guide_locator = (By.XPATH, "//h3[contains(text(),'User Ratings Moderation')]/following-sibling::ul//a[contains(text(),'Moderation Guide')]") _user_ratings_awaiting_moderation_locator = (By.XPATH, "//h3[contains(text(),'User Ratings Moderation')]/following-sibling::ul//a[contains(text(),'Ratings Awaiting Moderation')]") # Footer section _mozilla_logo_footer_locator = (By.CSS_SELECTOR, ".Icon-mozilla") # Tab Navigation _manual_review_tab_locator = (By.CSS_SELECTOR, ".tabnav > li:nth-child(1) > a") _flagged_by_mad_for_human_review_tab_locator = (By.CSS_SELECTOR, ".tabnav > li:nth-child(2) > a") _new_tab_locator = (By.CSS_SELECTOR, ".tabnav > li:nth-child(3) > a") _updates_tab_locator = (By.CSS_SELECTOR, ".tabnav > li:nth-child(4) > a") _content_review_tab_locator = (By.CSS_SELECTOR, ".tabnav > li:nth-child(5) > a") _pending_rejection_tab_locator = (By.CSS_SELECTOR, ".tabnav > li:nth-child(6) > a") def wait_for_page_to_load(self): self.wait.until( lambda _: self.find_element(*self._site_title_locator).is_displayed(), message="Reviewer Tools Homepage was not loaded", ) return self # Header --------------------------------------------------------- @property def site_title(self): self.wait.until( EC.visibility_of_element_located(self._site_title_locator) ) return self.find_element(*self._site_title_locator) @property def user_header(self): return self.find_element(*self._user_header_locator) @property def tools_header(self): return self.find_element(*self._tools_header_locator) # Announcement ----------------------------------------------------- @property def announcement_section(self): return self.find_element(*self._announcement_section_locator) # Reviewer tools section ------------------------------------------- @property def manual_review_link(self): return self.find_element(*self._manual_review_link_locator) @property def content_review_link(self): return self.find_element(*self._content_review_link_locator) @property def manual_review_log_link(self): return self.find_element(*self._manual_review_log_link_locator) @property def addons_review_guide(self): return self.find_element(*self._addons_review_guide_locator) @property def flagged_for_human_review(self): return self.find_element(*self._flagged_for_human_review_locator) @property def themes_themes_awaiting_review(self): return self.find_element(*self._themes_awaiting_review_locator) @property def themes_review_log(self): return self.find_element(*self._themes_review_log_locator) @property def themes_review_guide(self): return self.find_element(*self._themes_review_guide_locator) @property def add_ons_pending_rejection(self): return self.find_element(*self._add_ons_pending_rejection_locator) @property def moderated_review_log(self): return self.find_element(*self._moderated_review_log_locator) # Tab Navigation ---------------------------------------------------------- @property def manual_review_tab(self): return self.find_element(*self._manual_review_tab_locator) @property def flagged_by_mad_for_human_review_tab(self): return self.find_element(*self._flagged_by_mad_for_human_review_tab_locator) @property def new_tab(self): return self.find_element(*self._new_tab_locator) @property def updates_tab(self): return self.find_element(*self._updates_tab_locator) @property def content_review_tab(self): return self.find_element(*self._content_review_tab_locator) @property def pending_rejection_tab(self): return self.find_element(*self._pending_rejection_tab_locator) @property def moderation_guide(self): return self.find_element(*self._user_ratings_moderation_guide_locator) @property def ratings_awaiting_moderation(self): return self.find_element(*self._user_ratings_awaiting_moderation_locator) # Footer Section @property def mozilla_logo(self): return self.find_element(*self._mozilla_logo_footer_locator) # Interaction methods ------------------------------------------------- def click_manual_review_link(self): self.find_element(*self._manual_review_link_locator).click() return ManualReview(self.driver, self.base_url).wait_for_page_to_load() def click_content_review_link(self): self.find_element(*self._content_review_link_locator).click() return ContentReview(self.driver, self.base_url).wait_for_page_to_load() def click_awaiting_review_link(self): self.find_element(*self._themes_awaiting_review_locator).click() return ReviewerThemes(self.driver, self.base_url).wait_for_themes_page_to_load() def click_manual_review_log_link(self): self.find_element(*self._manual_review_log_link_locator).click() return ManualReviewLog(self.driver, self.base_url).wait_for_page_to_load() def click_moderated_review_log_link(self): self.find_element(*self._moderated_review_log_locator).click() return ModeratedReviewLog(self.driver, self.base_url).wait_for_page_to_load() def click_ratings_awaiting_moderation(self): self.find_element(*self._user_ratings_awaiting_moderation_locator).click() return RatingsAwaitingModeration(self.driver, self.base_url).wait_for_page_to_load() def click_addon_review_guide_link(self): self.find_element(*self._addons_review_guide_locator).click() self.wait.until(EC.number_of_windows_to_be(2)) current_tab = self.driver.window_handles[0] new_tab = self.driver.window_handles[1] self.driver.switch_to.window(new_tab) self.wait.until( EC.visibility_of_element_located((By.ID, "Add-on_Review_Guide")) ) self.driver.close() self.driver.switch_to.window(current_tab) def click_themes_review_guide_click(self): self.find_element(*self._themes_review_guide_locator).click() self.wait.until(EC.number_of_windows_to_be(2)) current_tab = self.driver.window_handles[0] new_tab = self.driver.window_handles[1] self.driver.switch_to.window(new_tab) self.wait.until( EC.visibility_of_element_located((By.ID, "Background_Themes_Content_Guidelines")) ) self.driver.close() self.driver.switch_to.window(current_tab) def click_moderation_guide_click(self): self.find_element(*self._user_ratings_moderation_guide_locator).click() self.wait.until(EC.number_of_windows_to_be(2)) current_tab = self.driver.window_handles[0] new_tab = self.driver.window_handles[1] self.driver.switch_to.window(new_tab) self.wait.until( EC.visibility_of_element_located((By.XPATH, "//span[contains(text(),'Add-ons/Reviewers/Guide/Moderation')]")) ) self.driver.close() self.driver.switch_to.window(current_tab) # Methods ------------------------------------------------------------- def assert_reviewer_tools_section(self): assert ( self.manual_review_link.is_displayed(), self.manual_review_log_link.is_displayed(), self.content_review_link.is_displayed(), self.addons_review_guide.is_displayed(), self.flagged_for_human_review.is_displayed(), self.themes_themes_awaiting_review.is_displayed(), self.themes_review_log.is_displayed(), self.themes_review_guide.is_displayed(), self.add_ons_pending_rejection.is_displayed() ) def assert_tab_viewing(self): assert ( self.manual_review_tab.is_displayed(), "Manual Review" in self.manual_review_tab.text ) assert ( self.flagged_by_mad_for_human_review_tab.is_displayed(), "Flagged by MAD for Human Review" in self.flagged_by_mad_for_human_review_tab.text ) assert ( self.new_tab.is_displayed(), "New" in self.new_tab.text ) assert ( self.updates_tab.is_displayed(), "Updates" in self.updates_tab.text ) assert ( self.content_review_tab.is_displayed(), "Content Review" in self.content_review_tab.text ) assert ( self.pending_rejection_tab.is_displayed(), "Pending Rejection" in self.pending_rejection_tab.text )