test_sauce_demo_class.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  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. def test_login_bad_username_and_bad_passwrd(self):
  101. self.login_custum("test", "test")
  102. erreur_message = self.driver.find_element(By.CSS_SELECTOR,'[data-test=error]')
  103. assert erreur_message.is_displayed(), "Pas de message d\'erreur "
  104. assert erreur_message.text == "Epic sadface: Username and password do not match any user in this service", "le message est erroné"
  105. def test_login_username_vide(self):
  106. self.login_custum("", "secret_sauce")
  107. erreur_message = self.driver.find_element(By.CSS_SELECTOR,'#login_button_container > div > form > div.error-message-container.error > h3')
  108. assert erreur_message.is_displayed(), "Pas de message d\'erreur "
  109. assert erreur_message.text == "Epic sadface: Username is required", "le message est erroné"
  110. def test_login_paswrd_vide(self):
  111. self.login_custum("standard_user", "")
  112. erreur_message = self.driver.find_element(By.CSS_SELECTOR,'#login_button_container > div > form > div.error-message-container.error > h3')
  113. assert erreur_message.is_displayed(), "Pas de message d\'erreur "
  114. assert erreur_message.text == "Epic sadface: Password is required", "le message est erroné"
  115. def test_login_username_and_pswerd_vide(self):
  116. self.login_custum("", "")
  117. erreur_message = self.driver.find_element(By.CSS_SELECTOR,'#login_button_container > div > form > div.error-message-container.error')
  118. assert erreur_message.is_displayed(), "Pas de message d\'erreur "
  119. assert erreur_message.text == "Epic sadface: Username is required", "le message est erroné"
  120. ##### MATTHIEU
  121. def go_to_checkout(self):
  122. checkout = self.driver.find_element(By.CSS_SELECTOR, "#checkout")
  123. checkout.click()
  124. # @pytest.mark.skip("")
  125. def test_affichage_Checkout(self):
  126. log.info("Test de la redirection sur la page de Checkout")
  127. # connexion Swag Labs
  128. self.login()
  129. # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire
  130. self.add_item("bike-light")
  131. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  132. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  133. panier_btn.click()
  134. # redirection vers la page de checkout
  135. self.go_to_checkout()
  136. assert (
  137. self.driver.current_url
  138. == "https://www.saucedemo.com/checkout-step-one.html"
  139. ), "Nous ne somme pas sur la bonne page"
  140. def test_Checkout_3_champs_vides(self):
  141. log.info("Test Checkout avec tous les champs vides")
  142. # connexion Swag Labs
  143. self.login()
  144. # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire
  145. self.add_item("bike-light")
  146. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  147. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  148. panier_btn.click()
  149. # redirection vers la page de checkout
  150. self.go_to_checkout()
  151. self.fill_checkout("","","")
  152. continue_btn = self.driver.find_element(By.ID, "continue")
  153. continue_btn.click()
  154. erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]")
  155. assert erreur_message.is_displayed(), "Pas de message d'erreur "
  156. assert (
  157. erreur_message.text
  158. == "Error: First Name is required"
  159. ), "le message est erroné"
  160. def test_Checkout_first_name_vide(self):
  161. log.info("Test Checkout avec le champ first name vide")
  162. # connexion Swag Labs
  163. self.login()
  164. # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire
  165. self.add_item("bike-light")
  166. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  167. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  168. panier_btn.click()
  169. # redirection vers la page de checkout
  170. self.go_to_checkout()
  171. self.fill_checkout("","Familly_name","999999")
  172. continue_btn = self.driver.find_element(By.ID, "continue")
  173. continue_btn.click()
  174. erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]")
  175. assert erreur_message.is_displayed(), "Pas de message d'erreur "
  176. assert (
  177. erreur_message.text
  178. == "Error: First Name is required"
  179. ), "le message est erroné"
  180. def test_Checkout_first_name_vide(self):
  181. log.info("Test Checkout avec le champ last name vide")
  182. # connexion Swag Labs
  183. self.login()
  184. # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire
  185. self.add_item("bike-light")
  186. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  187. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  188. panier_btn.click()
  189. # redirection vers la page de checkout
  190. self.go_to_checkout()
  191. self.fill_checkout("First","","999999")
  192. continue_btn = self.driver.find_element(By.ID, "continue")
  193. continue_btn.click()
  194. erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]")
  195. assert erreur_message.is_displayed(), "Pas de message d'erreur "
  196. assert (
  197. erreur_message.text
  198. == "Error: Last Name is required"
  199. ), "le message est erroné"
  200. def test_Checkout_first_name_vide(self):
  201. log.info("Test Checkout avec le champ zip code vide")
  202. # connexion Swag Labs
  203. self.login()
  204. # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire
  205. self.add_item("bike-light")
  206. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  207. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  208. panier_btn.click()
  209. # redirection vers la page de checkout
  210. self.go_to_checkout()
  211. self.fill_checkout("First","Familly_name","")
  212. continue_btn = self.driver.find_element(By.ID, "continue")
  213. continue_btn.click()
  214. erreur_message = self.driver.find_element(By.CSS_SELECTOR, "[data-test=error]")
  215. assert erreur_message.is_displayed(), "Pas de message d'erreur "
  216. assert (
  217. erreur_message.text
  218. == "Error: Postal Code is required"
  219. ), "le message est erroné"
  220. def test_Checkout_ok(self):
  221. log.info("Test Checkout OK")
  222. # connexion Swag Labs
  223. self.login()
  224. # ajout "Sauce Labs Bike Light" au panier -- A changer si Tiff implémente une fonction pour le faire
  225. self.add_item("bike-light")
  226. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  227. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  228. panier_btn.click()
  229. # redirection vers la page de checkout
  230. self.go_to_checkout()
  231. self.fill_checkout("First","Familly_name","9999")
  232. continue_btn = self.driver.find_element(By.ID, "continue")
  233. continue_btn.click()
  234. assert (
  235. self.driver.current_url
  236. == "https://www.saucedemo.com/checkout-step-two.html"
  237. ), "Nous ne somme pas sur la bonne page"
  238. ##### TEST TIFF
  239. @pytest.mark.skip("")
  240. def test_add_item(self):
  241. self.login()
  242. backpack_item = "backpack"
  243. add_to_cart_button = self.driver.find_element(
  244. By.ID, f"add-to-cart-sauce-labs-{backpack_item}"
  245. )
  246. self.add_item(backpack_item)
  247. log.info(f"Le bouton : {add_to_cart_button} est cliqué")
  248. post_add_item_click = self.driver.find_element(
  249. By.ID, f"remove-sauce-labs-{backpack_item}"
  250. )
  251. assert (
  252. add_to_cart_button == post_add_item_click
  253. ), f"Le bouton {add_to_cart_button} ne correspond pas au résultat attendu qui est : {post_add_item_click}"
  254. log.info(
  255. f"Avant d'ajouter l'item le bouton proposé est : {add_to_cart_button} et le bouton est : {post_add_item_click} après ajout de l'item"
  256. )