import time from selenium.webdriver.common.by import By from my_constants import EMAIL, PASSWORD class HomePage: def __init__(self, driver): self.__driver = driver def open(self): self.__driver.get('https://luna73.ru/') time.sleep(2) self.__header = self.__driver.find_elements( By.CLASS_NAME, 'menu__item') def get_header(self): return self.__header def __click_feedback(self): feedback_button = self.__driver.find_element( By.XPATH, "//*[@id='root']/div/div/nav/div/div[2]/button") self.__driver.execute_script( "arguments[0].scrollIntoView(true);", feedback_button) feedback_button.click() time.sleep(2) def send_non_empty_feedback(self): self.__click_feedback() textarea = self.__driver.find_element(By.CLASS_NAME, 'textarea') textarea.send_keys('a') send_button = self.__driver.find_element( By.XPATH, '/html/body/div[3]/div/div[2]/div/div/div/div[3]/button') send_button.click() time.sleep(2) def login(self): login_button = self.__driver.find_element( By.CLASS_NAME, 'widget-overlay') self.__driver.execute_script( "arguments[0].scrollIntoView(true);", login_button) login_button.click() time.sleep(3) the_iframe = self.__driver.find_element(By.ID, "kw-iframe") self.__driver.switch_to.frame(the_iframe) email_field = self.__driver.find_element(By.NAME, 'email') password_field = self.__driver.find_element(By.NAME, 'password') email_field.send_keys(EMAIL) password_field.send_keys(PASSWORD) enter_button = self.__driver.find_element( By.CLASS_NAME, 'login-form__button') enter_button.click() time.sleep(2) close_button = self.__driver.find_element( By.CLASS_NAME, 'popup-close-icon') close_button.click() time.sleep(2) self.__driver.switch_to.default_content() self.__logged = True def get_driver(self): return self.__driver def open_box_office(self): if not self.__logged: self.login() profile_icon_main = self.get_driver().find_element( By.XPATH, "//*[@id='root']/div/div/nav/div/div[1]/div") self.get_driver().execute_script( "arguments[0].scrollIntoView(true);", profile_icon_main) profile_icon_main.click() time.sleep(2) the_iframe_window = self.get_driver().find_element(By.ID, "kw-iframe") self.get_driver().switch_to.frame(the_iframe_window) self.click_back() time.sleep(2) def click_profile(self): profile_icon_window = self.get_driver().find_element( By.XPATH, "//*[@id='root']/div/div[1]/div[1]/div[1]/button[1]/img") profile_icon_window.click() time.sleep(2) def get_profile_items_len(self): self.open_box_office() self.click_profile() menu = [i.text for i in self.get_driver().find_elements( By.CLASS_NAME, 'account-menu__item')] menu.pop() self.click_profile() return len(menu) def click_back(self): self.get_driver().find_element( By.XPATH, "//div[@class='button-back']/*/*").click() time.sleep(2) def get_current_profile_page(self): return self.get_driver().find_element( By.CLASS_NAME, 'overlay-header__info-text').get_attribute("textContent") def get_profile_item(self, ind): return self.get_driver().find_element( By.XPATH, f"/html/body/div[2]/nav/a[{ind}]") def set_default(self): self.get_driver().switch_to.default_content() def get_profile_fields(self): return self.get_driver().find_elements(By.XPATH, "//*[@class='profile-form__field']//input")[:-1] def check_profile_error(self, ind): return not self.get_driver().find_element( By.XPATH, f"//*[@id='root']/div/div[1]/div[2]/div/div[2]/div[2]/div/div/form/div[{ind + 1}]/div[3]").is_displayed() def click_change_email(self): self.get_driver().find_element( By.XPATH, "//*[@id='root']/div/div[1]/div[2]/div/div[2]/div[2]/div/div/form/a[1]").click() time.sleep(1) def send_wrong_email(self): self.get_driver().find_element( By.XPATH, "//*[@id='root']/div/div[1]/div[2]/div/div[2]/div[2]/div/form/div[3]/div[2]/input").send_keys('a') def check_email_error(self): return not self.get_driver().find_element( By.XPATH, f"//div[@class='input__error']").is_displayed() def change_password_click(self): change_password = self.get_driver().find_element( By.XPATH, "//*[@id='root']/div/div[1]/div[2]/div/div[2]/div[2]/div/div/form/a[2]") self.get_driver().execute_script( "arguments[0].scrollIntoView(true);", change_password) change_password.click() time.sleep(1) def get_password_fields(self): return [self.get_driver().find_element(By.NAME, 'old_password'), self.get_driver().find_element(By.NAME, 'password'), self.get_driver().find_element(By.NAME, 'repeat_password')] def check_old_new_password_error(self): return not self.get_driver().find_element( By.XPATH, "//*[@id='root']/div/div[1]/div[2]/div/div[2]/div[2]/div/form/div[3]/div[2]/div[2]").is_displayed() def check_wrong_repeat_password_error(self): return not self.get_driver().find_element( By.XPATH, "//*[@id='root']/div/div[1]/div[2]/div/div[2]/div[2]/div/form/div[4]/div[2]/div[2]").is_displayed() def check_wrong_old_password_error(self): return not self.get_driver().find_element( By.XPATH, "//*[@id='root']/div/div[1]/div[2]/div/div[2]/div[2]/div/form/div[2]/div[2]/div[2]").is_displayed() def check_warnings_error(self): return not len(self.get_driver().find_elements( By.XPATH, "//div[@class='input__error']")) == 1 def click_change_password(self): self.get_driver().find_element(By.CLASS_NAME, 'login-form__button').click() time.sleep(1) def open_session(self): self.get_driver().find_element(By.XPATH, "//*[@id='root']/div/div/div/div[2]/div/a[1]/div[2]/div[2]/div/div[1]").click() time.sleep(3) the_iframe = self.get_driver().find_element(By.ID, "kw-iframe") self.get_driver().switch_to.frame(the_iframe) def open_film(self): film_name = self.get_driver().find_element( By.CLASS_NAME, 'hall-schema-popup__title').text self.get_driver().find_element(By.XPATH, "//*[@id='root']/div/div[1]/div[1]/div/div/div[4]/div[2]/div/div/canvas").click() time.sleep(1) return film_name def click_buy(self): self.get_driver().find_element( By.XPATH, "//button[@type='button']").click() time.sleep(2) def click_continue(self): self.get_driver().find_element( By.XPATH, "//button[text()='Продолжить']").click() time.sleep(2) def make_payment(self): self.get_driver().find_element( By.XPATH, "//span[text()='Оплатить через СБП']").click() time.sleep(2) def check_payment_shows(self): return self.get_driver().find_element(By.XPATH, "//*[text()='Отсканируйте и оплатите в приложении банка.']").is_displayed()