test_sauce_demo_class.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. ##### IMPORT
  2. import pytest
  3. import logging as log
  4. import time
  5. from selenium import webdriver
  6. from selenium.webdriver.common.by import By
  7. from selenium.webdriver.common.keys import Keys
  8. from selenium.webdriver.support import expected_conditions as EC
  9. from selenium.common.exceptions import TimeoutException
  10. from selenium.webdriver.support.ui import WebDriverWait
  11. from selenium.webdriver.support.ui import Select
  12. from selenium.webdriver.firefox.options import Options
  13. from test_saucedemo import writeInInput
  14. import os
  15. class TestSauceDemo:
  16. ##### METHODES PYTEST
  17. def setup_method(self, method):
  18. log.info("Methode de SETUP AVANT CHAQUE TEST")
  19. if self.is_windows():
  20. self.driver = webdriver.Firefox()
  21. else:
  22. options = webdriver.FirefoxOptions()
  23. options.add_argument("--headless")
  24. self.driver = webdriver.Firefox(options=options)
  25. self.driver.get("http://www.saucedemo.com")
  26. assert (
  27. self.driver.current_url == "https://www.saucedemo.com/"
  28. ), "Nous ne somme pas sur la bonne page"
  29. def teardown_method(self, method):
  30. log.info("Methode de TEARDOWN APRES CHAQUE TEST")
  31. self.driver.quit()
  32. ##### METHODES DIVERS
  33. def is_windows(self):
  34. # oups
  35. res = False
  36. if os.name == "nt":
  37. res == True
  38. return res
  39. def writeInInput(self, inputElement, text):
  40. assert inputElement.is_displayed(), "Le champ texte n'est pas affiché"
  41. assert inputElement.is_enabled(), "Le champ texte n'est pas activé"
  42. inputElement.clear()
  43. inputElement.send_keys(text)
  44. def login(self):
  45. username = self.driver.find_element(By.ID, "user-name")
  46. password = self.driver.find_element(By.ID, "password")
  47. login = self.driver.find_element(By.ID, "login-button")
  48. writeInInput(inputElement=username, text="standard_user")
  49. writeInInput(password, text="secret_sauce")
  50. login.click()
  51. def login_custum(self, user, pwd):
  52. username = self.driver.find_element(By.ID, "user-name")
  53. password = self.driver.find_element(By.ID, "password")
  54. login = self.driver.find_element(By.ID, "login-button")
  55. writeInInput(inputElement=username, text=user)
  56. writeInInput(password, text=pwd)
  57. login.click()
  58. def logout(self):
  59. burger = self.driver.find_element(By.ID, "react-burger-menu-btn")
  60. burger.click()
  61. logout = self.driver.find_element(By.ID, "logout_sidebar_link")
  62. logout.click()
  63. def add_item(self, item):
  64. self.driver.find_element(By.ID, f"add-to-cart-sauce-labs-{item}").click()
  65. return item
  66. def go_to_checkout(self):
  67. checkout = self.driver.find_element(By.CSS_SELECTOR, "#checkout")
  68. checkout.click()
  69. def fill_checkout(self,name1,name2,zip):
  70. first_name=self.driver.find_element(By.ID,"first-name")
  71. last_name=self.driver.find_element(By.ID,"last-name")
  72. zip_code=self.driver.find_element(By.ID,"postal-code")
  73. writeInInput(inputElement=first_name, text=name1)
  74. writeInInput(inputElement=last_name, text=name2)
  75. writeInInput(inputElement=zip_code, text=zip)
  76. ##### TEST ABBAS
  77. #@pytest.mark.skip("")
  78. def test_saucedemo_boutenbout(self):
  79. self.login()
  80. self.logout()
  81. ##### TEST MANEL
  82. #@pytest.mark.skip("")
  83. def test_login_bad_username(self):
  84. self.login_custum("test", "secret_sauce")
  85. erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]")
  86. assert erreur_message.is_displayed(), "Pas de message d'erreur "
  87. assert (
  88. erreur_message.text
  89. == "Epic sadface: Username and password do not match any user in this service"
  90. ), "le message est erroné"
  91. #@pytest.mark.skip("")
  92. def test_login_bad_passwrd(self):
  93. self.login_custum("standard_user", "test")
  94. erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]")
  95. assert erreur_message.is_displayed(), "Pas de message d'erreur "
  96. assert (
  97. erreur_message.text
  98. == "Epic sadface: Username and password do not match any user in this service"
  99. ), "le message est erroné"
  100. ##### TEST MATTHIEU
  101. #@pytest.mark.skip("")
  102. def test_affichage_Checkout(self):
  103. log.info("Test de la redirection sur la page de Checkout")
  104. # connexion Swag Labs
  105. self.login()
  106. # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire
  107. self.add_item("bike-light")
  108. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  109. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  110. panier_btn.click()
  111. # redirection vers la page de checkout
  112. self.go_to_checkout()
  113. assert (
  114. self.driver.current_url
  115. == "https://www.saucedemo.com/checkout-step-one.html"
  116. ), "Nous ne somme pas sur la bonne page"
  117. def test_Checkout_3_champs_vides(self):
  118. log.info("Test Checkout avec tous les champs vides")
  119. # connexion Swag Labs
  120. self.login()
  121. # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire
  122. self.add_item("bike-light")
  123. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  124. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  125. panier_btn.click()
  126. # redirection vers la page de checkout
  127. self.go_to_checkout()
  128. self.fill_checkout("","","")
  129. continue_btn = self.driver.find_element(By.ID, "continue")
  130. continue_btn.click()
  131. erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]")
  132. assert erreur_message.is_displayed(), "Pas de message d'erreur "
  133. assert (
  134. erreur_message.text
  135. == "Error: First Name is required"
  136. ), "le message est erroné"
  137. def test_Checkout_first_name_vide(self):
  138. log.info("Test Checkout avec le champ first name vide")
  139. # connexion Swag Labs
  140. self.login()
  141. # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire
  142. self.add_item("bike-light")
  143. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  144. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  145. panier_btn.click()
  146. # redirection vers la page de checkout
  147. self.go_to_checkout()
  148. self.fill_checkout("","Familly_name","999999")
  149. continue_btn = self.driver.find_element(By.ID, "continue")
  150. continue_btn.click()
  151. erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]")
  152. assert erreur_message.is_displayed(), "Pas de message d'erreur "
  153. assert (
  154. erreur_message.text
  155. == "Error: First Name is required"
  156. ), "le message est erroné"
  157. def test_Checkout_first_name_vide(self):
  158. log.info("Test Checkout avec le champ last name vide")
  159. # connexion Swag Labs
  160. self.login()
  161. # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire
  162. self.add_item("bike-light")
  163. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  164. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  165. panier_btn.click()
  166. # redirection vers la page de checkout
  167. self.go_to_checkout()
  168. self.fill_checkout("First","","999999")
  169. continue_btn = self.driver.find_element(By.ID, "continue")
  170. continue_btn.click()
  171. erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]")
  172. assert erreur_message.is_displayed(), "Pas de message d'erreur "
  173. assert (
  174. erreur_message.text
  175. == "Error: Last Name is required"
  176. ), "le message est erroné"
  177. def test_Checkout_first_name_vide(self):
  178. log.info("Test Checkout avec le champ zip code vide")
  179. # connexion Swag Labs
  180. self.login()
  181. # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire
  182. self.add_item("bike-light")
  183. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  184. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  185. panier_btn.click()
  186. # redirection vers la page de checkout
  187. self.go_to_checkout()
  188. self.fill_checkout("First","Familly_name","")
  189. continue_btn = self.driver.find_element(By.ID, "continue")
  190. continue_btn.click()
  191. erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]")
  192. assert erreur_message.is_displayed(), "Pas de message d'erreur "
  193. assert (
  194. erreur_message.text
  195. == "Error: Postal Code is required"
  196. ), "le message est erroné"
  197. def test_Checkout_ok(self):
  198. log.info("Test Checkout OK")
  199. # connexion Swag Labs
  200. self.login()
  201. # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire
  202. self.add_item("bike-light")
  203. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  204. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  205. panier_btn.click()
  206. # redirection vers la page de checkout
  207. self.go_to_checkout()
  208. self.fill_checkout("First","Familly_name","9999")
  209. continue_btn = self.driver.find_element(By.ID, "continue")
  210. continue_btn.click()
  211. assert (
  212. self.driver.current_url
  213. == "https://www.saucedemo.com/checkout-step-two.html"
  214. ), "Nous ne somme pas sur la bonne page"
  215. ##### TEST TIFF
  216. #@pytest.mark.skip("")
  217. def test_add_item(self):
  218. self.login()
  219. sauce_labs_item = self.add_item("backpack")
  220. shopping_container = self.driver.find_element(By.ID, "shopping_cart_container")
  221. assert (
  222. sauce_labs_item != shopping_container.text
  223. ), f"L'item {sauce_labs_item} ne correspond pas à l'item {shopping_container.text} présent dans le panier."
  224. log.info(
  225. f"L'item : {shopping_container.text} a été ajouté et l'item : {sauce_labs_item} était attendu"
  226. )