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"]') 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.ID,"add-to-cart-sauce-labs-backpack") button_add.click() button_panier=driver.find_element(By.CLASS_NAME,"shopping_cart_link") button_panier.click() slip(2) 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()