test_saucedemo.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  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 = False
  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_classname(driver, class_elt):
  150. try:
  151. driver.find_element(By.CLASS_NAME,class_elt)
  152. except:
  153. return False
  154. return True
  155. def exists_element_by_id(driver, class_elt):
  156. try:
  157. driver.find_element(By.ID,class_elt)
  158. except:
  159. return False
  160. return True
  161. #@pytest.mark.skip("JE VEUX PAS LE FAIRE")
  162. def test_click_button_add_to_cart():
  163. log.info('Test sur le bouton "add to cart" change pour "remove" quand on clic dessus + bouton panier s\'incrémente')
  164. options = webdriver.FirefoxOptions()
  165. options.add_argument('--headless')
  166. driver = webdriver.Firefox(options=options)
  167. # driver=webdriver.Chrome()
  168. url_sauce_demo = "https://www.saucedemo.com/"
  169. driver.get(url_sauce_demo)
  170. # Vérification login
  171. champ_username = driver.find_element(By.XPATH,'//*[@id="user-name"]')
  172. champ_username.send_keys("standard_user")
  173. assert champ_username.get_attribute("value") == "standard_user"
  174. champ_mdp = driver.find_element(By.CSS_SELECTOR,'#password')
  175. champ_mdp.send_keys("secret_sauce")
  176. button_login = driver.find_element(By.ID,"login-button")
  177. element_visible_actif(button_login)
  178. button_login.click()
  179. 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"
  180. # Récupérer état button "cart" : s'il a un badge récupérer le n° d'articles ajoutés, sinon n° article =0
  181. nb_product_initial = 0
  182. if exists_element_by_classname(driver,"shopping_cart_badge"):
  183. badge_panier = driver.find_element(By.CLASS_NAME,"shopping_cart_badge")
  184. nb_product_initial = int(badge_panier.text)
  185. log.info(f"à la connexion, il y a {nb_product_initial} dans le panier")
  186. # Vérification clic button "add to cart" change de texte vers "remove"
  187. button_add = driver.find_element(By.ID,"add-to-cart-sauce-labs-backpack")
  188. slip(2)
  189. button_add.click()
  190. log.info("click sur 'add to cart' change button and add a badge on icon cart")
  191. badge_panier = driver.find_element(By.CLASS_NAME,"shopping_cart_badge")
  192. nb_product = int(badge_panier.text)
  193. log.info(f"à l'ajout d'un article', il y a {nb_product} dans le panier")
  194. assert False == exists_element_by_id(driver,"add-to-cart-sauce-labs-backpack")
  195. assert True == exists_element_by_id(driver,"remove-sauce-labs-backpack")
  196. # et que le button "cart" a un badge avec n° incrémenté
  197. assert nb_product_initial+1 == nb_product
  198. # Vérification clic button "remove" change de texte vers "add to cart"
  199. button_remove = driver.find_element(By.ID,"remove-sauce-labs-backpack")
  200. slip(2)
  201. button_remove.click()
  202. log.info("click sur 'Remove' change button and remove the badge on icon cart")
  203. assert True == exists_element_by_id(driver,"add-to-cart-sauce-labs-backpack")
  204. assert False == exists_element_by_id(driver,"remove-sauce-labs-backpack")
  205. # Vérification button "cart" a un badge supprimé car 0 articles dans le panier
  206. assert False == exists_element_by_classname(driver,"shopping_cart_badge")
  207. driver.quit()
  208. def test_detail_article():
  209. options = webdriver.FirefoxOptions()
  210. options.add_argument('--headless')
  211. driver = webdriver.Firefox(options=options)
  212. #driver=webdriver.Chrome()
  213. url_sauce_demo="https://www.saucedemo.com/"
  214. #Navigation sur le site:
  215. driver.get(url_sauce_demo)
  216. #Se logger:
  217. champ_username = driver.find_element(By.XPATH,'//*[@id="user-name"]')
  218. log.info(champ_username)
  219. champ_username.send_keys("standard_user")
  220. log.info("texte du champ username"+champ_username.text)
  221. log.info("L'attribut du champ username est "+ champ_username.get_attribute("placeholder") )
  222. assert champ_username.get_attribute("value")=="standard_user"
  223. champ_mdp = driver.find_element(By.CSS_SELECTOR,'#password')
  224. champ_mdp.send_keys("secret_sauce")
  225. #champ_mdp.send_keys(Keys.RETURN)
  226. button_login = driver.find_element(By.ID,"login-button")
  227. element_visible_actif(button_login)
  228. button_login.click()
  229. 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"
  230. button_add=driver.find_element(By.XPATH,'//*[@id="add-to-cart-sauce-labs-bolt-t-shirt"]')
  231. button_add.click()
  232. button_panier=driver.find_element(By.CLASS_NAME,"shopping_cart_link")
  233. button_panier.click()
  234. # vérifier si le panier s'ouvre
  235. if "cart" in driver.current_url:
  236. print("Cart button functionality is working.")
  237. else:
  238. print("There was an issue with the cart button.")
  239. # Vérifier si on a le bon article dans le panier
  240. correct_item_name = "Sauce Labs Bolt T-shirt"
  241. item_in_cart = driver.find_element(By.XPATH, f"//div[@class='inventory_item_name']")
  242. if item_in_cart:
  243. print(f"The correct item '{correct_item_name}' is in the cart.")
  244. else:
  245. print(f"The correct item '{correct_item_name}' is NOT in the cart.")
  246. slip(2)
  247. driver.quit()