class RoyalQueenSeedsProduct: """Product page to select size and add to cart.""" NUMBER_SEEDS_CONTAINER = (By.CSS_SELECTOR, '.attributes-block') ADD_TO_CART = (By.CSS_SELECTOR, '#add_to_cart') ADDED_TO_CART = (By.ID, 'cart_block_total') PRODUCT_STOCK = (By.ID, 'availability_value') POPUP_CLOSE_BUTTON = (By.XPATH, '') OUT_OF_STOCK = (By.CSS_SELECTOR, '#availability_value') def __init__(self, driver): self.driver = driver self.methods = BaseClass(self.driver) # def select_size(self): # """ # Selects product size # # """ # if self.methods.element_exists(self.NONE_SIZE): # self.methods.wait_for_element(self.AVAILABLE_SIZE).click() def check_stock_info(self): """ Search for stock info if the product is not in stock returns False """ availability = self.methods.presence_of_element_located(self.OUT_OF_STOCK).text if availability.lower() != 'no stock': return True else: return False def add_product_to_cart(self): """ Adds product to the cart page and check is it added successfully """ sleep(1) cart_total = self.methods.presence_of_element_located(self.ADDED_TO_CART).text self.methods.wait_for_element(self.ADD_TO_CART).click() if self.methods.element_exists(self.ADDED_TO_CART): try: sleep(1) successfully_added = self.methods.presence_of_element_located(self.ADDED_TO_CART).text assert cart_total != successfully_added # change assertion if any bug appears except AssertionError: self.add_product_to_cart() else: self.add_product_to_cart()
class DecathlonsgProductPage: """DecathlonsgProduct is select exits size, check stock info and add product to cart.""" ADD_TO_CART_EXISTS = (By.CLASS_NAME, "add") NONE_SIZE = (By.CSS_SELECTOR, '//*[@style="display:none"]') AVAILABLE_SIZE = (By.CLASS_NAME, 'radio-label') ADD_TO_CART = (By.CSS_SELECTOR, '.btn.btn-primary.btn-lg') ADD_TO_CART_ICON = (By.CSS_SELECTOR, '.bag-icon') CLOSE_POPUP_BTN = (By.ID, 'logo') MINIFY_POPUP_BTN = (By.CSS_SELECTOR, '[aria-label="close"]') ADDED_TO_CART = (By.CSS_SELECTOR, '.sc-cart-summary-line') OUT_OF_STOCK = (By.XPATH, './/*[text()=" There are not enough products in stock "]') IFRAME_IS_OPENED = (By.CSS_SELECTOR, '.anchor_right.fb_customer_chat_bounce_in_v2') IFRAME = (By.CSS_SELECTOR, '[data-testid="dialog_iframe"]') def __init__(self, driver): self.driver = driver self.methods = BaseClass(self.driver) def select_size(self): """ Selects product size """ if self.methods.exist_element(self.NONE_SIZE): self.methods.wait_for_element(self.AVAILABLE_SIZE).click() def check_stock_info(self): """ Search for stock info if the product is not in stock returns False """ if self.methods.exist_element(self.OUT_OF_STOCK): return False else: return True def add_product_to_cart(self): """ Adds product to the cart page and check is it added successfully. """ if self.methods.exist_element(self.ADD_TO_CART_EXISTS): try: if self.methods.exist_element(self.IFRAME_IS_OPENED): iframe_name = self.methods.presence_of_element_located( self.IFRAME).get_attribute('name') self.driver.switch_to.frame(iframe_name) self.methods.wait_for_element( DecathlonsgProductPage.MINIFY_POPUP_BTN).click() self.driver.switch_to.default_content() self.methods.wait_for_element( self.ADD_TO_CART_ICON).click() self.methods.wait_for_element(self.ADD_TO_CART_ICON).click() assert self.methods.exist_element( self.ADDED_TO_CART), "ADD_TO_CART is not clickable" except: self.driver.execute_script("window.scrollTo(0, 400)") self.methods.wait_for_element(self.ADD_TO_CART_ICON).click() else: assert self.methods.wait_for_element( self.ADD_TO_CART_EXISTS).is_displayed( ), "No add to cart button"