Skip to content
16 changes: 2 additions & 14 deletions lesson_7_calc_base.py
Original file line number Diff line number Diff line change
@@ -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} отобразился!")
11 changes: 2 additions & 9 deletions lesson_7_calc_test.py
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -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()
test_calculator_with_delay()
2 changes: 1 addition & 1 deletion lesson_7_shop_cart.py
Original file line number Diff line number Diff line change
Expand Up @@ -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))
return len(self.driver.find_elements(*self.cart_items))
2 changes: 1 addition & 1 deletion lesson_7_shop_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -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: $", "")
return total_text.replace("Total: $", "")
2 changes: 1 addition & 1 deletion lesson_7_shop_login.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
return self.driver.find_element(*self.error_message).text
12 changes: 3 additions & 9 deletions lesson_7_shop_ppage.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
return CartPage(self.driver)
10 changes: 3 additions & 7 deletions lesson_7_shop_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -35,4 +30,5 @@ def test_sauce_demo_checkout():
driver.quit()

if __name__ == "__main__":
test_sauce_demo_checkout()
test_sauce_demo_checkout()