Tomo 1 - Guía Selenium
Tomo 1 - Guía Selenium
Tomo 1 - Guía Selenium
Medellín, Antioquía
DANIEL CORREA – ORLANDO RUEDA
Colombia
1
GUÍA SELENIUM
A continuación, se ahondará nuestra investigación en el mundo de Selenium, pero como
primer contacto. Nos surgen ciertas preguntas que serán resueltas en el desarrollo de
este documento.
¿Qué es Selenium?
Selenium es un framework1 para la prueba de software que en resumidas cuentas nos
permite automatizar los navegadores. Selenium cuenta con el apoyo de algunos de los
proveedores de navegadores más grandes que han tomado (o están tomando) medidas
para hacer que Selenium sea una parte nativa de su navegador. También es la tecnología
principal en innumerables otras herramientas de automatización del navegador, API y
marcos.
Fuente: https://es.wikipedia.org/wiki/Selenium
¿Qué opciones tiene Selenium a la hora de automatizar?
Selenium nos provee de tres opciones a la hora de automatizar:
• Selenium IDE: Es un entorno de desarrollo
integrado para scripts de Selenium. Está
implementado como una extensión de Firefox, y le
permite grabar, editar y depurar pruebas. Selenium
IDE no es solo una herramienta de grabación: es un
IDE completo.
2
usuario, ya sea localmente o en una máquina remota que utiliza el Servidor de
Selenium, significa un avance en cuanto a la automatización del navegador.
Selenium Web Driver encaja en la misma función que RC, y ha incorporado los
enlaces 1.x originales. Se refiere tanto a los enlaces de idioma como a las
implementaciones del código de control del navegador individual. Esto se conoce
comúnmente como solo "Web Driver" o algunas veces como Selenium 2.
Web Driver es el nombre de la interfaz clave contra la cual las pruebas deben
escribirse en Java, las clases de implementación que uno debe usar se enumeran
a continuación:
ChromeDriver, EventFiringWebDriver, FirefoxDriver, HtmlUnitDriver, InternetExpl
orerDriver, PhantomJSDriver, RemoteWebDriver, SafariDriver.
3
Paso 1. Para usuarios de Windows, seleccionar la opción Chromedriver win32.zip, para
usuarios Linux, seleccionar Chromedriver linux4.zip, así mismo, para Usuarios Mac,
deben seleccionar Chromedriver mac64.zip
4
Luego de obtener el driver de Chrome, procedemos a adentrarnos en el mundo de la
automatización de la mano de Selenium, y para eso es muy importante tener en cuenta
conceptos claves que nos ayudarán a comprender mejor el funcionamiento de una
automatización.
Hemos estado hablando de Driver’s, pero no hemos hecho referencia a qué significan, ni
qué hacen, por tanto,
¿Qué es un Driver?
Cuando se refieran a driver (Representado por la interfaz WebDriver) se está haciendo
referencia al soporte nativo para un navegador (Chrome, Firefox, Safari, etc.) el cual nos
permite realizar llamadas directas a él para la automatización.
Teniendo en cuenta esto, ahora, cómo interactuar con la página web, podrá ser una de
inquietudes, por tanto,
¿Qué es un WebElement?
Representa un elemento HTML. En general, todas las operaciones interesantes
relacionadas con la interacción con una página se realizarán a través de esta interfaz.
Cabe mencionar que hay otros tipos de interfaces según lo requerido.
¿Cómo localizar un elemento HTML de la página web?
Además de etiquetas y atributos, HTML define el término elemento para referirse a las
partes que componen los documentos HTML.
Aunque en ocasiones se habla de forma indistinta de "elementos" y "etiquetas", en
realidad un elemento HTML es mucho más que una etiqueta, ya que está formado por:
5
• Una etiqueta de apertura.
• Cero o más atributos.
• Texto encerrado por la etiqueta.
• Una etiqueta de cierre.
Si bien es cierto que las páginas web tienen un sin número de etiquetas, es nuestra tarea
saber identificar cual atributo puede ser útil para seleccionar un elemento en específico.
Algunos atributos son los siguientes:
• Id
• Name
• Class
• TagName
• Placeholder
• Value
En muchas ocasiones se nos hace realmente complicado seleccionar un elemento en
particular de una página debido a ciertos factores, como, por ejemplo, que en muchos
casos los elementos HTML, no tienen id único, no tienen name, hasta incluso, más de un
elemento tiene la misma clase.
A partir de esta problemática, surgen un par de soluciones que pueden ayudarnos de
gran manera a la hora encontrar un elemento dentro de la página web, Como lo son:
• XPATH
• CSS SELECTOR
¿Qué es el XPATH?
XPath se define como ruta XML. Es una sintaxis o lenguaje para encontrar cualquier
elemento en la página web utilizando la expresión de ruta XML. XPath se usa para buscar
6
la ubicación de cualquier elemento en una página web utilizando la estructura HTML DOM.
El formato básico de XPath se explica a continuación con una captura de pantalla.
7
• XPath relativo: Para XPath relativo, la ruta comienza desde el medio de la
estructura HTML DOM. Comienza con la barra diagonal doble (//), lo que significa
que puede buscar el elemento en cualquier lugar de la página web.
8
Para más información visite:
https://www.guru99.com/xpath-selenium.html
9
palabras, debemos pasarle el localizador que previamente se explicó, puede ser por
class, por id, por XPath, etc. Se implementa de la siguiente forma.
¿Cuáles son las Acciones que provee Selenium para interactuar con la página
web?
Dentro del mundo de Selenium, existen métodos para interactuar con la página web los
cuales son muy importantes a la hora de automatizar. Como se mencionó con
anterioridad, los elementos HTML se definen como WebElement, el cual posee métodos
que se engloban dentro del tema de las acciones como, por ejemplo:
• El método clic, que hace referencia a hacer clic en un elemento de la página.
• El método SendKeys(), que sirve para enviar texto a cajas de texto como inputs
y textarea.
• El método getText(), este método obtendrá el texto interno visible (es decir, no
oculto por CSS) del elemento. Esto no acepta nada como un parámetro, pero
devuelve un valor de cadena.
10
• El método getAttribute(), este método obtiene el valor del atributo dado del
elemento. Esto acepta la cadena como parámetro y devuelve un valor de cadena.
Estos son algunos métodos que son realmente útiles a la hora de realizar una
automatización con página web, existen muchos otros métodos que engloban otro tipo
de funcionalidades.
• ¿Qué tiempos de espera ofrece Selenium?
Las esperas en Selenium WebDriver son muy útiles para solucionar o evitar los
frecuentes errores presentados por Selenium (no such element exception, Element not
visible Exception, Element is not clickable at point) entre otras frecuentes excepciones.
Supongamos que estamos tratando de encontrar un elemento que tiene algún
“ExpectedConditions” (espera explícita), si el elemento no está situado dentro del marco
de tiempo definido por la espera explícita (10 segundos), se utilizará el marco de tiempo
definido por la espera implícita (20 segundos) antes de lanzar un
“ElementNotVisibleException”.
Existen dos tipos de esperas,
• Implicit Wait – se utiliza para establecer el tiempo de espera predeterminado en
todo el programa.
• Explicit Wait – se utiliza para establecer el tiempo de espera para solo una
instancia en particular.
En resumidas cuentas… Implicit Wait ejecutará un tiempo de espera sin que se cumpla
alguna condición. Sí o sí ejecuta el tiempo de espera. Explicit Wait ejecutara un tiempo
de espera dependiendo de la condición que se establezca.
11
¿Qué son las esperas implícitas?
• Es más sencillo de codificar que las esperas explícitas (Explicit Wait).
• Normalmente se declara en la parte de instanciación del código.
• Sólo necesitará un paquete adicional para importar.
Implicit Wait le dirá al WebDriver que espere cierta cantidad de tiempo antes de que
lance una excepción de “No Such Element Exception”. La configuración predeterminada
es 0. Una vez que configuremos el tiempo, el WebDriver esperará ese tiempo antes de
lanzar una excepción.
En el ejemplo siguiente hemos declarado una Implicit Wait con el marco de tiempo de 10
segundos. Esto significa que, si el elemento no está situado en la página web dentro de
ese marco de tiempo, se producirá una excepción.
Para declarar la espera implícita:
12
Ahora ya estamos listo para comenzar a realizar nuestra primera automatización. Pero
primero creemos un nuevo proyecto.
13
Paso 3. Verificamos que el apartado de Location se encuentre en la carpeta en la que
queremos crear nuestro nuevo proyecto, y presionamos Next.
Paso 4. Debemos seleccionar este tipo de archetype, en Group id validamos que esté
‘org.maven.archetypes’, y en Artifact Id debe estar ‘maven-archetype-quickstart’ y la
versión es la ‘1.1’ y presionamos Next.
14
Paso 5. Debemos llenar los campos Group Id que se refiere al dominio, en este caso,
‘com.accenture’, y el Artifact Id se refiere al nombre que le pondremos a la carpeta
del proyecto. Así mismo Versión, hace referencia a la versión del proyecto que vamos a
desarrollar, luego de llenar estos campos damos clic en Finish.
15
Sí por alguna razón tenemos errores, podemos probar con lo siguiente.
Clic derecho, en la raíz del proyecto, y deberían ver lo siguiente,
16
Debemos seleccionar el proyecto actual, En este caso ‘SeleniumCap’, de darle clic en
‘Force Update of Snapshot/Realeases’ y proceder a darle clic en OK.
17
Paso 7. Luego procederemos a acceder al proyecto, e iremos al POM.xml, en donde
encontrarán configuraciones que necesita el proyecto para poder realizar la
automatización, se deberá ver lo siguiente:
18
Luego, para comenzar a automatizar con Selenium, que es de nuestro interés en estos
momentos, necesitamos importar un par de dependencias, y un plugin. Que se verán a
continuación:
19
Debe aparecernos lo siguiente:
Qué es un código que nos entrega por defecto el IDE cuando creamos un nuevo
proyecto. Que lo que hace es imprimir en consola “¡Hello World!”.
20
AUTOMATIZACIÓN I – UTILIZANDO MAVEN
Paso 1. Declaramos el driver de tipo WebDriver y definimos las propiedades que tendrá
el driver.
Luego, definimos que trabajaremos con el driver de Chrome, realizando las instancia de
ChromeDriver(). Así mismo, maximizamos el navegador de Google Chrome, con las
propiedades driver.manage().windows().maximize().
Luego debemos decirle al driver en qué url debe abrir por defecto, esto se realiza con
driver.get(“www.google.com.co”), con esto le decimos que debe abrir en la página de
21
inicio de Google. Y, por último, no menos importante, debemos ponerle un tiempo de
espera implícito
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS); // Tiempo de espera implicito.
Como podemos observar, se declara una variable de tipo WebElement llamada search,
que nos servirá para localizar con el método de findElement mencionado con
anterioridad, el primer elemento HTML de nuestra página, que en este caso es la caja de
texto para escribir “Medellín”.
22
Luego de mapearlo, debemos implementar el método SendKeys, qué nos servirá para
enviar texto hacia el input de la página de Google, así mismo, se puede observar que al
final de “Medellín”, está un símbolo no muy particular “\n”, que la función que cumple es
indicarle al driver que debe darle Enter, y realizar la búsqueda.
Una vez en esta página debemos ingresar al Link que proporciona Wikipedia, para ello
debemos mapear ese elemento HTML de la página web, esto lo hacemos en la siguiente
línea,
23
Por consiguiente, debemos capturar el título, en este caso “Medellín”. Para ello
debemos localizar este elemento en la página, con su respectivo XPath, u otro atributo
con el cual podemos seleccionar el elemento en específico.
24
se cumple debería entrar al IF, e imprimir en consola “Es igual a Medellín”, si no se
cumple esta condición, debería imprimir “No es igual a Medellín”.
Lo último que nos queda de nuestra automatización, es escribir en el input, que se
encuentra dentro de la página de Wikipedia.
Como prueba, realizamos una instancia de WebDriverWait, que nos sirve para realizar
tiempos de espera explícitos, a este, debemos pasarle el driver, y un tiempo de espera
predefinido que será de 20 segundos.
Definimos nuestra variable de tipo WebElement, y envés de realizar la búsqueda como
estamos acostumbrados, es decir con el método findElement(), ahora utilizaremos algo
diferente que lo que hará es esperar hasta que el elemento que nosotros deseemos sea
clickable, el tiempo que previamente le predefinimos. Y de forma posterior, utilizamos el
método SendKeys() para escribir en el input.
25
Hay algo importante, sin embargo, no es buena práctica utilizarlo. El Thread.Sleep(3000),
lo que hace es parar el hilo de ejecución actual, hasta que pase el tiempo definido que en
este caso es de 3 segundos.
Por último, con el método clear(), limpiamos la caja de texto. En este punto nuestra
automatización debe haber terminado.
Existen algunas herramientas que nos facilitan la vida en muchas ocasiones,
➢ CHROPATH: Chropath es una herramienta poderosa para encontrar los XPath
(relativo o absoluto) de cualquier página web, además del Css Selector.
https://chrome.google.com/webstore/detail/chropath/ljngjbnaijcbncmcnjfhigebomdlk
cjo?hl=en
➢ XPATH HELPER: XPath Helper facilita la extracción, edición y evaluación de
consultas XPath en cualquier página web. Es decir, le ingresas el XPath que estás
buscando, y él te lo selecciona en la página web.
https://chrome.google.com/webstore/detail/xpath-
helper/hgimnogjllphhhkhlmebbmlgjoejdpjl/related?hl=en
26
AUTOMATIZACIÓN I – UTILIZANDO GRADLE
Paso 1. Procedemos a la creación del proyecto
27
Una vez creado el proyecto, se debería tener lo
siguiente, a excepción del chromdriver.exe, que
de igual manera debemos pegar en la raíz del
proyecto debido a que será el navegador que
utilizaremos.
Una vez hecho esto, vamos al archivo
Build.gradle, que es lo análogo al pom.xml de
Maven, este archivo debería tener la siguiente configuración por defecto…
Tiene en su interior una configuración
básica para Java. Por lo tanto, y como
vamos a utilizar Selenium debemos ir a la
pagina de Maven Repository, y buscar la
dependencia de Selenium para Gradle,
así…
28
Copiamos la dependencia, y debemos pegarla en el Build Gradle, así….
29
Una vez hecho esto, en la parte inferior derecha
debería estar cargando algo, esperemos hasta
que esto termine.
Luego, creamos una clase en el paquete
src/main/java, llamada “App.java” al igual
que en Maven, esta clase no va a cambiar en
nada, por tanto, copiamos y pegamos el código.
Y debería quedar de la siguiente forma.
30
Por último, debemos ejecutar el proyecto, por tanto, clic derecho a la clase App.java,
luego Run As, y lo ejecutamos como Java Application.
31