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)