test_sauce_demo_class.py 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. def is_windows(self):
  17. # oups
  18. res = False
  19. if os.name == "nt":
  20. res == True
  21. return res
  22. def writeInInput(self, inputElement, text):
  23. assert inputElement.is_displayed(), "Le champ texte n'est pas affiché"
  24. assert inputElement.is_enabled(), "Le champ texte n'est pas activé"
  25. inputElement.clear()
  26. inputElement.send_keys(text)
  27. def setup_method(self, method):
  28. log.info("Methode de SETUP AVANT CHAQUE TEST")
  29. if self.is_windows():
  30. self.driver = webdriver.Firefox()
  31. else:
  32. options = webdriver.FirefoxOptions()
  33. options.add_argument("--headless")
  34. self.driver = webdriver.Firefox(options=options)
  35. self.driver.get("http://www.saucedemo.com")
  36. assert (
  37. self.driver.current_url == "https://www.saucedemo.com/"
  38. ), "Nous ne somme pas sur la bonne page"
  39. def teardown_method(self, method):
  40. log.info("Methode de TEARDOWN APRES CHAQUE TEST")
  41. self.driver.quit()
  42. def login(self):
  43. username = self.driver.find_element(By.ID, "user-name")
  44. password = self.driver.find_element(By.ID, "password")
  45. login = self.driver.find_element(By.ID, "login-button")
  46. writeInInput(inputElement=username, text="standard_user")
  47. writeInInput(password, text="secret_sauce")
  48. login.click()
  49. def logout(self):
  50. burger = self.driver.find_element(By.ID, "react-burger-menu-btn")
  51. burger.click()
  52. logout = self.driver.find_element(By.ID, "logout_sidebar_link")
  53. logout.click()
  54. @pytest.mark.skip("")
  55. def test_saucedemo_boutenbout(self):
  56. self.login()
  57. self.logout()
  58. ##### MATTHIEU
  59. ##### MANEL
  60. def login_custum(self,user, pwd):
  61. username = self.driver.find_element(By.ID, "user-name")
  62. password = self.driver.find_element(By.ID, "password")
  63. login = self.driver.find_element(By.ID, "login-button")
  64. writeInInput(inputElement=username, text= user)
  65. writeInInput(password, text=pwd)
  66. login.click()
  67. def test_login_bad_username(self):
  68. self.login_custum("test", "secret_sauce")
  69. erreur_message = self.driver.find_element(By.CSS_SELECTOR,'[data-test=error]')
  70. assert erreur_message.is_displayed(), "Pas de message d\'erreur "
  71. assert erreur_message.text == "Epic sadface: Username and password do not match any user in this service", "le message est erroné"
  72. def test_login_bad_passwrd(self):
  73. self.login_custum("standard_user", "test")
  74. erreur_message = self.driver.find_element(By.CSS_SELECTOR,'[data-test=error]')
  75. assert erreur_message.is_displayed(), "Pas de message d\'erreur "
  76. assert erreur_message.text == "Epic sadface: Username and password do not match any user in this service", "le message est erroné"
  77. def test_login_bad_username_and_bad_passwrd(self):
  78. self.login_custum("test", "test")
  79. erreur_message = self.driver.find_element(By.CSS_SELECTOR,'[data-test=error]')
  80. assert erreur_message.is_displayed(), "Pas de message d\'erreur "
  81. assert erreur_message.text == "Epic sadface: Username and password do not match any user in this service", "le message est erroné"
  82. def test_login_username_vide(self):
  83. self.login_custum("", "secret_sauce")
  84. erreur_message = self.driver.find_element(By.CSS_SELECTOR,'#login_button_container > div > form > div.error-message-container.error > h3')
  85. assert erreur_message.is_displayed(), "Pas de message d\'erreur "
  86. assert erreur_message.text == "Epic sadface: Username is required", "le message est erroné"
  87. def test_login_paswrd_vide(self):
  88. self.login_custum("standard_user", "")
  89. erreur_message = self.driver.find_element(By.CSS_SELECTOR,'#login_button_container > div > form > div.error-message-container.error > h3')
  90. assert erreur_message.is_displayed(), "Pas de message d\'erreur "
  91. assert erreur_message.text == "Epic sadface: Password is required", "le message est erroné"
  92. def test_login_username_and_pswerd_vide(self):
  93. self.login_custum("", "")
  94. erreur_message = self.driver.find_element(By.CSS_SELECTOR,'#login_button_container > div > form > div.error-message-container.error')
  95. assert erreur_message.is_displayed(), "Pas de message d\'erreur "
  96. assert erreur_message.text == "Epic sadface: Username is required", "le message est erroné"
  97. ##### MATTHIEU
  98. def go_to_checkout(self):
  99. checkout = self.driver.find_element(By.CSS_SELECTOR, "#checkout")
  100. checkout.click()
  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. item_lamp = self.driver.find_element(By.ID, "add-to-cart-sauce-labs-bike-light")
  108. item_lamp.click()
  109. # affichage panier -- A changer si Tiff implémente une fonction pour le faire
  110. panier_btn = self.driver.find_element(By.ID, "shopping_cart_container")
  111. panier_btn.click()
  112. # redirection vers la page de checkout
  113. self.go_to_checkout()
  114. assert (
  115. self.driver.current_url
  116. == "https://www.saucedemo.com/checkout-step-one.html"
  117. ), "Nous ne somme pas sur la bonne page"
  118. ##### TIFF
  119. def add_item(self):
  120. self.login()
  121. sauce_labs_backpack = self.driver.find_element(
  122. By.ID, "add-to-cart-sauce-labs-backpack"
  123. ).click()
  124. shopping_container = self.driver.find_element(By.ID, "shopping_cart_container")
  125. assert (
  126. sauce_labs_backpack != shopping_container.text
  127. ), f"L'item {sauce_labs_backpack} ne correspond pas à l'item {shopping_container.text} présent dans le panier."
  128. log.info(
  129. f"L'item : {shopping_container.text} a été ajouté et l'item : {sauce_labs_backpack} était attendu"
  130. )
  131. self.driver.quit()