diff --git a/lesson_7_calc_base.py b/lesson_7_calc_base.py index 86df29e..4c11bd1 100644 --- a/lesson_7_calc_base.py +++ b/lesson_7_calc_base.py @@ -1,37 +1,25 @@ from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC class CalculatorPage: def __init__(self, driver): self.driver = driver self.delay_field = (By.CSS_SELECTOR, "#delay") self.result_field = (By.CSS_SELECTOR, ".screen") - - self.buttons = { - "7": (By.XPATH, "//span[contains(@class, 'btn') and text()='7']"), - "8": (By.XPATH, "//span[contains(@class, 'btn') and text()='8']"), - "+": (By.XPATH, "//span[contains(@class, 'btn') and text()='+']"), - "=": (By.XPATH, "//span[contains(@class, 'btn') and text()='=']"), - } + self.button_locator = "//span[contains(@class, 'btn') and text()='{}']" def open(self): self.driver.get("https://bonigarcia.dev/selenium-webdriver-java/slow-calculator.html") def set_delay(self, delay_seconds): - """Устанавливает задержку вычислений""" delay_input = self.driver.find_element(*self.delay_field) delay_input.clear() delay_input.send_keys(str(delay_seconds)) def click_button(self, button): - """Нажимает кнопку калькулятора""" - button_locator = self.buttons[button] - self.driver.find_element(*button_locator).click() + self.driver.find_element(By.XPATH, self.button_locator.format(button)).click() def wait_for_result(self, expected_result, timeout=50): - """Ждет пока результат не станет равен expected_result""" WebDriverWait(self.driver, timeout).until( lambda driver: driver.find_element(*self.result_field).text == expected_result ) - print(f"✅ Результат {expected_result} отобразился!") \ No newline at end of file diff --git a/lesson_7_calc_test.py b/lesson_7_calc_test.py index 5e64633..235e6cf 100644 --- a/lesson_7_calc_test.py +++ b/lesson_7_calc_test.py @@ -1,8 +1,6 @@ -import pytest from selenium import webdriver from lesson_7_calc_base import CalculatorPage - def test_calculator_with_delay(): driver = webdriver.Chrome() calculator = CalculatorPage(driver) @@ -11,18 +9,13 @@ def test_calculator_with_delay(): calculator.set_delay(45) calculator.click_button("7") - driver.save_screenshot("b7.png") calculator.click_button("+") - driver.save_screenshot("b+.png") calculator.click_button("8") calculator.click_button("=") - driver.save_screenshot("b=.png") - calculator.wait_for_result("15") - driver.save_screenshot("result.png") - print("✅ Тест пройден!") + calculator.wait_for_result("15", timeout=50) driver.quit() if __name__ == "__main__": - test_calculator_with_delay() \ No newline at end of file + test_calculator_with_delay() diff --git a/lesson_7_shop_cart.py b/lesson_7_shop_cart.py index c31112c..e967500 100644 --- a/lesson_7_shop_cart.py +++ b/lesson_7_shop_cart.py @@ -14,4 +14,4 @@ def click_checkout(self): return CheckoutPage(self.driver) def get_cart_items_count(self): - return len(self.driver.find_elements(*self.cart_items)) \ No newline at end of file + return len(self.driver.find_elements(*self.cart_items)) diff --git a/lesson_7_shop_check.py b/lesson_7_shop_check.py index d55f2af..8aa8ff8 100644 --- a/lesson_7_shop_check.py +++ b/lesson_7_shop_check.py @@ -20,4 +20,4 @@ def fill_checkout_form(self, first_name, last_name, postal_code): def get_total_amount(self): self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") total_text = self.driver.find_element(*self.total_amount).text - return total_text.replace("Total: $", "") \ No newline at end of file + return total_text.replace("Total: $", "") diff --git a/lesson_7_shop_login.py b/lesson_7_shop_login.py index 83bde4e..80f99fd 100644 --- a/lesson_7_shop_login.py +++ b/lesson_7_shop_login.py @@ -19,4 +19,4 @@ def login(self, username, password): self.driver.find_element(*self.login_button).click() def get_error_message(self): - return self.driver.find_element(*self.error_message).text \ No newline at end of file + return self.driver.find_element(*self.error_message).text diff --git a/lesson_7_shop_ppage.py b/lesson_7_shop_ppage.py index 98d48e4..ce630d9 100644 --- a/lesson_7_shop_ppage.py +++ b/lesson_7_shop_ppage.py @@ -7,17 +7,11 @@ class ProductsPage: def __init__(self, driver): self.driver = driver self.shopping_cart = (By.CLASS_NAME, "shopping_cart_link") - - self.add_to_cart_buttons = { - "Sauce Labs Backpack": (By.ID, "add-to-cart-sauce-labs-backpack"), - "Sauce Labs Bolt T-Shirt": (By.ID, "add-to-cart-sauce-labs-bolt-t-shirt"), - "Sauce Labs Onesie": (By.ID, "add-to-cart-sauce-labs-onesie") - } + self.add_button_locator = "//div[text()='{}']/ancestor::div[@class='inventory_item']//button" def add_product_to_cart(self, product_name): - button_locator = self.add_to_cart_buttons[product_name] - self.driver.find_element(*button_locator).click() + self.driver.find_element(By.XPATH, self.add_button_locator.format(product_name)).click() def go_to_cart(self): self.driver.find_element(*self.shopping_cart).click() - return CartPage(self.driver) \ No newline at end of file + return CartPage(self.driver) diff --git a/lesson_7_shop_test.py b/lesson_7_shop_test.py index 7958f30..e07f925 100644 --- a/lesson_7_shop_test.py +++ b/lesson_7_shop_test.py @@ -8,25 +8,20 @@ def test_sauce_demo_checkout(): driver = webdriver.Chrome() - # 1. Открываем сайт и авторизуемся login_page = LoginPage(driver) login_page.open() login_page.login("standard_user", "secret_sauce") - # 2. Добавляем товары в корзину products_page = ProductsPage(driver) products_page.add_product_to_cart("Sauce Labs Backpack") products_page.add_product_to_cart("Sauce Labs Bolt T-Shirt") products_page.add_product_to_cart("Sauce Labs Onesie") - # 3. Переходим в корзину и нажимаем Checkout cart_page = products_page.go_to_cart() checkout_page = cart_page.click_checkout() - - # 4. Заполняем форму оформления заказа + checkout_page.fill_checkout_form("Иван", "Петров", "123456") - # 5. Получаем итоговую стоимость и проверяем total = checkout_page.get_total_amount() assert total == "58.29", f"Ожидалась сумма 58.29, но получили {total}" driver.save_screenshot("Shop_result.png") @@ -35,4 +30,5 @@ def test_sauce_demo_checkout(): driver.quit() if __name__ == "__main__": - test_sauce_demo_checkout() \ No newline at end of file + test_sauce_demo_checkout() +