Buscar

PowerShell: Rellenar formularios web

Durante los procesos de automatización y testing es muy frecuente encontrarnos con formularios, validaciones, con elementos web en general que se suelen terminar haciendo a mano ya que poca es poco conocido el proceso de cómo automatizar la navegación y rellenado de formularios web.

En este artículo vamos a explicar cómo podemos combinar Selenium y PowerShell para automatizar el rellenado de formularios web.
 
Selenium:

Selenium (https://www.selenium.dev/) es un framework gratuito y de código abierto para automatizar las pruebas del navegador web. Y dado que Selenium es portable y admite varios idiomas, está disponible para usar con PowerShell.

Selenium lanza una instancia de navegador web en el que se le pueden lanzar comandos (clics, búsquedas, tecleo de teclas) y se pueden mandar y recibir objetos.

Para este artículo vamos a rellenar un formulario de google forms  que hemos creado específicamente para este post a modo de ejemplo.

Primeros pasos con Selenium y PowerShell:

En una consola de PowerShell como Administrador:

#Instalamos módulo

Install-Module -Name Selenium
 
PowerShell: Automatizar rellenar formularios web

A continuación,  vemos que versión de Google Chrome tenemos instalada con PowerShell.

Necesitaremos saber la versión para cuando utilizemos chromedriver.

(Get-Item (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe').'(Default)').VersionInfo
 
PowerShell: Automatizar rellenar formularios web

Utilizaremos ChromeDriver.

ChromeDriver es una herramienta de código abierto para pruebas automatizadas de aplicaciones web en muchos navegadores, proporciona capacidades para navegar a páginas web, entrada de usuario, ejecución de JavaScript, etc..

Descargar ChromeDriver:

Entramos en: https://chromedriver.chromium.org/downloads

Y según la versión que tengamos elegimos de Google Chrome, elegiremos el link correspondiente:

PowerShell: Automatizar rellenar formularios web

Después elegimos la versión para el sistema operativo que usemos, en nuestro caso para Windows 10 sería:
 
PowerShell: Automatizar rellenar formularios web
 
Una vez descargado el ChromeDriver lo descomprimimos en cualquier ruta, nosotros usaremos: C:\ChromeDriver\
 
Y establecemos la variable de entorno ChromeWebDriver utilizando PowerShell:

$env:ChromeWebDriver = "c:\chromeDriver\"

Con esto ya tenemos todo a punto para empezar.

Recolección de información:

El segundo paso sería conseguir los datos de navegación:

RutaURL: 'https://Ejemplo-de-URL'

Una vez dentro necesitamos saber cómo identificar los campos que habrá que rellenar.

Para ello usaremos las herramientas de desarrollo del navegador:
 
PowerShell: Automatizar rellenar formularios web

PowerShell: Automatizar rellenar formularios web

1) Pulsamos botón derecho sobre el campo -> Inspeccionar
2) Pulsamos de nuevo botón derecho sobre el texto seleccionado automáticamente -> Copy -> Copy XPath.

Para nuestro formulario ('https://Ejemplo-de-URL') sería:

Nombre:

'//*[@id="mG61Hd"]/div[2]/div/div[2]/div[1]/div/div/div[2]/div/div[1]/div/div[1]/input'

Población (Por ejemplo: Madrid, Barcelona,...):

'//*[@id="mG61Hd"]/div[2]/div/div[2]/div[2]/div/div/div[2]/div/div[1]/div/div[1]/input'


Dirección de correo electrónico

'//*[@id="mG61Hd"]/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[1]/div/div[1]/input



'//*[@id="i17"]/div[3]/div'

No

'//*[@id="i20"]/div[3]/div'

Envía:

'//*[@id="mG61Hd"]/div[2]/div/div[3]/div[1]/div[1]/div/span/span'

PowerShell: Automatizar rellenar formularios web
 
Ahora que ya tenemos todas las rutas XPath de cada elemento del formulario a rellenar podemos proceder a desarrollar el script.

Desarrollo del script

#Instalamos módulo

Install-Module -Name Selenium
 
PowerShell: Automatizar rellenar formularios web
 
#Definimos en variable de entorno la ruta dónde está descargado el ChromeDriver

$env:ChromeWebDriver = "c:\ChromeDriver\"
 
PowerShell: Automatizar rellenar formularios web

#Lanzamos instancia de navegador

$Driver = Start-SeChrome
 
PowerShell: Automatizar rellenar formularios web

Y se inicia una instancia de navegador.
 
PowerShell: Automatizar rellenar formularios web

Una vez iniciada la instancia del navegador ya podemos introducir la URL:

#Introducimos la URL en la instancia de navegador

Enter-SeUrl -Driver $Driver -Url 'https://Ejemplo-de-URL'
 
PowerShell: Automatizar rellenar formularios web
 
En este momento deberíamos tener abierto el navegador con la página cargada:
 
PowerShell: Automatizar rellenar formularios web
 
Vamos utilizando las rutas XPath que teníamos apuntadas del principio para ir escribiendo (SendKeys) en cada elemento:

#Escribimos en 'Nombre'

$Driver.FindElementByXPath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[1]/div/div/div[2]/div/div[1]/div/div[1]/input').sendkeys("Mi nombre aquí")
 
PowerShell: Automatizar rellenar formularios web

#Escribimos en 'Población (Por ejemplo: Madrid, Barcelona,...)'

$Driver.FindElementByXPath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[2]/div/div/div[2]/div/div[1]/div/div[1]/input').sendkeys("Barcelona")
 
PowerShell: Automatizar rellenar formularios web

#Escribimos en 'Dirección de correo electrónico'

$Driver.FindElementByXPath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[1]/div/div[1]/input').sendkeys("MiEmail@midominio.com")
 
PowerShell: Automatizar rellenar formularios web

#Seleccion de opciones

#Click en 'Sí'

$Driver.FindElementByXPath('//*[@id="i17"]/div[3]/div').click()
 
PowerShell: Automatizar rellenar formularios web

#Click en 'No'

$Driver.FindElementByXPath('//*[@id="i20"]/div[3]/div').click()
 
PowerShell: Automatizar rellenar formularios web

#Click en botón de 'Envia'.

$Driver.FindElementByXPath('//*[@id="mG61Hd"]/div[2]/div/div[3]/div[1]/div[1]/div/span/span').click()
 
PowerShell: Automatizar rellenar formularios web


#Limpiamos y cerramos

$Driver.Close()

$Driver.Quit()


Otros usos de la automatización web:

- Migrar datos de un sitio a una web o desde una web a otro destino.

- Automatizar monitorización de sitios web, ya sea simulando una compra de un producto etc.

- Automatizar altas de usuarios en todos los servicios externos que se usa web para las altas (intranet, CRM, servicios cloud…)

- Descargas de facturas de webs proveedores, drivers…

- Programación de eventos en formularios web.

- Gestión de proveedor DNS…

- Cuéntanos en los comentarios otros usos que se te ocurran.

Script completo:

#Instalamos módulo

Install-Module -Name Selenium

#Definimos en variable de entorno la ruta dónde está descargado el ChromeDriver

$env:ChromeWebDriver = "c:\ChromeDriver\"

#Lanzamos instancia de navegador

$Driver = Start-SeChrome

#Introducimos la URL en la instancia de navegador

Enter-SeUrl -Driver $Driver -Url 'https://Ejemplo-de-URL'

Start-Sleep 5

#Escribimos en 'Nombre'

$Driver.FindElementByXPath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[1]/div/div/div[2]/div/div[1]/div/div[1]/input').sendkeys("Mi nombre aquí")

#Escribimos en 'Población (Por ejemplo: Madrid, Barcelona,...)'

$Driver.FindElementByXPath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[2]/div/div/div[2]/div/div[1]/div/div[1]/input').sendkeys("Barcelona")

#Escribimos en 'Dirección de correo electrónico'

$Driver.FindElementByXPath('//*[@id="mG61Hd"]/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[1]/div/div[1]/input').sendkeys("MiEmail@midominio.com")

#Seleccion de opciones

#Click en 'Sí'

$Driver.FindElementByXPath('//*[@id="i17"]/div[3]/div').click()

#Click en 'No'

$Driver.FindElementByXPath('//*[@id="i20"]/div[3]/div').click()

#Click en botón de 'Envia'.

$Driver.FindElementByXPath('//*[@id="mG61Hd"]/div[2]/div/div[3]/div[1]/div[1]/div/span/span').click()

#Limpiamos y cerramos

$Driver.Close()

$Driver.Quit()


Recuerda el lema: “Si no llegas a todo es que no estás automatizando lo suficiente”

1 comentario:

  1. Lo voy a probar y te aviso, de cualquier forma es un excelente trabajo de investigación
    Javier Terán

    ResponderEliminar