class SearchCases(unittest.TestCase): # Método que tiene las Precondiciones def setUp(self): # Clase XI, instanciamos la clase Options option = Options() # Podemos ahora pasarle argumentos, en este caso el navegador se va a mostrar maximizado option.add_argument('start-maximized') # 2do argumento, podemos testear en modo incognito option.add_argument('incognito') # Considerar, levantar un browser en modo gráfico con su ventanita, es muy pesado y usa tiempo. # por eso existe algo llamado Modo Headless, no se va a ver, pero si se va a ejecutar de manera # rápida, entonces no se deben ejecutar las pruebas en modo gráfico. # 4to Argumento, se debe empezar a ejecutar en Modo Headless. Para este caso, vamos habilitar # todos los casos de pruebas # Comentamos por un momento, para hacer una prueba, cuando estemos programando el caso de prueba # no debemos trabajar en modo headless, cuando ya este listo el testcase, activamos tal modo option.add_argument('--headless') # 3er argumento, sino queremos que chrome use el gpu (hardware de la tarjeta gráfica) #option.add_argument('--disable-gpu') # Por tanto, tenemos dos formas o maneras de controlar ciertas cosas del browser. # - A partir de Selenium # - A partir de las opciones de Chrome (Recomendable) # Ahora voy a pasar al webdriver.Chrome un segundo argumento con esto comentamos los maximize, size y position self.driver = webdriver.Chrome('chromedriver.exe', chrome_options=option) # Clase XI, se va a presentar maximizada la pantalla del navegador # self.driver.maximize_window() # También, podemos personalizar el tamaño de la ventana del navegador, ancho x alto #self.driver.set_window_size(200, 240) # Podemos indicar la posición donde se va a mostrar el navegador #self.driver.set_window_position(150, 150) # Abrir el browser self.driver.get('http://automationpractice.com/index.php') # Agregando el implicit wait, tu timeout a partir de acá son 5'' self.driver.implicitly_wait(5) # Creamos un objeto de la clase PageIndex, le vamos a pasar el parámetro driver. self.indexPage = PageIndex(self.driver) # Creamos un objeto de la clase PageItems, le vamos a pasar el parámetro driver. self.itemsPage = PageItems(self.driver) # Creamos un objeto de la clase PageItem, le vamos a pasar el parámetro driver. self.itemPage = PageItem(self.driver) #@unittest.skip("Not needed now") def test_search_no_elements(self): #try: self.indexPage.search('hola') # Vamos a esperar dos segundos, para que cargue la página # con sus elementos. #time.sleep(2) #self.assertEqual(self.itemsPage.return_no_element_text(), 'No results were found for your search "saludo"') # hola self.assertEqual(self.itemsPage.return_no_element_text(), 'No results were found for your search "hola"') # Verificamos que si ingreso un texto que no existe, # se muestre el mensaje en la página => No results were found for your search "hola" # Mediante el assertEqual, comparamos si las dos variables son iguales. # Cuando encontremos el xpath, vamos a extraer el texto, para asignarlo a la variable # result y así compararla con el texto de la variable expected_result # result = driver.find_element_by_xpath('//*[@id="center_column"]/p').text # expected_result = 'No results were found for your search "hola"' # Comentamos las dos variables de arriba, en el assert reemplazamos los valores de las # variables y nos ahorramos dos lineas de código #self.assertEqual(self.driver.find_element_by_xpath('//*[@id="center_column"]/p').text, 'No results were found for your search "hola"') # Clase XI, para capturar la pantalla de evidencia, hacemos lo siguiente, agregamos un nombre con su extensión # Otro caso sería que si la prueba falla se va a tomar la evidencia, cambiamos "hola" por "Saludo" # Agregamos el try. # Recomendación, no se debe utilizar try para los Assert. self.driver.save_screenshot('no_element.jpg') #except: # Si hay un error debe generar una evidencia de la misma #self.driver.save_screenshot('errorss.jpg') @unittest.skip("Not needed now") def test_search_find_dresses(self): self.indexPage.search('dress') #time.sleep(2) self.assertTrue("DRESS" in self.itemsPage.return_section_title()) # Mediante el assertTrue. # cuando encontremos el xpath, vamos a extraer el texto, para asignarlo a la variable # result y así compararla con el texto de la variable expected_result #result = driver.find_element_by_xpath('//*[@id="center_column"]/h1/span[1]').text #expected_result = "DRESS" # el texto DRESS se encuentra en el texto que tiene la variable result. # Comentamos las dos variables de arriba, en el assert reemplazamos los valores de las # variables y nos ahorramos dos lineas de código #self.assertTrue("DRESS" in self.driver.find_element_by_xpath('//*[@id="center_column"]/h1/span[1]').text) @unittest.skip("Not needed now") def test_search_find_tshirts(self): self.indexPage.search('t-shirts') #time.sleep(2) self.assertTrue('T-SHIRTS' in self.itemsPage.return_section_title(), self.itemsPage.return_section_title()) # El 3er parámetro es un mensaje, el cual muestra lo que tiene como texto encontrado # mediante el xpath. # Si no se encuentra el texto que ingresamos "T-SHIRTS" en el texto que encuentra el xpath # muestra el texto que ha encontrado. # Este es el error que se muestra => AssertionError: False is not true : "T-SHIRT" #self.assertTrue('T-SHIRTS' in self.driver.find_element_by_xpath('//*[@id="center_column"]/h1/span[1]').text, self.driver.find_element_by_xpath('//*[@id="center_column"]/h1/span[1]').text) # Ejercicio de meter ropa en el carro @unittest.skip("Not needed now") def test_tarea(self): self.indexPage.search('T-Shirts') #time.sleep(2) self.itemsPage.click_orange_button() # Como vamos a otra página, agregamos 2'' para que carguen los elementos self.itemPage.enter_quantity('25') # Vamos a clickear 3 veces, pasamos al parámetro el valor 3. self.itemPage.add_elements(3) # Asigno a una variable lo que devuelve el método, en este caso el valor del elemento number = self.itemPage.get_number_of_elements() # Verificamos me diante el assert si el valor es igual a 28 self.assertTrue(number == '28') # Vamos a agregar unos segundos para verificar que se muestre la cantidad ingresada #time.sleep(3) @unittest.skip("Not needed now") def test_selection(self): # Ingresamos T-shirts self.indexPage.search('t-shirts') # Seleccionamos el elemento por el texto, es decir el parámetro text self.itemsPage.select_by_text('Product Name: A to Z') time.sleep(3) # Seleccionamos el elemento por el value, es decir el parámetro value self.itemsPage.select_by_value('reference:asc') time.sleep(3) # Seleccionamos el elemento por el índice, es decir el parámetro number self.itemsPage.select_by_index(4) time.sleep(3) # Método que tiene las Postcondiciones, que quiero que pase, cuando termina una prueba. def tearDown(self): # Cerrar el browser self.driver.close() # Cerrar la sesión del webdriver self.driver.quit()
class TestCase(unittest.TestCase): #Precondiciones def setUp(self): self.driver = webdriver.Chrome('chromedriver.exe') self.driver.get('http://automationpractice.com/index.php') self.driver.implicitly_wait(5) #Creamos un objeto de tipo PageIndex(clase) self.indexPage = PageIndex(self.driver) #Creamos un objeto de tipo PageResult(clase) self.resultPage = PageResult(self.driver) #Creamos un objeto de tipo PageItem(clase) self.itemPage = PageItem(self.driver) @unittest.skip('Not need now') def test_search_no_element(self): self.indexPage.search('Hola') self.assertEqual(self.resultPage.return_no_element_text(), 'No results were found for your search "Hola"') @unittest.skip('Not need now') def test_search_find_dresses(self): self.indexPage.search('dress') self.assertTrue('DRESS' in self.resultPage.return_section_title()) @unittest.skip('Not need now') def test_search_find_tshirts(self): self.indexPage.search('t-shirts') self.assertTrue('T-SHIRTS' in self.resultPage.return_section_title(), self.resultPage.return_section_title()) @unittest.skip('Not need now') def test_tarea(self): self.indexPage.search('t-shirts') self.resultPage.click_orange_button() self.itemPage.enter_quantity('25') self.itemPage.add_elements(3) # Asigno a una variable lo que devuelve el método (28), en este caso el valor del elemento number = self.itemPage.get_number_of_elements() # Verificamos mediante el assert si el valor es igual a 28 (lo que nosotros sabemos) self.assertTrue(number == '28') # Vamos a agregar unos segundos solo para verificar que se muestre la cantidad ingresada, luego comentamos time.sleep(3) #@unittest.skip('Not need now') def test_selection(self): self.indexPage.search('t-shirts') # Seleccionamos el elemento por el texto, es decir el parámetro text self.resultPage.select_by_text('Product Name: A to Z') # Vamos a agregar unos segundos solo para verificar que se muestre la cantidad ingresada, luego comentamos time.sleep(3) # Seleccionamos el elemento por el valor, es decir el parámetro value self.resultPage.select_by_value('reference:asc') # Vamos a agregar unos segundos solo para verificar que se muestre la cantidad ingresada, luego comentamos time.sleep(3) # Seleccionamos el elemento por el indice (4 => Product Name: Z to A), es decir el parámetro number self.resultPage.select_by_index(4) # Vamos a agregar unos segundos solo para verificar que se muestre la cantidad ingresada, luego comentamos time.sleep(3) #Postcondiciones, que quiero que pase, cuando termine una prueba def tearDown(self): self.driver.close() self.driver.quit()
class SearchCases(unittest.TestCase): # Método que tiene las Precondiciones def setUp(self): self.driver = webdriver.Chrome('chromedriver.exe') # Abrir el browser self.driver.get('http://automationpractice.com/index.php') # Agregando el implicit wait, tu timeout a partir de acá son 5'' self.driver.implicitly_wait(5) # Creamos un objeto de la clase PageIndex, le vamos a pasar el parámetro driver. self.indexPage = PageIndex(self.driver) # Creamos un objeto de la clase PageItems, le vamos a pasar el parámetro driver. self.itemsPage = PageItems(self.driver) # Creamos un objeto de la clase PageItem, le vamos a pasar el parámetro driver. self.itemPage = PageItem(self.driver) @unittest.skip("Not needed now") def test_search_no_elements(self): self.indexPage.search('hola') # Vamos a esperar dos segundos, para que cargue la página # con sus elementos. #time.sleep(2) self.assertEqual(self.itemsPage.return_no_element_text(), 'No results were found for your search "hola"') # Verificamos que si ingreso un texto que no existe, # se muestre el mensaje en la página => No results were found for your search "hola" # Mediante el assertEqual, comparamos si las dos variables son iguales. # Cuando encontremos el xpath, vamos a extraer el texto, para asignarlo a la variable # result y así compararla con el texto de la variable expected_result # result = driver.find_element_by_xpath('//*[@id="center_column"]/p').text # expected_result = 'No results were found for your search "hola"' # Comentamos las dos variables de arriba, en el assert reemplazamos los valores de las # variables y nos ahorramos dos lineas de código #self.assertEqual(self.driver.find_element_by_xpath('//*[@id="center_column"]/p').text, 'No results were found for your search "hola"') @unittest.skip("Not needed now") def test_search_find_dresses(self): self.indexPage.search('dress') #time.sleep(2) self.assertTrue("DRESS" in self.itemsPage.return_section_title()) # Mediante el assertTrue. # cuando encontremos el xpath, vamos a extraer el texto, para asignarlo a la variable # result y así compararla con el texto de la variable expected_result #result = driver.find_element_by_xpath('//*[@id="center_column"]/h1/span[1]').text #expected_result = "DRESS" # el texto DRESS se encuentra en el texto que tiene la variable result. # Comentamos las dos variables de arriba, en el assert reemplazamos los valores de las # variables y nos ahorramos dos lineas de código #self.assertTrue("DRESS" in self.driver.find_element_by_xpath('//*[@id="center_column"]/h1/span[1]').text) @unittest.skip("Not needed now") def test_search_find_tshirts(self): self.indexPage.search('t-shirts') #time.sleep(2) self.assertTrue('T-SHIRTS' in self.itemsPage.return_section_title(), self.itemsPage.return_section_title()) # El 3er parámetro es un mensaje, el cual muestra lo que tiene como texto encontrado # mediante el xpath. # Si no se encuentra el texto que ingresamos "T-SHIRTS" en el texto que encuentra el xpath # muestra el texto que ha encontrado. # Este es el error que se muestra => AssertionError: False is not true : "T-SHIRT" #self.assertTrue('T-SHIRTS' in self.driver.find_element_by_xpath('//*[@id="center_column"]/h1/span[1]').text, self.driver.find_element_by_xpath('//*[@id="center_column"]/h1/span[1]').text) # Ejercicio de meter ropa en el carro def test_tarea(self): self.indexPage.search('t-shirts') #time.sleep(2) self.itemsPage.click_orange_button() # Como vamos a otra página, agregamos 2'' para que carguen los elementos self.itemPage.enter_quantity('25') # Vamos a clickear 3 veces, pasamos al parámetro el valor 3. self.itemPage.add_elements(3) # Asigno a una variable lo que devuelve el método, en este caso el valor del elemento number = self.itemPage.get_number_of_elements() # Verificamos me diante el assert si el valor es igual a 28 self.assertTrue(number == '28') # Vamos a agregar unos segundos para verificar que se muestre la cantidad ingresada #time.sleep(3) # Método que tiene las Postcondiciones, que quiero que pase, cuando termina una prueba. def tearDown(self): # Cerrar el browser self.driver.close() # Cerrar la sesión del webdriver self.driver.quit()
class TestCase(unittest.TestCase): #Precondiciones def setUp(self): #Clase XI, instanciamos la clase Options option = Options() #Podemos ahora pasarle argumentos, en este caso el navegador, se va a mostrar maximizado option.add_argument('start-maximized') #Podemos testear en modo incognito option.add_argument('incognito') #Considerar, levantar un browser en modo gráfico (en el explorador), es muy pesado y usa tiempo. #Por eso existe algo llamado Modo Headless, no se va a ver, pero si se va a ejecutar de manera #rápida (background). #Cuando estemos programando el caso de prueba, no debemos trabajar en modo headless, cuando #este listo el testcase, activamos tal modo. option.add_argument('--headless') #Por tanto, tenemos dos formas o maneras de controlar ciertas cosas del browser. #1. A partir de Selenium #2. A partir de las opciones de Chrome (Recomendable) # Ahora voy a pasar al webdriver.Chrome un segundo argumento, el objeto option de la clase Options. self.driver = webdriver.Chrome('chromedriver.exe', chrome_options=option) #self.driver = webdriver.Chrome('chromedriver.exe') self.driver.get('http://automationpractice.com/index.php') self.driver.implicitly_wait(5) #Creamos un objeto de tipo PageIndex(clase) self.indexPage = PageIndex(self.driver) #Creamos un objeto de tipo PageResult(clase) self.resultPage = PageResult(self.driver) #Creamos un objeto de tipo PageItem(clase) self.itemPage = PageItem(self.driver) #@unittest.skip('Not need now') def test_search_no_element(self): self.indexPage.search('Hola') self.assertEqual(self.resultPage.return_no_element_text(), 'No results were found for your search "Hola"') # Clase XI, para capturar la pantalla de evidencia, hacemos lo siguiente, agregamos el nombre del archivo # con su extensión. Considerar, no se debe utilizar try para los Assert. self.driver.save_screenshot('no_elements.jpg') #@unittest.skip('Not need now') def test_search_find_dresses(self): self.indexPage.search('dress') self.assertTrue('DRESS' in self.resultPage.return_section_title()) #@unittest.skip('Not need now') def test_search_find_tshirts(self): self.indexPage.search('t-shirts') self.assertTrue('T-SHIRTS' in self.resultPage.return_section_title(), self.resultPage.return_section_title()) #@unittest.skip('Not need now') def test_tarea(self): self.indexPage.search('t-shirts') self.resultPage.click_orange_button() self.itemPage.enter_quantity('25') self.itemPage.add_elements(3) # Asigno a una variable lo que devuelve el método (28), en este caso el valor del elemento number = self.itemPage.get_number_of_elements() # Verificamos mediante el assert si el valor es igual a 28 (lo que nosotros sabemos) self.assertTrue(number == '28') # Vamos a agregar unos segundos solo para verificar que se muestre la cantidad ingresada, luego comentamos time.sleep(3) #@unittest.skip('Not need now') def test_selection(self): self.indexPage.search('t-shirts') # Seleccionamos el elemento por el texto, es decir el parámetro text self.resultPage.select_by_text('Product Name: A to Z') # Vamos a agregar unos segundos solo para verificar que se muestre la cantidad ingresada, luego comentamos time.sleep(3) # Seleccionamos el elemento por el valor, es decir el parámetro value self.resultPage.select_by_value('reference:asc') # Vamos a agregar unos segundos solo para verificar que se muestre la cantidad ingresada, luego comentamos time.sleep(3) # Seleccionamos el elemento por el indice (4 => Product Name: Z to A), es decir el parámetro number self.resultPage.select_by_index(4) # Vamos a agregar unos segundos solo para verificar que se muestre la cantidad ingresada, luego comentamos time.sleep(3) #Postcondiciones, que quiero que pase, cuando termine una prueba def tearDown(self): self.driver.close() self.driver.quit()