Selenium es una herramienta de pruebas de software para aplicaciones web que permite escribir pruebas en varios lenguajes de programación como Python. Selenium WebDriver se utiliza para probar el correcto funcionamiento de una página web enviando comandos y obteniendo resultados. El documento proporciona ejemplos de cómo usar Selenium WebDriver con Lettuce en Python para realizar pruebas en una página web, incluyendo seleccionar elementos, escribir texto, realizar drag and drop, y manejar excepciones. También introduce a Pycabara, una implementación de Python de
1. 1
Selenium with lettuce and python
¿Qué es Selenium?
Seleniumesunentornode pruebasde software paraaplicacionesweb. Esposible escribir
estaspruebasennumerososlenguajesde programacióntalescomojava,python,php,ruby,
etc.En este caso,noscentraremosencómo realizarlaspruebasenPhyton,perolarealidades
que de un lenguaje aotrolas diferenciassonmínimas.Estaspruebaspuedenejecutarse
utilizandolamayoríade losnavegadoreswebyendiferentessistemasoperativossinningún
problema.
Seleniumestáformadopornumerososcomponentes,entre losque nosencontramos:
SeleniumIDE,SeleniumclientAPI,Seleniumremote control,SeleniumWebDriverySelenium
Grid.Nosotrosrealizaremosel siguiente tutorial conSeleniumWebDriver.
¿Paraqué se utiliza Selenium WebDriver?
SeleniumWebDriverse utilizaparatestearel correctofuncionamientode unapáginaweb.Es
decirque la páginahaga loque tengaque hacer.Esto lo realizaenviandocomandosauna
páginaweb,y obteniendoresultados.Unade las cualidadesprincipales,esque el Selenium
WebDrivernonecesitaunservidorespecial paraejecutarlostests,si noque inicia
directamente el navegadorindicadoal comenzarlaejecucióndel test.
Ventajas de Selenium WebDriver
Testingmultibrowser:soportandoejecucionesdirectassobre IE,MozillayChrome.
Control de variosframes,popups,alerts,etc.
Navegaciónentre páginas.
Es muy fácil añadirnuevasfuncionalidadesalos tests.
No necesitaunservidorpropioparaejecutarlostest(comoocurre enotros
componentesde Selenium).
Permite realizarpruebasenpáginasque se ejecutanendispositivosmóvilesgraciasal
AndroidDriveryIphoneDriver.
Es muy rápidoya que realiza llamadasdirectas,sinningunaintervenciónexterna.
A continuaciónrealizaremospasoapaso algunosejemplosconSeleniumWebDriverylettuce
sobre una páginaweb.
Ejemplo:
Supongamoslaweb http://www.cheesecake.com/.A continuaciónrealizaremosuntesteode
algunade las funcionesposiblesque podemosimplementarconestaherramienta.
Lo primeroque tenemosque hacerescrear unproyectoy dentrounarchivo .feature yotro.py
como muestralasiguiente imagen:
2. 2
Una vez hechoesto,procederemosacrear el feature especificandolasacciones(de manera
más clara posible,conloque queramosque haganuestrotest).Encuyocaso, el archivopuede
serde la siguientemanera:
Una vez hechoesto, procederemosacompletarel archivo.pyque contendrátantossteps
como líneastengael scenario.
El códigode losstepspodría ser de la siguientemanera:
3. 3
Lo primeroque tenemosque haceresimportartodaslaslibreríasde lettuce yde Selenium, el
WebDriver.
A continuación,pondremoscomovariable global el driver,que eslapaginaa lacual le voya
realizarel testeo. Estavariable lapongocomoglobal,yaque la utilizaré entodoslossteps.Si
no lapusiese comovariable global,tendríaque inicializarlaencadaunode losstepsy se
abriría una ventananuevacadavezque accedoa un step.
A continuación,ycomohemosdichoantes,tengotantosstepscomolíneastengodentrodel
scenario.
Esta línea,me permite seleccionarunelemento.Es importante destacarque lalíneacompleta
esla siguiente:
element =
driver.find_element_by_xpath("/html/body/form/div[5]/div/di
v/div[3]/div[3]/div/div[2]/div/table/tbody/tr/td/div/div/a/
img").click()
A pesarde que no se aprecie enlaimagen,termina conun“.click()”. Estalíneame sirve en
cualquiercasopara seleccionarcualquierelemento,loúnicoque tengoque hacerescambiar
el xpathpara cada unode loselementos.
4. 4
Es importante destacar,que ademásde lalocalizaciónporxpathque estamosrealizandoen
este caso,tambiénse puede realizarlalocalizaciónpornombre,id,tag,nombre de laclase o
CSS selectorconlossiguientesmétodosdriver.find_element_by_name,
driver.find_element_by_id,driver.find_element_by_tag_name,
driver.find_element_by_class_name odriver.find_element_by_css_selector respectivamente.
Esta línea,permite borrarla informaciónque hayenuncuadro de texto,si esque tiene
informaciónpordefecto.
La siguientelíneanospermiteescribirinformaciónenel cuadrode texto,enel que
anteriormente borre suinformaciónpordefecto.El valorque vaentre () esaquel que escribiré
dentrodel box.
El select,nospermite seleccionarunelementode undesplegable.El procedimientoes
exactamente el mismoque antes,simplemente que el xpathcambiasegúnel correspondiente.
En este caso,igual que antes,la líneacompletaeslasiguiente:
select =
driver.find_element_by_xpath("/html/body/form/div[5]/div/di
v/div[4]/div/div[2]/table/tbody/tr[5]/td/select/option[4]")
.click()
Resultadosobtenidos:
Despuésdel primerstep:
Despuésdel segundostep:
6. 6
Despuésdel últimostep:
Otras funcionalidades:
Ademásde todoesto,que eslo básico,nosinteresasaberque otrasfuncionalidadestiene
Selenium.Entre ellasnosencontramos:
Drag and drop
Para explicaresto,loharemosmediante el ejemplode www.amazon.co.uk.
Al igual que antescreamoslos.feature correspondientesal igual que los.pyconlos
stepsnecesarios.
Para realizarel drag anddrop se hace de la siguiente manera:
La primeralíneaseleccionael objetoque deseamover.
En la segundalínea,seleccionael xpathdel lugardonde vaadejarse ese objeto
En la terceralínearealizoel dragand drop de esosdosobjetos.
Foward:
Con lalínea avanzamosa la páginasiguiente
Back:
Con lalínea vamosa la páginaanterior.
Explicitwait
7. 7
Se utilizacuandoqueremosindicarle al testque espere hastaque se cumplacierta
condición.
Implicitwait:
Se utilizaparaindicarque el máximode tiempoque puede esperaresel indicado
dentrode losparéntesis.
Close:
Se utilizaparacerrar laventanauna vezhayamosfinalizadoel test.
Excepciones:
Para poderutilizaralgunaexcepciónesnecesarioimportarlaconla siguientelíneade
código:
Dentrode los [] hay que ponerel nombre de laexcepción.Si queremosimportarmás
de una excepciónhemosde hacerlomediantecomas. Lasexcepcionesque podemos
manejarsonlas siguientes:
o ElementNotSelectableException:hasintentadoseleccionarunelementoque
no puede seleccionarse.
o ErrorInResponseException:lanzalaexcepcióncuandohayunproblemadel
ladodel servidor.
o InvalidSwitchToTargetException:Cuandolaventanaalaque quierocambiar
no existe.
o MoveTargetOutOfBoundsException:Cuandoel elemento que quierohacer
drop esinvalido.
Estos sonalgunasde muchas excepcionesque podemosutilizar.Paramás
informaciónsobre lasexcepcionesvisitarlapágina: https://selenium-
python.readthedocs.org/api.html
CapyBara with lettuce and python
Lo primeroque hayque hacer esinstalarpycabara,para ello,ponemoslasiguiente línea:
8. 8
Y si se ha instaladocorrectamente saldránlossiguientesmensajes:
¿Qué es pycabara?
Es una implementaciónde pythonde capybaraque permite realizartestenaplicacionesweb.
Simulacomoun usuariointeractúaconla web.
¿Paraqué se utiliza?
Ventajas de pycabara
Trabaja “out of the box”.
Tiene unaAPImuyintuitivay fácil de aprenderymanejarpara el usuario.
Tiene unafuerte sincronización,loque significaque nohaynecesidadde sincronizar
lostestmanualmente paraterminarel proceso.