|
| 1 | +import pytest |
| 2 | +from selenium import webdriver |
| 3 | +from selenium.webdriver.firefox.service import Service |
| 4 | +from selenium.webdriver.firefox.options import Options as FirefoxOptions |
| 5 | +from pages.inventory_page import InventoryPage |
| 6 | +from pages.login_page import LoginPage |
| 7 | +from pages.cart_page import CartPage |
| 8 | +from webdriver_manager.firefox import GeckoDriverManager |
| 9 | +from config import config_for_login_page |
| 10 | +from config.config_for_cart_page import PRODUCTS |
| 11 | + |
| 12 | +@pytest.fixture(scope="function") |
| 13 | +def cart_page_with_items(request): |
| 14 | + firefox_options = FirefoxOptions() |
| 15 | + firefox_options.add_argument("--disable-notifications") |
| 16 | + firefox_options.add_argument("--headless") |
| 17 | + firefox_options.set_preference("security.password_lifetime", 0) |
| 18 | + firefox_options.set_preference("signon.rememberSignons", False) |
| 19 | + firefox_options.set_preference("signon.autofillForms", False) |
| 20 | + firefox_options.set_preference("privacy.trackingprotection.enabled", True) |
| 21 | + driver = webdriver.Firefox(service=Service(GeckoDriverManager().install()), options=firefox_options) |
| 22 | + login_page = LoginPage(driver) |
| 23 | + login_page.open_page() |
| 24 | + login_page.insert_user_name(config_for_login_page.CREDENTIALS["standard_user"]["username"]) |
| 25 | + login_page.insert_password(config_for_login_page.CREDENTIALS["standard_user"]["password"]) |
| 26 | + login_page.click_login_button() |
| 27 | + assert login_page.driver.current_url == "https://www.saucedemo.com/inventory.html" |
| 28 | + inventory = InventoryPage(driver) |
| 29 | + inventory.add_multiple_products(["bike_light", "backpack"]) |
| 30 | + inventory.go_to_cart() |
| 31 | + cart_page = CartPage(driver) |
| 32 | + request.addfinalizer(driver.quit) |
| 33 | + return cart_page |
| 34 | + |
| 35 | + |
| 36 | +def test_verify_cart_items(cart_page_with_items): |
| 37 | + items = cart_page_with_items.get_cart_items() |
| 38 | + badge = cart_page_with_items.get_cart_badge_count() |
| 39 | + assert len(items)==2 |
| 40 | + assert "Sauce Labs Bike Light" in items |
| 41 | + assert badge == '2' |
| 42 | + print(f"Items: {items}, Badge: {badge}") |
| 43 | + |
| 44 | +@pytest.mark.parametrize("product_key, expected_badge_after", [("bike_light",'1'), ("backpack",'1')]) |
| 45 | + |
| 46 | +def test_remove_single_item(cart_page_with_items, product_key, expected_badge_after): |
| 47 | + success = cart_page_with_items.remove_item(product_key) |
| 48 | + items_after = cart_page_with_items.get_cart_items() |
| 49 | + badge_after = cart_page_with_items.get_cart_badge_count() |
| 50 | + assert success == True |
| 51 | + assert badge_after == expected_badge_after |
| 52 | + assert PRODUCTS [product_key]["display_name"] not in items_after |
| 53 | + |
| 54 | +def test_remove_all_items(cart_page_with_items): |
| 55 | + products = ["bike_light", "backpack"] |
| 56 | + for p in products: |
| 57 | + cart_page_with_items.remove_item(p) |
| 58 | + |
| 59 | + assert len(cart_page_with_items.get_cart_items()) == 0 |
| 60 | + assert cart_page_with_items.get_cart_badge_count() == '0' |
| 61 | + |
| 62 | +def test_start_checkout(cart_page_with_items): |
| 63 | + assert cart_page_with_items.is_checkout_button_visible() == True |
| 64 | + cart_page_with_items.start_checkout() |
| 65 | + assert "checkout-step-one.html" in cart_page_with_items.driver.current_url |
| 66 | + print(f"Current URL after checkout: {cart_page_with_items.driver.current_url}") |
| 67 | + |
0 commit comments