import logging as log import pytest from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.options import Options import time from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException debug = False def slip(secondes): if debug: time.sleep(secondes) def element_visible_actif(elem): assert elem.is_displayed() assert elem.is_enabled() def writeInInput(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) # @pytest.mark.skip("Je veux pas le faire") def test_loginOK(): log.info("Test du Login avec succès") options = webdriver.FirefoxOptions() options.add_argument('--headless') driver = webdriver.Firefox(options=options) driver.get("https://www.saucedemo.com/") assert driver.current_url == "https://www.saucedemo.com/", "Nous ne somme pas sur la bonne page" username = driver.find_element(By.ID,"user-name") password = driver.find_element(By.ID,"password") login = driver.find_element(By.ID, "login-button") writeInInput(inputElement=username, text="standard_user") writeInInput(password, text="secret_sauce") login.click() assert driver.current_url == "https://www.saucedemo.com/inventory.html", "Nous ne somme pas sur la bonne page" driver.quit() # @pytest.mark.skip("JE VEUX PAS LE FAIRE") def test_login_KO_saucedemo(): options = webdriver.FirefoxOptions() options.add_argument('--headless') driver = webdriver.Firefox(options=options) url_sauce_demo="https://www.saucedemo.com/" titre_page="Swag Labs" driver.get(url_sauce_demo) log.info("Le titre de la page" + driver.title) log.info("L'URL de la page " + driver.current_url) assert driver.current_url==url_sauce_demo, "L'url de la page ouverte ("+ driver.current_url+") n'est pas égal à "+url_sauce_demo assert driver.title==titre_page, "Le titre de la page ("+driver.title+") n'est pas égal à " + titre_page champ_username = driver.find_element(By.XPATH,'//*[@id="user-name"]') log.info(champ_username) champ_username.send_keys("user565") log.info("texte du champ username"+champ_username.text) log.info("L'attribut du champ username est "+ champ_username.get_attribute("placeholder") ) assert champ_username.get_attribute("value")!="standard_user" champ_mdp = driver.find_element(By.CSS_SELECTOR,'#password') champ_mdp.send_keys("password") # champ_mdp.send_keys(Keys.RETURN) button_login = driver.find_element(By.ID,"login-button") button_login.click() assert driver.current_url==url_sauce_demo, "l'url de la page ouverte ("+ driver.current_url + ") n'est pas égal à " + url_sauce_demo message_erreur = driver.find_element(By.CSS_SELECTOR, "[data-test=error]") assert message_erreur.is_displayed(),"Le message d'erreur n'est pas affiché" assert message_erreur.text == "Epic sadface: Username and password do not match any user in this service" slip(5) driver.quit() # @pytest.mark.skip("JE VEUX PAS LE FAIRE") def test_login_OK_logout_saucedemo(): options = webdriver.FirefoxOptions() options.add_argument('--headless') driver = webdriver.Firefox(options=options) #driver.implicitly_wait(15) wait = WebDriverWait(driver,15) url_sauce_demo="https://www.saucedemo.com/" titre_page="Swag Labs" driver.get(url_sauce_demo) log.info("Le titre de la page" + driver.title) log.info("L'URL de la page " + driver.current_url) assert driver.current_url==url_sauce_demo, "L'url de la page ouverte ("+ driver.current_url+") n'est pas égal à "+url_sauce_demo assert driver.title==titre_page, "Le titre de la page ("+driver.title+") n'est pas égal à " + titre_page champ_username = driver.find_element(By.XPATH,'//*[@id="user-name"]') log.info(champ_username) champ_username.send_keys("standard_user") log.info("texte du champ username"+champ_username.text) log.info("L'attribut du champ username est "+ champ_username.get_attribute("placeholder") ) assert champ_username.get_attribute("value")=="standard_user" champ_mdp = driver.find_element(By.CSS_SELECTOR,'#password') champ_mdp.send_keys("secret_sauce") # champ_mdp.send_keys(Keys.RETURN) button_login = driver.find_element(By.ID,"login-button") element_visible_actif(button_login) button_login.click() assert driver.current_url=="https://www.saucedemo.com/inventory.html", "l'url de la page ouverte ("+ driver.current_url + ") n'est pas égal à https://www.saucedemo.com/inventory.html" button_burger= driver.find_element(By.ID,"react-burger-menu-btn") element_visible_actif(button_burger) button_burger.click() #button_logout= driver.find_element(By.ID,"logout_sidebar_link") try: button_logout=wait.until(EC.element_to_be_clickable((By.ID,"logout_sidebar_link"))) except TimeoutException: log.error("Erreur dans l'attennte explicite") #element_visible_actif(button_logout) #ça fonctionne pas très bien button_logout.click() assert driver.current_url==url_sauce_demo, "L'url de la page ouverte ("+ driver.current_url+") n'est pas égal à "+url_sauce_demo slip(2) driver.quit() # @pytest.mark.skip("JE VEUX PAS LE FAIRE") def test_ajout_panier(): options = webdriver.FirefoxOptions() options.add_argument('--headless') driver = webdriver.Firefox(options=options) #driver=webdriver.Chrome() url_sauce_demo="https://www.saucedemo.com/" driver.get(url_sauce_demo) champ_username = driver.find_element(By.XPATH,'//*[@id="user-name"]') champ_username.send_keys("standard_user") assert champ_username.get_attribute("value")=="standard_user" champ_mdp = driver.find_element(By.CSS_SELECTOR,'#password') champ_mdp.send_keys("secret_sauce") # champ_mdp.send_keys(Keys.RETURN) button_login = driver.find_element(By.ID,"login-button") element_visible_actif(button_login) button_login.click() slip(2) assert driver.current_url=="https://www.saucedemo.com/inventory.html", "l'url de la page ouverte ("+ driver.current_url + ") n'est pas égal à https://www.saucedemo.com/inventory.html" button_add=driver.find_element(By.ID,"add-to-cart-sauce-labs-backpack") element_visible_actif(button_add) button_add.click() slip(2) icone_panier=driver.find_element(By.CLASS_NAME,"shopping_cart_badge") assert icone_panier.text=="1", "l'icone du panier nn'affiche pas 1" button_add=driver.find_element(By.ID,"add-to-cart-sauce-labs-bolt-t-shirt") element_visible_actif(button_add) button_add.click() slip(2) icone_panier=driver.find_element(By.CLASS_NAME,"shopping_cart_badge") assert icone_panier.text=="2", "l'icone du panier n'affiche pas 2" button_panier=driver.find_element(By.CLASS_NAME,"shopping_cart_link") element_visible_actif(button_panier) button_panier.click() assert driver.current_url=="https://www.saucedemo.com/cart.html", "l'url de la page ouverte ("+ driver.current_url + ") n'est pas égal à https://www.saucedemo.com/cart.html" nom_article_panier=driver.find_element(By.ID,"item_4_title_link") element_visible_actif(nom_article_panier) assert nom_article_panier.text=="Sauce Labs Backpack" nom_article_panier=driver.find_element(By.ID,"item_1_title_link") element_visible_actif(nom_article_panier) assert nom_article_panier.text=="Sauce Labs Bolt T-Shirt" driver.quit() def exists_element_by_classname(driver, class_elt): try: driver.find_element(By.CLASS_NAME,class_elt) except: return False return True def exists_element_by_id(driver, class_elt): try: driver.find_element(By.ID,class_elt) except: return False return True #@pytest.mark.skip("JE VEUX PAS LE FAIRE") def test_click_button_add_to_cart(): log.info('Test sur le bouton "add to cart" change pour "remove" quand on clic dessus + bouton panier s\'incrémente') options = webdriver.FirefoxOptions() options.add_argument('--headless') driver = webdriver.Firefox(options=options) # driver=webdriver.Chrome() url_sauce_demo = "https://www.saucedemo.com/" driver.get(url_sauce_demo) # Vérification login champ_username = driver.find_element(By.XPATH,'//*[@id="user-name"]') champ_username.send_keys("standard_user") assert champ_username.get_attribute("value") == "standard_user" champ_mdp = driver.find_element(By.CSS_SELECTOR,'#password') champ_mdp.send_keys("secret_sauce") button_login = driver.find_element(By.ID,"login-button") element_visible_actif(button_login) button_login.click() assert driver.current_url == "https://www.saucedemo.com/inventory.html", "l'url de la page ouverte ("+ driver.current_url + ") n'est pas égal à https://www.saucedemo.com/inventory.html" # Récupérer état button "cart" : s'il a un badge récupérer le n° d'articles ajoutés, sinon n° article =0 nb_product_initial = 0 if exists_element_by_classname(driver,"shopping_cart_badge"): badge_panier = driver.find_element(By.CLASS_NAME,"shopping_cart_badge") nb_product_initial = int(badge_panier.text) log.info(f"à la connexion, il y a {nb_product_initial} dans le panier") # Vérification clic button "add to cart" change de texte vers "remove" button_add = driver.find_element(By.ID,"add-to-cart-sauce-labs-backpack") slip(2) button_add.click() log.info("click sur 'add to cart' change button and add a badge on icon cart") badge_panier = driver.find_element(By.CLASS_NAME,"shopping_cart_badge") nb_product = int(badge_panier.text) log.info(f"à l'ajout d'un article', il y a {nb_product} dans le panier") assert False == exists_element_by_id(driver,"add-to-cart-sauce-labs-backpack") assert True == exists_element_by_id(driver,"remove-sauce-labs-backpack") # et que le button "cart" a un badge avec n° incrémenté assert nb_product_initial+1 == nb_product # Vérification clic button "remove" change de texte vers "add to cart" button_remove = driver.find_element(By.ID,"remove-sauce-labs-backpack") slip(2) button_remove.click() log.info("click sur 'Remove' change button and remove the badge on icon cart") assert True == exists_element_by_id(driver,"add-to-cart-sauce-labs-backpack") assert False == exists_element_by_id(driver,"remove-sauce-labs-backpack") # Vérification button "cart" a un badge supprimé car 0 articles dans le panier assert False == exists_element_by_classname(driver,"shopping_cart_badge") driver.quit() def test_detail_article(): options = webdriver.FirefoxOptions() options.add_argument('--headless') driver = webdriver.Firefox(options=options) #driver=webdriver.Chrome() url_sauce_demo="https://www.saucedemo.com/" #Navigation sur le site: driver.get(url_sauce_demo) #Se logger: champ_username = driver.find_element(By.XPATH,'//*[@id="user-name"]') log.info(champ_username) champ_username.send_keys("standard_user") log.info("texte du champ username"+champ_username.text) log.info("L'attribut du champ username est "+ champ_username.get_attribute("placeholder") ) assert champ_username.get_attribute("value")=="standard_user" champ_mdp = driver.find_element(By.CSS_SELECTOR,'#password') champ_mdp.send_keys("secret_sauce") #champ_mdp.send_keys(Keys.RETURN) button_login = driver.find_element(By.ID,"login-button") element_visible_actif(button_login) button_login.click() assert driver.current_url=="https://www.saucedemo.com/inventory.html", "l'url de la page ouverte ("+ driver.current_url + ") n'est pas égal à https://www.saucedemo.com/inventory.html" button_add=driver.find_element(By.XPATH,'//*[@id="add-to-cart-sauce-labs-bolt-t-shirt"]') button_add.click() button_panier=driver.find_element(By.CLASS_NAME,"shopping_cart_link") button_panier.click() # vérifier si le panier s'ouvre if "cart" in driver.current_url: print("Cart button functionality is working.") else: print("There was an issue with the cart button.") # Vérifier si on a le bon article dans le panier correct_item_name = "Sauce Labs Bolt T-shirt" item_in_cart = driver.find_element(By.XPATH, f"//div[@class='inventory_item_name']") if item_in_cart: print(f"The correct item '{correct_item_name}' is in the cart.") else: print(f"The correct item '{correct_item_name}' is NOT in the cart.") slip(2) driver.quit()