regions/desktop/shelves.py (57 lines of code) (raw):
from pypom import Region
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
class Shelves(Region):
_recommended_addons_locator = (By.CLASS_NAME, 'RecommendedAddons')
_top_rated_locator = (By.CLASS_NAME, 'HighlyRatedAddons')
_trending_addons_locator = (By.CLASS_NAME, 'TrendingAddons')
@property
def recommended_addons(self):
self.wait.until(EC.visibility_of_element_located(self._recommended_addons_locator))
el = self.find_element(*self._recommended_addons_locator)
return self.ShelfList(self, el)
@property
def top_rated_addons(self):
self.wait.until(EC.visibility_of_element_located(self._top_rated_locator))
el = self.find_element(*self._top_rated_locator)
return self.ShelfList(self, el)
@property
def trending_addons(self):
self.wait.until(EC.visibility_of_element_located(self._trending_addons_locator))
el = self.find_element(*self._trending_addons_locator)
return self.ShelfList(self, el)
class ShelfList(Region):
_addon_item_locator = (By.CLASS_NAME, 'SearchResult')
_promo_card_header_locator = (By.CLASS_NAME, 'Card-header')
_browse_all_locator = (By.CSS_SELECTOR, '.Card-footer-link > a')
@property
def list(self):
self.wait.until(EC.visibility_of_element_located(self._addon_item_locator))
items = self.find_elements(*self._addon_item_locator)
return [self.ShelfDetail(self.page, el) for el in items]
@property
def card_header(self):
self.wait.until(EC.visibility_of_element_located(self._promo_card_header_locator))
return self.find_element(*self._promo_card_header_locator).text
def browse_all(self):
self.wait.until(EC.element_to_be_clickable(self._browse_all_locator))
self.find_element(*self._browse_all_locator).click()
from pages.desktop.frontend.search import Search
search = Search(self.driver, self.page)
return search.wait_for_page_to_load()
class ShelfDetail(Region):
_addon_name_locator = (By.CLASS_NAME, 'SearchResult-name')
_addon_icon_locator = (By.CLASS_NAME, 'SearchResult-icon')
_addon_users_locator = (By.CLASS_NAME, 'SearchResult-users-text')
@property
def name(self):
self.wait.until(EC.visibility_of_element_located(self._addon_name_locator))
return self.find_element(*self._addon_name_locator).text
@property
def addon_icon_preview(self):
self.wait.until(EC.visibility_of_element_located(self._addon_icon_locator))
return self.find_element(*self._addon_icon_locator)
@property
def addon_users_preview(self):
self.wait.until(EC.visibility_of_element_located(self._addon_users_locator))
return self.find_element(*self._addon_users_locator)