123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 |
- ##### 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"
- )
|