##### IMPORT import pytest import logging as log import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support.ui import Select from selenium.webdriver.firefox.options import Options from test_saucedemo import writeInInput import os class TestSauceDemo: ##### METHODES PYTEST def setup_method(self, method): log.info("Methode de SETUP AVANT CHAQUE TEST") if self.is_windows(): self.driver = webdriver.Firefox() else: options = webdriver.FirefoxOptions() options.add_argument("--headless") self.driver = webdriver.Firefox(options=options) self.driver.get("http://www.saucedemo.com") assert ( self.driver.current_url == "https://www.saucedemo.com/" ), "Nous ne somme pas sur la bonne page" def teardown_method(self, method): log.info("Methode de TEARDOWN APRES CHAQUE TEST") self.driver.quit() ##### METHODES DIVERS def is_windows(self): # oups res = False if os.name == "nt": res == True return res def writeInInput(self, inputElement, text): assert inputElement.is_displayed(), "Le champ texte n'est pas affiché" assert inputElement.is_enabled(), "Le champ texte n'est pas activé" inputElement.clear() inputElement.send_keys(text) def login(self): username = self.driver.find_element(By.ID, "user-name") password = self.driver.find_element(By.ID, "password") login = self.driver.find_element(By.ID, "login-button") writeInInput(inputElement=username, text="standard_user") writeInInput(password, text="secret_sauce") login.click() def login_custum(self, user, pwd): username = self.driver.find_element(By.ID, "user-name") password = self.driver.find_element(By.ID, "password") login = self.driver.find_element(By.ID, "login-button") writeInInput(inputElement=username, text=user) writeInInput(password, text=pwd) login.click() def logout(self): burger = self.driver.find_element(By.ID, "react-burger-menu-btn") burger.click() logout = self.driver.find_element(By.ID, "logout_sidebar_link") logout.click() def add_item(self, item): self.driver.find_element(By.ID, f"add-to-cart-sauce-labs-{item}").click() return item def go_to_checkout(self): checkout = self.driver.find_element(By.CSS_SELECTOR, "#checkout") checkout.click() def fill_checkout(self,name1,name2,zip): first_name=self.driver.find_element(By.ID,"first-name") last_name=self.driver.find_element(By.ID,"last-name") zip_code=self.driver.find_element(By.ID,"postal-code") writeInInput(inputElement=first_name, text=name1) writeInInput(inputElement=last_name, text=name2) writeInInput(inputElement=zip_code, text=zip) ##### TEST ABBAS #@pytest.mark.skip("") def test_saucedemo_boutenbout(self): self.login() self.logout() ##### TEST MANEL #@pytest.mark.skip("") def test_login_bad_username(self): self.login_custum("test", "secret_sauce") erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]") assert erreur_message.is_displayed(), "Pas de message d'erreur " assert ( erreur_message.text == "Epic sadface: Username and password do not match any user in this service" ), "le message est erroné" #@pytest.mark.skip("") def test_login_bad_passwrd(self): self.login_custum("standard_user", "test") erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]") assert erreur_message.is_displayed(), "Pas de message d'erreur " assert ( erreur_message.text == "Epic sadface: Username and password do not match any user in this service" ), "le message est erroné" def test_login_bad_username_and_bad_passwrd(self): self.login_custum("test", "test") erreur_message = self.driver.find_element(By.CSS_SELECTOR,'[data-test=error]') assert erreur_message.is_displayed(), "Pas de message d\'erreur " assert erreur_message.text == "Epic sadface: Username and password do not match any user in this service", "le message est erroné" def test_login_username_vide(self): self.login_custum("", "secret_sauce") erreur_message = self.driver.find_element(By.CSS_SELECTOR,'#login_button_container > div > form > div.error-message-container.error > h3') assert erreur_message.is_displayed(), "Pas de message d\'erreur " assert erreur_message.text == "Epic sadface: Username is required", "le message est erroné" def test_login_paswrd_vide(self): self.login_custum("standard_user", "") erreur_message = self.driver.find_element(By.CSS_SELECTOR,'#login_button_container > div > form > div.error-message-container.error > h3') assert erreur_message.is_displayed(), "Pas de message d\'erreur " assert erreur_message.text == "Epic sadface: Password is required", "le message est erroné" def test_login_username_and_pswerd_vide(self): self.login_custum("", "") erreur_message = self.driver.find_element(By.CSS_SELECTOR,'#login_button_container > div > form > div.error-message-container.error') assert erreur_message.is_displayed(), "Pas de message d\'erreur " assert erreur_message.text == "Epic sadface: Username is required", "le message est erroné" ##### MATTHIEU def go_to_checkout(self): checkout = self.driver.find_element(By.CSS_SELECTOR, "#checkout") checkout.click() # @pytest.mark.skip("") def test_affichage_Checkout(self): log.info("Test de la redirection sur la page de Checkout") # connexion Swag Labs self.login() # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire self.add_item("bike-light") # affichage panier -- A changer si Tiff implémente une fonction pour le faire panier_btn = self.driver.find_element(By.ID, "shopping_cart_container") panier_btn.click() # redirection vers la page de checkout self.go_to_checkout() assert ( self.driver.current_url == "https://www.saucedemo.com/checkout-step-one.html" ), "Nous ne somme pas sur la bonne page" def test_Checkout_3_champs_vides(self): log.info("Test Checkout avec tous les champs vides") # connexion Swag Labs self.login() # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire self.add_item("bike-light") # affichage panier -- A changer si Tiff implémente une fonction pour le faire panier_btn = self.driver.find_element(By.ID, "shopping_cart_container") panier_btn.click() # redirection vers la page de checkout self.go_to_checkout() self.fill_checkout("","","") continue_btn = self.driver.find_element(By.ID, "continue") continue_btn.click() erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]") assert erreur_message.is_displayed(), "Pas de message d'erreur " assert ( erreur_message.text == "Error: First Name is required" ), "le message est erroné" def test_Checkout_first_name_vide(self): log.info("Test Checkout avec le champ first name vide") # connexion Swag Labs self.login() # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire self.add_item("bike-light") # affichage panier -- A changer si Tiff implémente une fonction pour le faire panier_btn = self.driver.find_element(By.ID, "shopping_cart_container") panier_btn.click() # redirection vers la page de checkout self.go_to_checkout() self.fill_checkout("","Familly_name","999999") continue_btn = self.driver.find_element(By.ID, "continue") continue_btn.click() erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]") assert erreur_message.is_displayed(), "Pas de message d'erreur " assert ( erreur_message.text == "Error: First Name is required" ), "le message est erroné" def test_Checkout_first_name_vide(self): log.info("Test Checkout avec le champ last name vide") # connexion Swag Labs self.login() # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire self.add_item("bike-light") # affichage panier -- A changer si Tiff implémente une fonction pour le faire panier_btn = self.driver.find_element(By.ID, "shopping_cart_container") panier_btn.click() # redirection vers la page de checkout self.go_to_checkout() self.fill_checkout("First","","999999") continue_btn = self.driver.find_element(By.ID, "continue") continue_btn.click() erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]") assert erreur_message.is_displayed(), "Pas de message d'erreur " assert ( erreur_message.text == "Error: Last Name is required" ), "le message est erroné" def test_Checkout_first_name_vide(self): log.info("Test Checkout avec le champ zip code vide") # connexion Swag Labs self.login() # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire self.add_item("bike-light") # affichage panier -- A changer si Tiff implémente une fonction pour le faire panier_btn = self.driver.find_element(By.ID, "shopping_cart_container") panier_btn.click() # redirection vers la page de checkout self.go_to_checkout() self.fill_checkout("First","Familly_name","") continue_btn = self.driver.find_element(By.ID, "continue") continue_btn.click() erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]") assert erreur_message.is_displayed(), "Pas de message d'erreur " assert ( erreur_message.text == "Error: Postal Code is required" ), "le message est erroné" def test_Checkout_ok(self): log.info("Test Checkout OK") # connexion Swag Labs self.login() # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire self.add_item("bike-light") # affichage panier -- A changer si Tiff implémente une fonction pour le faire panier_btn = self.driver.find_element(By.ID, "shopping_cart_container") panier_btn.click() # redirection vers la page de checkout self.go_to_checkout() self.fill_checkout("First","Familly_name","9999") continue_btn = self.driver.find_element(By.ID, "continue") continue_btn.click() assert ( self.driver.current_url == "https://www.saucedemo.com/checkout-step-two.html" ), "Nous ne somme pas sur la bonne page" ##### TEST TIFF @pytest.mark.skip("") def test_add_item(self): self.login() backpack_item = "backpack" add_to_cart_button = self.driver.find_element( By.ID, f"add-to-cart-sauce-labs-{backpack_item}" ) self.add_item(backpack_item) log.info(f"Le bouton : {add_to_cart_button} est cliqué") post_add_item_click = self.driver.find_element( By.ID, f"remove-sauce-labs-{backpack_item}" ) assert ( add_to_cart_button == post_add_item_click ), f"Le bouton {add_to_cart_button} ne correspond pas au résultat attendu qui est : {post_add_item_click}" log.info( f"Avant d'ajouter l'item le bouton proposé est : {add_to_cart_button} et le bouton est : {post_add_item_click} après ajout de l'item" )