regions/desktop/rating_stats_card.py (74 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 RatingStats(Region): _addon_title_locator = (By.CSS_SELECTOR, '.AddonTitle > a') _addon_image_locator = (By.CSS_SELECTOR, '.AddonSummaryCard-header-icon-image') _addon_author_locator = (By.CSS_SELECTOR, '.AddonTitle-author > a') _addon_rating_locator = (By.CSS_SELECTOR, '.AddonSummaryCard-addonAverage') _number_of_reviews_locator = (By.CLASS_NAME, 'RatingsByStar-count') _rating_stars_locator = (By.CSS_SELECTOR, '.AddonSummaryCard .Rating-star') _filled_stars_locator = (By.CSS_SELECTOR, '.AddonSummaryCard .Rating-selected-star') _half_filled_stars_locator = ( By.CSS_SELECTOR, '.AddonSummaryCard .Rating-half-star', ) _rating_by_star_locator = (By.CSS_SELECTOR, '.RatingsByStar-graph > a') _rating_bars_locator = (By.CSS_SELECTOR, '.RatingsByStar-barFrame') @property def addon_title(self): self.wait.until(EC.visibility_of_element_located(self._addon_title_locator)) return self.find_element(*self._addon_title_locator) def click_addon_title(self): self.wait.until(EC.element_to_be_clickable(self._addon_title_locator)) self.find_element(*self._addon_title_locator).click() from pages.desktop.frontend.details import Detail return Detail(self.driver, self.page) @property def addon_image(self): self.wait.until(EC.visibility_of_element_located(self._addon_image_locator)) return self.find_element(*self._addon_image_locator) def click_addon_image(self): self.wait.until(EC.element_to_be_clickable(self._addon_image_locator)) self.find_element(*self._addon_image_locator).click() from pages.desktop.frontend.details import Detail return Detail(self.driver, self.page) @property def addon_author_names(self): return [i.text for i in self.find_elements(*self._addon_author_locator)] def click_author_name(self, index=0): self.wait.until(EC.element_to_be_clickable(self._addon_author_locator)) self.find_elements(*self._addon_author_locator)[index].click() from pages.desktop.frontend.users import User return User(self.driver, self.page).view @property def rating_stars(self): self.wait.until(EC.visibility_of_element_located(self._rating_stars_locator)) return self.find_elements(*self._rating_stars_locator) @property def rating(self): self.wait.until(EC.visibility_of_element_located(self._addon_rating_locator)) rating = self.find_element(*self._addon_rating_locator).text.split()[0] return float(rating) @property def rating_bars(self): self.wait.until(EC.visibility_of_element_located(self._rating_bars_locator)) return self.find_elements(*self._rating_bars_locator) def click_see_all_reviews_with_specific_stars(self, count): self.wait.until(EC.element_to_be_clickable(self._rating_by_star_locator)) self.find_elements(*self._rating_by_star_locator)[count].click() from pages.desktop.frontend.reviews import Reviews return Reviews(self.driver, self.page) def number_of_reviews_with_specific_stars(self, count): self.wait.until(EC.visibility_of_element_located(self._number_of_reviews_locator)) return int(self.find_elements(*self._number_of_reviews_locator)[count].text) @property def number_of_filled_stars(self): self.wait.until(EC.visibility_of_element_located(self._filled_stars_locator)) return len(self.find_elements(*self._filled_stars_locator)) @property def number_of_half_filled_stars(self): return len(self.find_elements(*self._half_filled_stars_locator)) @property def number_of_unfilled_stars(self): return 5 - (self.number_of_filled_stars + self.number_of_half_filled_stars)