Selenium: Una guía rápida y simple
Con tantos tutoriales larguísimos sobre la construcción de frameworks de Selenium utilizando el modelo de objetos de página y otras palabras elegantes que definitivamente ya debes conocer. Pensé que podría ser útil tener un tutorial a la mano que sea solo una guía rápida y simple de Selenium.
Al entrar en este tutorial, ten en cuenta que no recomiendo usar Selenium de esta manera. Básicamente, es solo una forma de presentar a Selenium a nuevas personas. Si tu quieres aprender cómo hacer un framework apropiado de Selenium, te invito a consultar este otro tutorial.
¿Qué necesitarás?
En primer lugar, debes elegir un lenguaje de programación. Selenium tiene enlaces para casi todos los idiomas principales, pero para este tutorial, usaremos Python. ¿Por qué? Porque Python es genial.
También necesitarás
- Un IDE o un Editor de Texto dependiendo del lenguaje que escojas.
- Un Webdriver ejecutable, para este tutorial será chrome driver. (En Windows, Selenium’s el path predeterminado es C:\Windows, para Mac, puedes instalarlo con cask usando este comando: brew cask install chrome driver)
- Un unidad en marco de prueba que en este caso será pytest.
Lo básico
Desglosamos Selenium en su definición más básica. Selenium se puede utilizar para simular acciones del usuario en un navegador. Llevando eso al género de prueba, el uso más básico de Selenium que podemos hacer es crear una prueba simple que abra un navegador, busque algún tipo de elemento, interactúe con él y valide su interacción.
Con base a esto, lo que hará nuestra prueba muy simple es que irá a Google, buscará un Tutorial de Selenium adecuado y hará clic en él. ¿Suena bien? Empecemos
La estructura
Lo primero que necesitamos es muy simple. Una clase para escribir nuestros casos de prueba. Para eso, crearémos un simple archivo test_cases.py con la clase QuickAndDirtySeleniumExample También necesitamos importar el paquete de unit test
import unittest
class QuickAndDirtySeleniumExample(unittest.TestCase):
Luego, necesitamos empezar a escribir nuestro caso de pruebas. Dado que no estamos usando ningún patrón o práctica específica, no pasaremos tiempo aquí diseñando nuestra solución. Recuerda, esta es solo una introducción rápida y práctica.
Nuestro caso de pruebas debe ser llamado: test_search_proper_tutorial. No olvides agregar las últimas 2 líneas que tiene el código en este ejemplo. Así es como le decimos a Python que esta clase es nuestra clase de prueba principal en la que ejecutaremos nuestros casos de prueba.
import unittest
class QuickAndDirtySeleniumExample(unittest.TestCase):
def test_search_proper_tutorial(self):
# This is our test case
if __name__ == '__main__':
unittest.main()
Las pruebas
Entonces … Tenemos nuestro «proyecto», tenemos nuestra clase, todo lo que queda por hacer es seguir adelante y escribir nuestro caso de prueba. Para esto primero, debemos organizar en nuestra mente cuáles son los pasos que necesitaremos para llegar a nuestra meta. En este caso, los pasos son:
- Iniciar el navegador
- Ir a Google.com
- Localizar el cuadro de texto Buscar
- Escribir el nombre de un tutorial de Selenium
- Hacer la búsqueda
- Buscar nuestro tutorial de Selenium
- Hacer clic en el
- Validar que efectivamente estés en el lugar correcto
1. Iniciar el navegador
Para iniciar el navegador, necesitamos crear una nueva instancia de nuestro Webdriver. El controlador web representa el navegador y es el que nos permite interactuar con él. para realizar la instancia, necesitamos importarlo con la siguiente línea en la parte superior de nuestro archivo test_cases.py
from selenium import webdriver
Con esto en su lugar, podemos crear una nueva instancia de nuestro web driver usando Chrome. Nuestro test_cases.py file deberá lucir así:
import unittest
from selenium import webdriver
class QuickAndDirtySeleniumExample(unittest.TestCase):
def test_search_proper_tutorial(self):
driver = webdriver.Chrome()
if __name__ == '__main__':
unittest.main()
2. ir a Google.com
Para esto lo que debemos hacer es decirle a nuestro driver que navegue en https://www.google.com/. Esto se hace usando el método get()
Después de agregarlo, nuestro archivo test_cases.py debería verse así:
import unittest
from selenium import webdriver
class QuickAndDirtySeleniumExample(unittest.TestCase):
def test_search_proper_tutorial(self):
driver = webdriver.Chrome()
driver.get("https://www.google.com/")
if __name__ == '__main__':
unittest.main()
3. Localizar el cuadro de texto «Buscar»
Ahora que estamos en Google, entonces necesitamos ubicar el cuadro de texto Buscar para que luego podamos interactuar con él. Para esto, el controlador web viene con una serie de métodos find_element . Podría decirse que esta es una de las partes más poderosas e importantes de Selenium en su conjunto, por lo que te recomiendo que juegues un poco con ella.
En este caso estaremos usando el método find_element_by_name, dado que el cuadro de texto de Búsqueda de Google ya tiene esta propiedad establecida y parece ser única.
Ten en cuenta que este no siempre será el caso. Habrá sitios con elementos que no parecen tener una forma clara de identificarlos. Para esos, revisa este otro tutorial.
En este punto, nuestro test_file.py se vería así:
import unittest
from selenium import webdriver
class QuickAndDirtySeleniumExample(unittest.TestCase):
def test_search_proper_tutorial(self):
driver = webdriver.Chrome()
driver.get("https://www.google.com/")
searchbox = driver.find_element_by_name("q")
if __name__ == '__main__':
unittest.main()
4. Escribir en el cuadro de búsqueda
Para escribir en un cuadro de texto (o prácticamente cualquier elemento que acepte texto como entrada), utilizamos la función send_keys(). Algo muy interesante acerca de esta función es que cuando se usa junto con la biblioteca de claves de Selenium (selenium.webdriver.common.Keys), tu puedes usar send_keys() para enviar cosas como Enter, Backspace, cualquier combinación extraña que desees hacer con las teclas de flecha, etc. En este caso, buscaremos “selenium automation framework qaboy” y luego presionamos Enter.
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class QuickAndDirtySeleniumExample(unittest.TestCase):
def test_search_proper_tutorial(self):
driver = webdriver.Chrome()
driver.get("https://www.google.com/")
searchbox = driver.find_element_by_name("q")
searchbox.send_keys("selenium automation framework qaboy")
searchbox.send_keys(Keys.ENTER)
if __name__ == '__main__':
unittest.main()
En este punto, hemos buscado nuestro tutorial adecuado y solo necesitamos identificar cuál de los resultados de Google es el que esperamos.
5. Busca nuestro tutorial
En este paso, tendremos que analizar un poco que és XPath. En este punto, hemos buscado nuestro tutorial adecuado y solo necesitamos identificar cuál de los resultados de Google es el que esperamos. XPath nos da la posibilidad de realizar una consulta para buscar cualquier etiqueta o propiedad dentro del sitio y puede permitirnos buscar utilizando un cierto nivel de lógica. Xpath es muy poderoso, pero también tiende a ser frágil y a demorar más tiempo en ejecutarse. Aquí hablo un poco más al respecto.
Aquí utilizaremos nuestro enlace real para buscar el elemento, esta información se almacena bajo la propiedad href.
Y una vez que encontremos nuestro elemento deseado, podemos seguir adelante y hacer clic en él. Nuestro código ahora debería verse así:
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class QuickAndDirtySeleniumExample(unittest.TestCase):
def test_search_proper_tutorial(self):
driver = webdriver.Chrome()
driver.get("https://www.google.com/")
searchbox = driver.find_element_by_name("q")
searchbox.send_keys("selenium automation framework qaboy")
searchbox.send_keys(Keys.ENTER)
link = driver.find_element_by_xpath(
"//a[@href='https://qaboy.com/2018/01/15/automated-framework-using-selenium-with-python/']")
link.click()
if __name__ == '__main__':
unittest.main()
6. Validamos nuestro resultado
¡Ahora solo tenemos que validar que obtuvimos el resultado deseado! Esto es tan simple como verificar que podemos encontrar un elemento que esperamos ver en este sitio. En este caso, buscaremos el título del artículo que tiene una clase llamada “entry-title” también podemos indentificarlo. Pero lo haremos un poco diferente.
Como en este caso, estamos validando específicamente que podemos encontrar este elemento, lo haremos con una afirmación. En las pruebas, una afirmación es básicamente la confirmación de una condición y, por lo general, se estructuran de la siguiente manera:
assert {condition}, {Failure message}
Tomando esto a nuestro código, obtendremos algo como esto:
import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class QuickAndDirtySeleniumExample(unittest.TestCase):
def test_search_proper_tutorial(self):
driver = webdriver.Chrome()
driver.get("https://www.google.com/")
searchbox = driver.find_element_by_name("q")
searchbox.send_keys("selenium automation framework qaboy")
searchbox.send_keys(Keys.ENTER)
link = driver.find_element_by_xpath(
"//a[@href='https://qaboy.com/2018/01/15/automated-framework-using-selenium-with-python/']")
link.click()
assert driver.find_element_by_class_name("entry-title"), "Element was not found."
if __name__ == '__main__':
unittest.main()
¡Y con esto estámos listos!
Ahora solo necesitas ejecutar la prueba con el siguiente comando:
python -m pytest test_cases.py
Eso es todo.
Autor: Mike Arias
Senior Software Testing Engineer TechAID.
Twitter: @theqaboy
Blog: qaboy.com/
OTHER POSTS YOU MIGHT LIKE
API- Herramientas de prueba: Una guía basada en ejemplos
Para las pruebas de API, existen muchas herramientas que nos permiten realizar las pruebas y recopilar los resultados. En este artículo, me enfocaré en tres herramientas mostrando directamente cómo hacer una solicitud usando la API de Trello. Pero antes de comenzar, dado que…
Clausula IF vs. ASSERT – ¿Cuándo se debe usar cuál?
La clausula IF y la declaración ASSERT cumplen funciones diferentes, pero similares. El objetivo de este artículo es establecer de una vez por todas cuándo usar «IF» y cuándo usar «ASSERT» en nuestros casos de prueba. Habrán situaciones en las que esta decisión no pueda…