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
)