123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- 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()
|