test_saucedemo.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. import logging as log
  2. import pytest
  3. from selenium import webdriver
  4. from selenium.webdriver.common.by import By
  5. from selenium.webdriver.firefox.options import Options
  6. import time
  7. from selenium.webdriver.support.ui import WebDriverWait
  8. from selenium.webdriver.support import expected_conditions as EC
  9. from selenium.common.exceptions import TimeoutException
  10. debug = True
  11. def slip(secondes):
  12. if debug:
  13. time.sleep(secondes)
  14. def element_visible_actif(elem):
  15. assert elem.is_displayed()
  16. assert elem.is_enabled()
  17. def writeInInput(inputElement, text):
  18. assert inputElement.is_displayed(), "Le champ texte n'est pas affiché"
  19. assert inputElement.is_enabled(), "Le champ texte n'est pas activé"
  20. inputElement.clear()
  21. inputElement.send_keys(text)
  22. @pytest.mark.skip("Je veux pas le faire")
  23. def test_loginOK():
  24. log.info("Test du Login avec succès")
  25. options = webdriver.FirefoxOptions()
  26. options.add_argument('--headless')
  27. driver = webdriver.Firefox(options=options)
  28. driver.get("https://www.saucedemo.com/")
  29. assert driver.current_url == "https://www.saucedemo.com/", "Nous ne somme pas sur la bonne page"
  30. username = driver.find_element(By.ID,"user-name")
  31. password = driver.find_element(By.ID,"password")
  32. login = driver.find_element(By.ID, "login-button")
  33. writeInInput(inputElement=username, text="standard_user")
  34. writeInInput(password, text="secret_sauce")
  35. login.click()
  36. assert driver.current_url == "https://www.saucedemo.com/inventory.html", "Nous ne somme pas sur la bonne page"
  37. driver.quit()
  38. @pytest.mark.skip("JE VEUX PAS LE FAIRE")
  39. def test_login_KO_saucedemo():
  40. options = webdriver.FirefoxOptions()
  41. options.add_argument('--headless')
  42. driver = webdriver.Firefox(options=options)
  43. url_sauce_demo="https://www.saucedemo.com/"
  44. titre_page="Swag Labs"
  45. driver.get(url_sauce_demo)
  46. log.info("Le titre de la page" + driver.title)
  47. log.info("L'URL de la page " + driver.current_url)
  48. assert driver.current_url==url_sauce_demo, "L'url de la page ouverte ("+ driver.current_url+") n'est pas égal à "+url_sauce_demo
  49. assert driver.title==titre_page, "Le titre de la page ("+driver.title+") n'est pas égal à " + titre_page
  50. champ_username = driver.find_element(By.XPATH,'//*[@id="user-name"]')
  51. log.info(champ_username)
  52. champ_username.send_keys("user565")
  53. log.info("texte du champ username"+champ_username.text)
  54. log.info("L'attribut du champ username est "+ champ_username.get_attribute("placeholder") )
  55. assert champ_username.get_attribute("value")!="standard_user"
  56. champ_mdp = driver.find_element(By.CSS_SELECTOR,'#password')
  57. champ_mdp.send_keys("password")
  58. # champ_mdp.send_keys(Keys.RETURN)
  59. button_login = driver.find_element(By.ID,"login-button")
  60. button_login.click()
  61. assert driver.current_url==url_sauce_demo, "l'url de la page ouverte ("+ driver.current_url + ") n'est pas égal à " + url_sauce_demo
  62. message_erreur = driver.find_element(By.CSS_SELECTOR, "[data-test=error]")
  63. assert message_erreur.is_displayed(),"Le message d'erreur n'est pas affiché"
  64. assert message_erreur.text == "Epic sadface: Username and password do not match any user in this service"
  65. slip(5)
  66. driver.quit()
  67. @pytest.mark.skip("JE VEUX PAS LE FAIRE")
  68. def test_login_OK_logout_saucedemo():
  69. options = webdriver.FirefoxOptions()
  70. options.add_argument('--headless')
  71. driver = webdriver.Firefox(options=options)
  72. #driver.implicitly_wait(15)
  73. wait = WebDriverWait(driver,15)
  74. url_sauce_demo="https://www.saucedemo.com/"
  75. titre_page="Swag Labs"
  76. driver.get(url_sauce_demo)
  77. log.info("Le titre de la page" + driver.title)
  78. log.info("L'URL de la page " + driver.current_url)
  79. assert driver.current_url==url_sauce_demo, "L'url de la page ouverte ("+ driver.current_url+") n'est pas égal à "+url_sauce_demo
  80. assert driver.title==titre_page, "Le titre de la page ("+driver.title+") n'est pas égal à " + titre_page
  81. champ_username = driver.find_element(By.XPATH,'//*[@id="user-name"]')
  82. log.info(champ_username)
  83. champ_username.send_keys("standard_user")
  84. log.info("texte du champ username"+champ_username.text)
  85. log.info("L'attribut du champ username est "+ champ_username.get_attribute("placeholder") )
  86. assert champ_username.get_attribute("value")=="standard_user"
  87. champ_mdp = driver.find_element(By.CSS_SELECTOR,'#password')
  88. champ_mdp.send_keys("secret_sauce")
  89. # champ_mdp.send_keys(Keys.RETURN)
  90. button_login = driver.find_element(By.ID,"login-button")
  91. element_visible_actif(button_login)
  92. button_login.click()
  93. 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"
  94. button_burger= driver.find_element(By.ID,"react-burger-menu-btn")
  95. element_visible_actif(button_burger)
  96. button_burger.click()
  97. #button_logout= driver.find_element(By.ID,"logout_sidebar_link")
  98. try:
  99. button_logout=wait.until(EC.element_to_be_clickable((By.ID,"logout_sidebar_link")))
  100. except TimeoutException:
  101. log.error("Erreur dans l'attennte explicite")
  102. #element_visible_actif(button_logout) #ça fonctionne pas très bien
  103. button_logout.click()
  104. assert driver.current_url==url_sauce_demo, "L'url de la page ouverte ("+ driver.current_url+") n'est pas égal à "+url_sauce_demo
  105. slip(2)
  106. driver.quit()
  107. @pytest.mark.skip("JE VEUX PAS LE FAIRE")
  108. def test_ajout_panier():
  109. options = webdriver.FirefoxOptions()
  110. options.add_argument('--headless')
  111. driver = webdriver.Firefox(options=options)
  112. #driver=webdriver.Chrome()
  113. url_sauce_demo="https://www.saucedemo.com/"
  114. driver.get(url_sauce_demo)
  115. champ_username = driver.find_element(By.XPATH,'//*[@id="user-name"]')
  116. champ_username.send_keys("standard_user")
  117. assert champ_username.get_attribute("value")=="standard_user"
  118. champ_mdp = driver.find_element(By.CSS_SELECTOR,'#password')
  119. champ_mdp.send_keys("secret_sauce")
  120. # champ_mdp.send_keys(Keys.RETURN)
  121. button_login = driver.find_element(By.ID,"login-button")
  122. element_visible_actif(button_login)
  123. button_login.click()
  124. slip(2)
  125. 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"
  126. button_add=driver.find_element(By.ID,"add-to-cart-sauce-labs-backpack")
  127. element_visible_actif(button_add)
  128. button_add.click()
  129. slip(2)
  130. icone_panier=driver.find_element(By.CLASS_NAME,"shopping_cart_badge")
  131. assert icone_panier.text=="1", "l'icone du panier nn'affiche pas 1"
  132. button_add=driver.find_element(By.ID,"add-to-cart-sauce-labs-bolt-t-shirt")
  133. element_visible_actif(button_add)
  134. button_add.click()
  135. slip(2)
  136. icone_panier=driver.find_element(By.CLASS_NAME,"shopping_cart_badge")
  137. assert icone_panier.text=="2", "l'icone du panier n'affiche pas 2"
  138. button_panier=driver.find_element(By.CLASS_NAME,"shopping_cart_link")
  139. element_visible_actif(button_panier)
  140. button_panier.click()
  141. 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"
  142. nom_article_panier=driver.find_element(By.ID,"item_4_title_link")
  143. element_visible_actif(nom_article_panier)
  144. assert nom_article_panier.text=="Sauce Labs Backpack"
  145. nom_article_panier=driver.find_element(By.ID,"item_1_title_link")
  146. element_visible_actif(nom_article_panier)
  147. assert nom_article_panier.text=="Sauce Labs Bolt T-Shirt"
  148. driver.quit()
  149. def exists_element_by_class(driver, class_elt):
  150. try:
  151. driver.find_element(By.CLASS_NAME,class_elt)
  152. except:
  153. return False
  154. return True
  155. #@pytest.mark.skip("JE VEUX PAS LE FAIRE")
  156. def test_click_button_add_to_cart():
  157. log.info('Test sur le bouton "add to cart" change pour "remove" quand on clic dessus + bouton panier s\'incrémente')
  158. options = webdriver.FirefoxOptions()
  159. options.add_argument('--headless')
  160. driver = webdriver.Firefox(options=options)
  161. # driver=webdriver.Chrome()
  162. url_sauce_demo = "https://www.saucedemo.com/"
  163. driver.get(url_sauce_demo)
  164. # Vérification login
  165. champ_username = driver.find_element(By.XPATH,'//*[@id="user-name"]')
  166. champ_username.send_keys("standard_user")
  167. assert champ_username.get_attribute("value") == "standard_user"
  168. champ_mdp = driver.find_element(By.CSS_SELECTOR,'#password')
  169. champ_mdp.send_keys("secret_sauce")
  170. button_login = driver.find_element(By.ID,"login-button")
  171. element_visible_actif(button_login)
  172. button_login.click()
  173. 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"
  174. # Récupérer état button "cart" : s'il a un badge récupérer le n° d'articles ajoutés, sinon n° article =0
  175. nb_product_initial = 0
  176. if exists_element_by_class(driver,"add-to-cart-sauce-labs-backpack") and exists_element_by_class(driver,"shopping_cart_badge"):
  177. badge_panier = driver.find_element(By.CLASS_NAME,"shopping_cart_badge")
  178. nb_product_initial = badge_panier.text
  179. log.info(f"à la connexion, il y a {nb_product_initial} dans le panier")
  180. slip(2)
  181. # Vérification clic button "add to cart" change de texte vers "remove"
  182. button_add = driver.find_element(By.ID,"add-to-cart-sauce-labs-backpack")
  183. button_add.click()
  184. badge_panier = driver.find_element(By.CLASS_NAME,"shopping_cart_badge")
  185. log.info(f"à l'ajout d'un article', il y a {badge_panier.text} dans le panier")
  186. slip(2)
  187. #assert False == exists_element_by_class(driver,"add-to-cart-sauce-labs-backpack")
  188. #assert True == exists_element_by_class(driver,"remove-sauce-labs-backpack")
  189. # et que le button "cart" a un badge avec n° incrémenté
  190. assert str(nb_product_initial+1) == badge_panier.text
  191. # Vérification clic button "remove" change de texte vers "add to cart"
  192. log.info("click sur 'add to cart' change button and add a badge on icon cart")
  193. # Vérification button "cart" a un badge avec n° incrémenté ou supprimé si de 1 à 0
  194. slip(2)
  195. driver.quit()