Selenium Python PDF
Selenium Python PDF
Lanzamiento 2
Baiju Muthukadan
23 de mayo de 2017
Contenido
1 Instalación 3
1.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Descargando Vínculos de Python para Selenium. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Controladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Detallado instructions for Windows users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Descargando Servidor Selenium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Consiguiendo Comenzó 7
2.1 Sencillo Uso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Ejemplo Explicado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Usando Selenium para escribir pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Caminar a través del ejemplo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Usando Selenium con WebDriver remoto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 Navegando 13
3.1 Interactuando con la página . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2 Relleno en formularios14
3.3 y dejar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Arrastre
3.4 Mudanza entre ventanas y marcos 15
Ventana emergente 3.5 diálogos.................... 16
3.6 Navegación: historia y ubicación 16
3.7 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4 Localización Elementos 17
4.1 Localización por Id. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Localización por Nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 Localización por XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.4 Localización Hipervínculos por texto del enlace 20
4.5 Localización Elementos por Nombre de Etiqueta. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.6 Localización Elementos por Nombre de Clase21
4.7 Localización Elementos por selectores CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5 Esperas 23
Explícito Espera23
5.2 Implícito Espera24
6 Página Objetos 27
yo
6.1 Prueba caso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.2 Página clases de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.3 Página elementos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.4 Localizadores 29
7 WebDriver API 31
7.1 Excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.2 Acción Cadenas35
7.3 Alertas 38
7.4 Especial Claves39
7.5 Localizar elementos Por41
7.6 Deseado Capacidades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7.7 Servicios públicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
7.8 Firefox Controlador Web43
7.9 Chrome WebDriver44
7.10 Remoto WebDriver. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.11 WebElement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.12 Interfaz de usuario Apoyo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.13 Color Soporte58
7.14 Esperado condiciones de soporte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
9 Índices y mesas 65
Índice de Módulos de Python 67
ii
Vínculos de Selenium para Python, Versión 2
AutorBaiju Muthukadan
LicenciaEste documento está licenciado bajo unCreative Commons Atribución-CompartirIgual 4.0 Internacional
Licencia.
Nota: Esta no es una documentación oficial. La documentación oficial de la API está [Link]í.
Contenidos 1
Vínculos de Selenium Python, Lanzamiento 2
2 Contenidos
CAPÍTULO 1
Instalación
Introducción
Los bindings de Selenium para Python proporcionan una API simple para escribir pruebas funcionales/de aceptación utilizando Selenium WebDriver.
A través de la API de Selenium Python, puedes acceder a todas las funcionalidades de Selenium WebDriver de una manera intuitiva.
Los enlaces de Selenium para Python proporcionan una API conveniente para acceder a los WebDrivers de Selenium como Firefox, Ie, Chrome, Remoto
etc. Las versiones de Python actualmente soportadas son 2.7, 3.5 y superiores.
Esta documentación explica la API de Selenium 2 WebDriver. La API de Selenium 1 / Selenium RC no se cubre aquí.
Puedes descargar los enlaces de Python para Selenium desde elPágina de PyPI para el paquete selenium. Sin embargo, un mejor ap-
el enfoque sería usarpippara instalar el paquete selenium. Python 3.6 tiene pip disponible en elbiblioteca estándar. Usando
pip, puedes instalar selenium así:
Puedesconsiderarusarentorno virtualpara crear entornos de Python aislados. Python 3.6 tienepyvenvque es casi
mismo que virtualenv.
Controladores
Selenium requiere un controlador para interactuar con el navegador elegido. Firefox, por ejemplo, requieregeckodriver, que
debe instalarse antes de que se puedan ejecutar los ejemplos a continuación. Asegúrate de que esté en tu PATH, por ejemplo, colócalo en /usr/bin o
/usr/local/bin.
El incumplimiento de este paso te dará un error [Link]: Mensaje: 'geck-
El ejecutable de odriver debe estar en PATH.
3
Bindings de Selenium para Python, versión 2
Otros navegadores compatibles tendrán sus propios controladores disponibles. Enlaces a algunos de los controladores de navegador más populares.
seguir.
Chrome:[Link]
Borde: [Link]
Firefox [Link]
Safari: No puedo acceder a enlaces externos o traducir su contenido.
Ahora puedes ejecutar tus scripts de prueba utilizando Python. Por ejemplo, si has creado un script basado en Selenium y lo has guardado
dentro de C:\my_selenium_script.py, puedes ejecutarlo así:
C:\Python35\[Link] C:\my_selenium_script.py
Nota: El servidor Selenium solo es necesario si deseas usar el WebDriver remoto. Ver elUsando Selenium
con WebDriver remotosección para más detalles. Si eres un principiante aprendiendo Selenium, puedes omitir esta sección
y proceder con el siguiente capítulo.
El servidor Selenium es un programa de Java. Se recomienda el entorno de ejecución de Java (JRE) 1.6 o una versión más nueva para ejecutarlo.
Servidor de Selenium.
Puedes descargar el servidor Selenium 2.x desde elpágina de descarga del sitio web de seleniumEl nombre del archivo debería ser algo-
cosa como esto: [Link]. Siempre puedes descargar la última versión 2.x
del servidor Selenium.
Si el Entorno de Ejecución de Java (JRE) no está instalado en su sistema, puede descargar elJRE desde el sitio web de Oracle.
Si estás utilizando un sistema GNU/Linux y tienes acceso root en tu sistema, también puedes usar tu sistema operativo
instrucciones para instalar JRE.
Si el comando ifjavacommand está disponible en la PATH (variable de entorno), puedes iniciar el servidor Selenium usando este comando.
mand:
java-jar [Link]
Reemplace 2.x.x con la versión actual del servidor Selenium que descargó del sitio.
Si JRE está instalado como un usuario no root y/o si no está disponible en la PATH (variable de entorno), puedes escribir el
ruta relativa o absoluta al comando java. De manera similar, puedes proporcionar una ruta relativa o absoluta al servidor de Selenium
archivo jar. Entonces, el comando se verá algo así:
4 Capítulo 1. Instalación
Vínculos de Selenium para Python, Versión 2
/ruta/a/java-jar/ruta/a/[Link]
6 Capítulo 1. Instalación
CAPÍTULO 2
Empezando
Uso Simple
Si has instalado los enlaces de Selenium para Python, puedes empezar a usarlo desde Python así.
fromseleniumimportcontrolador de web
[Link]
controlador=[Link]()
[Link]("[Link]
afirmarPythonentitulo del controlador
elem=driver.find_element_by_name("q")
[Link]()
elem.send_keys("pycon")
elem.enviar_claves([Link])
afirmarNo se encontraron [Link] enfuente_de_página_del_controlador
[Link]()
El script anterior se puede guardar en un archivo (por ejemplo: python_org_search.py), luego se puede ejecutar de esta manera:
python python_org_search.py
Ejemplo Explicado
El módulo [Link] proporciona todas las implementaciones de WebDriver. Implementaciones de WebDriver actualmente soportadas.
las implementaciones son Firefox, Chrome, IE y Remoto. La clase Keys proporciona teclas en el teclado como RETORNO, F1, ALT
etc.
desde selenium importarcontrolador
de navegador
[Link]
7
Selenium Python Bindings, Release 2
controlador=[Link]()
El método [Link] navegará a una página dada por la URL. WebDriver esperará hasta que la página se haya cargado completamente.
(es decir, el evento 'onload' se ha activado) antes de devolver el control a su prueba o script. Vale la pena señalar que si su página
utiliza mucho AJAX al cargar, por lo que WebDriver puede no saber cuándo se ha cargado completamente.
[Link]("[Link]
La siguiente línea es una afirmación para confirmar que el título contiene la palabra “Python”:
WebDriver ofrece varias formas de encontrar elementos utilizando uno de los métodos find_element_by_*. Por ejemplo, el
El elemento de texto de entrada se puede localizar por su atributo de nombre utilizando el método find_element_by_name. Explicación detallada de
encontrar elementos está disponible en elLocalizando Elementoscapítulo
elem=driver.encontrar_elemento_por_nombre("q")
A continuación, estamos enviando teclas, esto es similar a ingresar teclas utilizando su teclado. Las teclas especiales se pueden enviar utilizando Keys.
clase importada de [Link]. Para estar seguros, primero borramos cualquier texto prellenado en la entrada.
campo (por ejemplo, 'Buscar') para que no afecte nuestros resultados de búsqueda:
[Link]()
elem.send_keys("pycon")
elem.enviar_claves([Link])
Después de enviar la página, deberías obtener el resultado si hay alguno. Para asegurarte de que se encuentren algunos resultados, haz un
afirmación:
Finalmente, se cierra la ventana del navegador. También puedes llamar al método quit en lugar de cerrar. El quit saldrá de todo el navegador.
mientras que 'cerrar' cerrará una pestaña, pero si solo había una pestaña abierta, por defecto la mayoría de los navegadores saldrán completamente.
[Link]()
Selenium se utiliza principalmente para escribir casos de prueba. El paquete Selenium en sí no proporciona una herramienta/marco de pruebas.
Puedes escribir casos de prueba utilizando el módulo unittest de Python. Las otras opciones para una herramienta/marco son [Link] y nose.
En este capítulo, utilizamos unittest como el marco de elección. Aquí está el ejemplo modificado que utiliza el módulo unittest.
Esta es una prueba de la funcionalidad de búsqueda de [Link]:
importarunittest
fromseleniumimportcontrolador de Web
de [Link] importarClaves
classPythonOrgSearch([Link]):
defsetUp(self):
[Link]=[Link]()
8 Capítulo 2. Empezando
Vínculos de Selenium para Python, Versión 2
deftest_busqueda_en_python_org(self):
driver=[Link]
[Link]("[Link]
[Link]("Python", [Link])
elem=driver.buscar_elemento_por_nombre("q")
elem.send_keys("pycon")
elem.send_keys([Link])
afirmarNo se encontraron [Link] enfuente_de_la_página_del_controlador
deftearDown(self):
[Link]()
si__main__
[Link]()
python test_python_org_search.py
.
----------------------------------------------------------------------
PruebaRan1en15.566s
Está bien
importarunittest
desde selenium importarwebdriver
[Link]
La clase de caso de prueba se hereda de [Link]. Heredar de la clase TestCase es la forma de informar al módulo unittest.
esto es un caso de prueba:
clasePythonOrgBuscar([Link]):
El setUp es parte de la inicialización, este método se llamará antes de cada función de prueba que vayas a escribir.
en esta clase de caso de prueba. Aquí estás creando la instancia de Firefox WebDriver.
defconfigurar(self):
[Link]=[Link]()
Este es el método de caso de prueba. El método de caso de prueba siempre debe comenzar con characterstest. La primera línea dentro de esto
crear una referencia local al objeto driver creado en el método setUp.
defprueba_buscar_en_python_org(self):
[Link]
El método [Link] navegará a una página dada por la URL. WebDriver esperará hasta que la página se haya cargado completamente.
(es decir, el evento “onload” se ha disparado) antes de devolver el control a su prueba o script. Vale la pena señalar que si su página
si usa mucho AJAX al cargar, entonces WebDriver puede no saber cuándo se ha cargado completamente.
[Link]("[Link]
La siguiente línea es una afirmación para confirmar que el título tiene la palabra 'Python' en él:
[Link]("Python", [Link])
WebDriver ofrece varias formas de encontrar elementos utilizando uno de los métodos find_element_by_*. Por ejemplo, el
El elemento de entrada se puede localizar por su atributo name usando el método find_element_by_name. Explicación detallada de
encontrar elementos está disponible en elLocalizando elementoscapítulo
elem=driver.find_element_by_name("q")
A continuación, estamos enviando teclas, esto es similar a ingresar teclas usando tu teclado. Las teclas especiales se pueden enviar usandoKeys.
clase importada de [Link]:
elem.send_keys("pycon")
elem.send_keys([Link])
Después de enviar la página, deberías obtener resultados según la búsqueda si hay alguno. Para asegurarte de que se encuentren algunos resultados,
hacer una afirmación:
El método tearDown se llamará después de cada método de prueba. Este es un lugar para realizar todas las acciones de limpieza. En el actual
método, la ventana del navegador se cierra. También puedes llamar al método salir en lugar de cerrar. La salida cerrará todo.
el navegador, mientras que cerrar cerrará una pestaña, pero si es la única pestaña abierta, por defecto la mayoría de los navegadores saldrán completamente.
deftearDown(self):
[Link]()
Las líneas finales son un código estándar para ejecutar la suite de pruebas:
si__main__
[Link]()
java-jar [Link]
Mientras ejecutas el servidor de Selenium, podrías ver un mensaje que se asemeja a esto:
La línea anterior dice que puedes usar esta URL para conectar con WebDriver remoto. Aquí hay algunos ejemplos:
driver=[Link](
[Link]
desired_capabilities=[Link])
conductor=[Link](
[Link]
desired_capabilities=[Link])
driver=[Link](
[Link]
desired_capabilities=[Link])
Las capacidades deseadas son un diccionario, por lo que en lugar de usar los diccionarios predeterminados, puedes especificar los valores de manera explícita.
itly:
driver=[Link](
[Link]
desired_capabilities={'browserName':'htmlunit',
2
javascriptActivadoVerdadero})
12 Capítulo 2. Empezando
CAPÍTULO 3
Navegando
Lo primero que querrás hacer con WebDriver es navegar a un enlace. La forma normal de hacerlo es llamando a get
método
[Link]("[Link]
WebDriver esperará hasta que la página se haya cargado completamente (es decir, que se haya activado el evento onload) antes de devolver el control a
tu prueba o script. Vale la pena señalar que si tu página usa mucho AJAX al cargar, entonces WebDriver puede no saber cuándo
se ha cargado completamente. Si necesita asegurarse de que tales páginas estén completamente cargadas, puede usarespera.
Simplemente poder ir a lugares no es muy útil. Lo que realmente nos gustaría hacer es interactuar con las páginas, o, más
específicamente, los elementos HTML dentro de una página. Primero que nada, necesitamos encontrar uno. WebDriver ofrece una serie de maneras
para encontrar elementos. Por ejemplo, dado un elemento definido como:
<input type="text"name="passwd"id="passwd-id"/>
element=driver.find_element_by_id("passwd-id")
element=driver.find_element_by_name("passwd")
driver.find_element_by_xpath("//input[@id='passwd-id']")
También puedes buscar un enlace por su texto, ¡pero ten cuidado! ¡El texto debe ser una coincidencia exacta! También debes tener cuidado.
al usar XPATH en WebDriver. Si hay más de un elemento que coincide con la consulta, entonces solo el primero será
devuelto. Si no se puede encontrar nada, se generará una NoSuchElementException.
WebDriver tiene una API "basada en objetos"; representamos todos los tipos de elementos usando la misma interfaz. Esto significa
que aunque puedas ver muchos métodos posibles que podrías invocar cuando presionas la tecla de autocompletar de tu IDE
combinación, no todos tendrán sentido o serán válidos. ¡No te preocupes! WebDriver intentará hacer lo correcto,
y si llamas a un método que no tiene sentido (“setSelected()” en una etiqueta “meta”, por ejemplo) se lanzará una excepción
levantado.
13
Vínculos de Selenium para Python, Versión 2
Entonces, tienes un elemento. ¿Qué puedes hacer con él? Primero que nada, puede que quieras ingresar algún texto en un campo de texto:
elemento.enviar_claves("algún texto")
Es posible enviar teclas a cualquier elemento, lo que hace posible probar atajos de teclado como los que se utilizan
en GMail. Un efecto secundario de esto es que escribir algo en un campo de texto no lo borrará automáticamente. En su lugar, lo que tú
el tipo se añadirá a lo que ya hay. Puedes borrar fácilmente el contenido de un campo de texto o área de texto con clear
método
[Link]()
Rellenar formularios
Ya hemos visto cómo ingresar texto en un área de texto o campo de texto, pero ¿qué pasa con los otros elementos? Puedes 'alternar'
el estado del menú desplegable, y puedes usar "setSelected" para establecer algo como una etiqueta OPTION seleccionada. Manejar con
SELECTtags no está tan mal:
element=driver.find_element_by_xpath("//select[@name='name']")
elemento.encontrar_elementos_por_nombre_de_etiqueta("opción")
paraopciónentodas_opciones
imprimir("El valor es:"%s%opción.get_atributo("valor")
opción.hacer_clic()
Esto encontrará el primer elemento "SELECT" en la página y recorrerá cada una de sus opciones, imprimiendo
sus valores, y seleccionando cada uno por turno.
Como puedes ver, esta no es la forma más eficiente de manejar elementos SELECT. Las clases de soporte de WebDriver
incluye uno llamado 'Seleccionar', que proporciona métodos útiles para interactuar con estos:
WebDriver también ofrece funciones para deseleccionar todas las opciones seleccionadas:
seleccionar=Seleccionar(driver.find_element_by_id('id'))
seleccionar.deseleccionar_todo()
opciones=[Link]
14 Capítulo 3. Navegando
Vínculos de Selenium para Python, Versión 2
Una vez que hayas terminado de completar el formulario, probablemente quieras enviarlo. Una forma de hacerlo sería encontrar el
botón de 'enviar' y haz clic en él:
Alternativamente, WebDriver tiene el método conveniente “submit” en cada elemento. Si llamas a esto en un elemento dentro de
un formulario, WebDriver caminará por el DOM hasta encontrar el formulario que lo rodea y luego llamará a submit en ese.
si no está en un formulario, entonces se generará la NoSuchElementException:
[Link]()
Arrastrar y soltar
Puedes usar arrastrar y soltar, moviendo un elemento por una cierta cantidad, o sobre otro elemento:
element=driver.find_element_by_name("source")
objetivo=controlador.encontrar_elemento_por_nombre("objetivo")
[Link]ón
CadenasDeAcción=ActionChains(controlador)
action_chains.arrastrar_y_soltar(elemento, objetivo).realizar()
Es raro que una aplicación web moderna no tenga ningún marco o que esté limitada a una sola ventana. WebDriver
admite moverse entre ventanas nombradas utilizando el método "switch_to_window":
driver.switch_to_window("windowName")
Todas las llamadas a driver ahora se interpretarán como dirigidas a la ventana particular. Pero, ¿cómo sabes la
¿nombre de la ventana? Echa un vistazo al javascript o al enlace que la abrió:
<a href="[Link]" target="windowName">Haz clic aquí para abrir una nueva ventana</a>
Alternativamente, puedes pasar un "manejador de ventana" al método "switch_to_window()". Sabiendo esto, es posible que
itera sobre cada ventana abierta así:
paramangoenmanejadores_de_ventanas:
driver.cambiar_a_ventana(handle)
Tambiénpuedesmovertedeunmarcoaotro(odentrodeiframes):
driver.switch_to_frame("nombreDelMarco")
Es posible acceder a submarcos separando la ruta con un punto, y también puedes especificar el marco por su índice.
Eso es:
driver.switch_to_frame("[Link]")
iría al marco llamado "child" del primer submarco del marco llamado "frameName". Todos los marcos son evaluados
como si viniera de *arriba*.
Una vez que hayamos terminado de trabajar en los marcos, tendremos que regresar al marco principal, lo que se puede hacer utilizando:
driver.switch_to_default_content()
Diálogos emergentes
Selenium WebDriver tiene soporte integrado para manejar cuadros de diálogo emergentes. Después de que hayas activado una acción que
abre una ventana emergente, puedes acceder a la alerta con lo siguiente:
alerta=driver.cambiar_a_alerta()
Esto devolverá el objeto de alerta que está actualmente abierto. Con este objeto ahora puedes aceptar, descartar, leer su contenido o incluso
escribe en un aviso. Esta interfaz funciona igualmente bien en alertas, confirmaciones, avisos. Consulta la documentación de la API
para más información.
[Link]("[Link]
[Link]()
[Link]()
Tenga en cuenta que esta funcionalidad depende completamente del controlador subyacente. Es posible que algo
pueden ocurrir sorpresas cuando llames a estos métodos si estás acostumbrado al comportamiento de un navegador sobre otro.
Galletas
Antes de que dejemos estos próximos pasos, es posible que te interese entender cómo usar cookies. Primero que nada, necesitas
estar en el dominio para el cual la cookie será válida:
Ve al dominio correcto
[Link]("[Link]
16 Capítulo 3. Navegando
CAPÍTULO 4
Localizando elementos
Existen varias estrategias para localizar elementos en una página. Puedes usar la más adecuada para tu caso. Selenium
proporciona los siguientes métodos para localizar elementos en una página:
•encontrar_elemento_por_id
•encontrar_elemento_por_nombre
•encontrar_elemento_por_xpath
•encontrar_elemento_por_texto_enlace
•encontrar_elemento_por_texto_de_enlace_parcial
•encontrar_elemento_por_nombre_de_etiqueta
•encontrar_elemento_por_nombre_de_clase
•encontrar_elemento_por_selector_css
•encontrar_elementos_por_nombre
•encontrar_elementos_por_xpath
•encontrar_elementos_por_texto_enlace
•encontrar_elementos_por_texto_enlazado_parcial
•encontrar_elementos_por_nombre_de_etiqueta
•encontrar_elementos_por_nombre_de_clase
•encontrar_elementos_por_selector_css
Además de los métodos públicos mencionados anteriormente, hay dos métodos privados que pueden ser útiles con localizadores en la página.
objetos. Estos son los dos métodos privados: encontrar_elemento y encontrar_elementos.
Ejemplo de uso:
17
Bindings de Selenium para Python, Lanzamiento 2
driver.find_element([Link],'//button[text()="Algún texto"]')
driver.find_elements([Link],'//button')
id
xpath
texto del enlace
texto del enlace parcial
nombre
nombre de etiqueta
nombre de clase
selector css
Localizando por Id
Utiliza esto cuando conozcas el atributo id de un elemento. Con esta estrategia, el primer elemento con el valor del atributo id
se devolverá la ubicación que coincida. Si ningún elemento tiene un atributo matchingid, se lanzará una NoSuchElementException
será elevado.
Por ejemplo, considera el código fuente de esta página:
<html>
<cuerpo>
<formid="loginForm">
<input name="username" type="text"/>
<input name="password" type="password"/>
<inputname="continue"type="submit"value="Login"/>
</form>
</cuerpo>
<html>
driver.find_element_by_id('loginForm')
Usa esto cuando conozcas el atributo nombre de un elemento. Con esta estrategia, el primer elemento con el valor del atributo nombre
se devolverá la ubicación que coincida. Si ningún elemento tiene un atributo matchingname, se lanzará una NoSuchElementException.
se aumentará.
Por ejemplo, considera el código fuente de esta página:
<html>
<cuerpo>
<formid="loginForm">
<input name="nombredeusuario" type="text"/>
<input name="password" type="password"/>
continuar
continuar
</form>
</body>
<html>
driver.find_element_by_name('username')
driver.find_element_by_name('password')
Esto dará el botón de 'Iniciar sesión' ya que ocurre antes del botón de 'Limpiar':
continuar=controlador.encontrar_elemento_por_nombre('continuar')
Una de las principales razones para usar XPath es cuando no tienes un atributo id o name adecuado para el elemento que
desea localizar. Puede usar XPath para ubicar el elemento en términos absolutos (no aconsejado) o relativo a un elemento
que tiene un atributo id o name. Los localizadores XPath también se pueden usar para especificar elementos a través de atributos distintos de id
y nombre.
Los XPaths absolutos contienen la ubicación de todos los elementos desde la raíz (html) y, como resultado, es probable que fallen con solo
el más mínimo ajuste a la aplicación. Al encontrar un elemento cercano con un atributo id o name (idealmente un elemento padre
elemento) puedes localizar tu elemento objetivo basado en la relación. Esto es mucho menos probable que cambie y puede hacer
tus pruebas más robustas.
Por ejemplo, considera el código fuente de esta página:
<html>
<cuerpo>
<formid="loginForm">
<input name="username" type="text"/>
<input name="password" type="password"/>
<inputname="continue"type="submit"value="Login"/>
continuar
</form>
</cuerpo>
<html>
driver.find_element_by_xpath("/html/body/form[1]")
driver.find_element_by_xpath("//form[1]")
driver.find_element_by_xpath("//form[@id='loginForm']")
nombre_de_usuario=controlador.encontrar_elemento_por_xpath("//form[input/@name='nombre_de_usuario']")
driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
nombre_de_usuario=driver.find_element_by_xpath("//input[@name='nombre_de_usuario']")
1. Primer elemento de formulario con un elemento hijo de entrada con atributo llamado nombre y el valor nombre de usuario
botón_claro=driver.find_element_by_xpath("//input[@name='continue'][@type='button']
˓→ ")
botón_borrar=driver.find_element_by_xpath("//form[@id='loginForm']/input[4]")
1. Entrada con un atributo llamado nombre y el valor continuar y un atributo llamado tipo y el valor botón
2. Cuarto elemento hijo de entrada del elemento formulario con atributo llamado id y valor loginForm
Estos ejemplos cubren algunos conceptos básicos, pero para aprender más, se recomiendan las siguientes referencias:
Utiliza esto cuando conozcas el texto del enlace utilizado dentro de una etiqueta ancla. Con esta estrategia, el primer elemento con el
se devolverá el valor del texto del enlace que coincida con la ubicación. Si ningún elemento tiene un atributo de texto de enlace coincidente, un
Se generará NoSuchElementException.
Por ejemplo, considera el código fuente de esta página:
<html>
<cuerpo>
<p>¿Estás seguro de que quieres hacer esto?</p>
<a href="[Link]">Continuar</a>
<a href="[Link]">Cancelar</a>
</body>
<html>
driver.find_element_by_link_text('Continuar')
driver.find_element_by_partial_link_text('Conti')
Utiliza esto cuando quieras localizar un elemento por su nombre de etiqueta. Con esta estrategia, el primer elemento con el nombre de etiqueta dado
será devuelto. Si ningún elemento tiene un nombre de etiqueta coincidente, se generará una NoSuchElementException.
<html>
<cuerpo>
<h1>Bienvenido</h1>
<p>El contenido del sitio va aquí.</p>
</body>
<html>
driver.encontrar_elemento_por_nombre_de_etiqueta('h1')
Usa esto cuando quieras localizar un elemento por el nombre del atributo de clase. Con esta estrategia, el primer elemento
se devolverá el nombre del atributo de clase que coincide. Si ningún elemento tiene un nombre de atributo de clase coincidente, un
Se generará NoSuchElementException.
Por ejemplo, considera el código fuente de esta página:
<html>
<cuerpo>
<p class="content">El contenido del sitio va aquí.</p>
</body>
<html>
contenido=driver.encontrar_elemento_por_clase_nombre('contenido')
Utiliza esto cuando quieras localizar un elemento mediante la sintaxis del selector CSS. Con esta estrategia, el primer elemento con el
se devolverá un selector CSS coincidente. Si ningún elemento tiene un selector CSS coincidente, se lanzará una NoSuchElementException
se aumentará.
Por ejemplo, considera el código fuente de esta página:
<html>
<cuerpo>
<p class="content">El contenido del sitio va aquí.</p>
</cuerpo>
<html>
contenido=controlador.encontrar_elemento_por_selector_css('[Link]')
Espera
En estos días, la mayoría de las aplicaciones web utilizan técnicas AJAX. Cuando una página es cargada por el navegador, los elementos
dentro de esa página puede cargar en diferentes intervalos de tiempo. Esto dificulta localizar elementos: si un elemento aún no está
si no está presente en el DOM, una función de localización generará una excepción anElementNotVisibleException. Usando esperas, podemos resolver
este problema. La espera proporciona un margen entre las acciones realizadas, principalmente localizar un elemento o cualquier otra operación
con el elemento.
Selenium Webdriver proporciona dos tipos de esperas: implícita y explícita. Una espera explícita hace que WebDriver espere por un
una condición cierta para ocurrir antes de continuar con la ejecución. Una espera implícita hace que WebDriver consulte el DOM
por un cierto período de tiempo al intentar localizar un elemento.
Espera Explícita
Una espera explícita es un código que defines para esperar a que ocurra una cierta condición antes de continuar con el código.
El caso extremo de esto es [Link](), que establece la condición a un período de tiempo exacto para esperar. Hay algunos
métodos de conveniencia proporcionados que te ayudan a escribir código que esperará solo el tiempo necesario. WebDriverWait en
la combinación con ExpectedCondition es una forma en que se puede lograr esto.
fromseleniumimportwebdriver
from [Link] importPor
[Link]
[Link] esperadascomoCE
driver=[Link]()
[Link]("[Link]
intentar:
elemento=WebDriverWait(driver,10).hasta(
EC.presencia_de_elemento_ubicado(([Link], "miElementoDinámico"))
)
finalmente:
[Link]()
23
Vínculos de Selenium para Python, Versión 2
Esto espera hasta 10 segundos antes de lanzar una TimeoutException a menos que encuentre el elemento para devolver dentro de 10 segundos.
WebDriverWait por defecto llama a la ExpectedCondition cada 500 milisegundos hasta que devuelve exitosamente.
el retorno exitoso es para el tipo ExpectedCondition es Boolean devolver verdadero o no nulo devolver valor para todas las otras Expected-
Tipos de condición.
Condiciones Esperadas
Hay algunas condiciones comunes que se utilizan frecuentemente al automatizar navegadores web. A continuación se enumeran
los nombres de cada uno. La vinculación de Selenium con Python proporciona algunosmétodos de convenienciaasí que no tienes que codificar un
clase expected_condition tú mismo o crea tu propio paquete de utilidades para ellos.
title_is
• el_título_contiene
presencia_del_elemento_localizado
visibilidad_de_elemento_ubicado
visibilidad_de
presencia_de_todos_los_elementos_ubicados
texto_a_presentar_en_el_elemento
• texto_a_estar_present_en_el_valor_del_elemento
• marco_disponible_y_cambiar_a_él
invisible_del_elemento_localizado
elemento_a_ser_hacible
vencimiento de
• elemento_a_ser_seleccionado
• elemento_ubicado_para_ser_seleccionado
• estado_de_selección_de_elemento_para_ser
estado_de_selección_elemento_localizado_a_ser
alerta_está_presente
[Link].supportimportcondiciones_esperadascomoCE
WebDriverWait(driver,10)
[Link](EC.elemento_a_ser_clicable(([Link],'someid')))
El módulo expected_conditions contiene un conjunto de condiciones predefinidas para usar con WebDriverWait.
Esperas implícitas
Una espera implícita le dice a WebDriver que sondee el DOM durante un cierto período de tiempo al intentar encontrar cualquier elemento (o
elementos) no disponibles de inmediato. La configuración predeterminada es 0. Una vez configurada, la espera implícita se establece por la duración de la
Objeto WebDriver.
fromseleniumimportcontrolador de navegador
driver=[Link]()
driver.implicitamente_esperar(10)segundos
24 Capítulo 5. Esperas
Vínculos de Python para Selenium, Release 2
[Link]("[Link]
miElementoDinámico=driver.encontrar_elemento_por_id("miElementoDinámico")
26 Capítulo 5. Esperas
CAPÍTULO 6
Objetos de Página
Este capítulo es una introducción tutorial al patrón de diseño de objetos de página. Un objeto de página representa un área en la web.
interfaz de usuario de la aplicación con la que su prueba está interactuando.
• Crear código reutilizable que se pueda compartir entre múltiples casos de prueba
Caso de prueba
Aquí hay un caso de prueba que busca una palabra en el sitio web [Link] y asegura que se encuentren algunos resultados.
fromseleniumimportwebdriver
importar página
clasePythonOrgBuscar([Link]):
Una clase de prueba de muestra para mostrar cómo funciona el objeto de página
defconfigurarse(self):
[Link]=[Link]()
[Link]("[Link]
defprueba_buscar_en_python_org(self):
"""
Pruebas de la función de búsqueda de [Link]. Busca la palabra "pycon" y luego verifica.
˓→ que aparezcan algunos resultados.
Tenga en cuenta que no busca ningún texto en particular en la página de resultados de búsqueda.
˓→ Esta prueba verifica que
los resultados no estaban vacíos.
"""
27
Vínculos de Selenium para Python, Liberación 2
deftearDown(self):
[Link]()
si__main__
[Link]()
El patrón de objeto de página tiene la intención de crear un objeto para cada página web. Al seguir esta técnica, se establece una capa de separación.
entre el código de prueba y la implementación técnica se crea.
[Link]á así:
del elemento importarElementoBasePagina
fromlocatorsimportLocalizadoresDePaginaPrincipal
elementoTextoDeBúsquedaDeClaseElementoDePaginaBase
Esta clase obtiene el texto de búsqueda del localizador especificado
claseBasePágina(objeto)
Clase base para inicializar la página base que será llamada desde todas las páginas
def__init__(self, controlador):
[Link]=controlador
clasePáginaPrincipalPáginaBase
Los métodos de acción de la página de inicio vienen aquí. Es decir, [Link]
defis_title_matches(self):
Verifica que el texto codificado 'Python' aparezca en el título de la página
regresarPythonen sí mismotítulo del controlador
defhacer_clic_en_el_boton_ir(self):
Inicia la búsqueda
element=[Link].find_element( [Link]ÓN_GO)
*
[Link]()
paginaResultadosDeBusquedaPorClase(PáginaBase):
Los métodos de acción de la página de resultados de búsqueda vienen aquí
defhay_resultados_encontrados
# Probablemente debería buscar este texto en la página específica
# elemento, pero por ahora funciona bien
devolverNo se encontraron [Link] en sí [Link].page_source
Elementos de la página
[Link]
elementoBaseDeClase(objeto):
Clase base de página que se inicializa en cada clase de objeto de página.
Localizadores
Una de las prácticas es separar las cadenas de localización del lugar donde se están utilizando. En este ejemplo,
los localizadores de la misma página pertenecen a la misma clase.
[Link]
classMainPageLocators(objeto)
Una clase para los localizadores de la página principal. Todos los localizadores de la página principal deberían venir aquí
([Link],'submit')
localizadoresPaginaResultadosBusquedaClase(objeto):
Una clase para localizadores de resultados de búsqueda. Todos los localizadores de resultados de búsqueda deben venir
˓→ aquí
pasar
API de WebDriver
Nota: Esta no es una documentación oficial. La documentación oficial de la API está disponibleaquí.
Las definiciones de la API en este capítulo muestran la ubicación absoluta de las clases. Sin embargo, el estilo de importación recomendado es
como se indica a continuación:
fromseleniumimportcontrolador de web
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
Las clases de excepción se pueden importar de esta manera (Reemplace TheNameOfTheExceptionClass con la clase real)
nombre dado a continuación):
31
Vínculos de Selenium para Python, Versión 2
de [Link] importar[ElNombreDeLaClaseDeExcepción]
Algunos atributos son llamables (o métodos) y otros no son llamables (propiedades). Todos los atributos llamables están terminando
con paréntesis redondos.
Uso:
driver.url_actual
[Link]()
Excepciones
Excepciones que pueden ocurrir en todo el código del controlador de WebDriver.
[Link]
screen=None,
pila-
Ninguno
Bases:[Link]
Se lanza cuando un elemento está presente en el DOM pero las interacciones con ese elemento impactarán a otro elemento.
orden de pintura
[Link](msg=None,
Ninguna
pila-
trace=None)
Bases:[Link]
Lanzado al intentar seleccionar un elemento no seleccionable.
[Link](msg=None,
ninguno
None
Bases:[Link]
Se lanza cuando un elemento está presente en el DOM, pero no es visible, por lo que no se puede interactuar con él.
Se encuentra más comúnmente al intentar hacer clic o leer el texto de un elemento que está oculto a la vista.
[Link](respuesta,msg)
Bases:[Link]
Se lanza cuando ha ocurrido un error en el lado del servidor.
Esto puede suceder al comunicarse con la extensión de firefox o el servidor de control remoto.
[Link](msg=None,
screen=None,
pila
traza=None)
Bases:[Link]
Se lanza cuando ha fallado la activación de un motor IME.
[Link]
screen=None,stack-
trazar=None)
Bases:[Link]
Se lanza cuando el soporte de IME no está disponible. Esta excepción se lanza para cada llamada de método relacionada con IME si IME
el soporte no está disponible en la máquina.
[Link](msg=None,
screen=None,stack-
trace=None)
Bases:[Link]
Los argumentos pasados a un comando son inválidos o están mal formados.
[Link](msg=None,
screen=None,
pila
trace=None)
Bases:[Link]
Se lanza al intentar agregar una cookie bajo un dominio diferente al de la URL actual.
[Link](msg=None,
screen=None,
pila
trace=None)
Bases:[Link]
excepción [Link](msg=None,
screen=None,stack-
Ninguno
Bases:[Link]
Se lanza cuando el selector que se utiliza para encontrar un elemento no devuelve un WebElement. Actualmente, esto solo
sucede cuando el selector es una expresión xpath y es sintácticamente inválida (es decir, no es un xpath
la expresión) o la expresión no selecciona WebElements (por ejemplo, “count(//input)”).
[Link](msg=None,
screen=None,
pila
traza=None)
Bases:[Link]
Se lanza cuando el marco o la ventana objetivo a la que se desea cambiar no existe.
7.1. Excepciones 33
Vínculos de Selenium para Python, Liberación 2
[Link](msg=None,
screen=None,
pila
trace=None)
Bases:[Link]
Se lanza cuando el objetivo proporcionado al método ActionsChainsmove() es inválido, es decir, fuera del documento.
[Link](msg=None,
screen=None, pila
trace=None)
Bases:[Link]
Se produce al cambiar a una alerta no presentada.
Esto puede ser causado por llamar a una operación en la clase Alert() cuando una alerta aún no está en la pantalla.
[Link](msg=None,
screen=None,stack-
trace=None)
Bases:[Link]
Se lanza cuando no se pudo encontrar el atributo del elemento.
Puede que desee verificar si el atributo existe en el navegador particular contra el que está probando. Algunos navegadores
pueden tener diferentes nombres de propiedades para la misma propiedad. (IE8 .innerText vs. Firefox .textContent)
[Link](msg=None,
screen=None, pila
trace=None)
Bases:[Link]
Lanzado cuando no se pudo encontrar el elemento.
[Link](msg=None,screen=None,
Ninguno
Bases:[Link]
Se lanza cuando el marco objetivo a cambiar no existe.
[Link](msg=None,screen=None,
Ninguno
Bases:[Link]
Se lanza cuando la ventana a la que se desea cambiar no existe.
Para encontrar el conjunto actual de identificadores de ventanas activas, puedes obtener una lista de los identificadores de ventanas activas de la siguiente manera
manera
printdriver.window_handles
[Link](msg=None,
screen=None,
pila
trace=None)
Bases:[Link]
[Link](msg=None,
screen=None,
pila
Ninguno
Bases:[Link]
Se lanza cuando una referencia a un elemento ahora está "obsoleta".
[Link]
trace=None)
Bases:[Link]
Se lanza cuando un comando no se completa en el tiempo suficiente.
[Link](msg=None,
screen=None,
pila
Ninguno
alert_text=None)
Bases:[Link]
Se lanza cuando aparece una alerta inesperada.
Generalmente se levanta cuando un modal esperado está bloqueando al webdriver para ejecutar más comandos.
[Link](msg=None,
screen=None,
None
Bases:[Link]
Se lanza cuando una clase de soporte no obtuvo un elemento web esperado.
[Link](msg=None, screen=None,
Ninguno
Bases: [Link]
Excepción base de webdriver.
Cadenas de acción
La implementación de ActionChains,
clase [Link].action_chains.ActionChains(driver)
Bases: objeto
ActionChains son una forma de automatizar interacciones de bajo nivel, como movimientos del mouse, acciones de botones del mouse,
presionar tecla y interacciones del menú contextual. Esto es útil para realizar acciones más complejas como pasar el mouse por encima y
arrastrar y soltar.
Generar acciones de usuario. Cuando llamas a métodos para acciones sobre el objeto ActionChains, las acciones se almacenan.
en una cola en el objeto ActionChains. Cuando llamas a perform(), los eventos se disparan en el orden en que están
en cola.
ActionChains se pueden utilizar en un patrón de cadena:
menu=driver.find_element_by_css_selector(".nav")
driver.find_element_by_css_selector(".nav #submenu1")
ActionChains(driver).mover_a_elemento(menu).clic(hidden_submenu).realizar()
menu=driver.find_element_by_css_selector(".nav")
driver.find_element_by_css_selector(".nav #submenu1")
acciones=ActionChains(driver)
acciones.mover_a_elemento(menu)
acciones.hacer_clic(submenú_oculto)
[Link]()
De cualquier manera, las acciones se realizan en el orden en que son llamadas, una tras otra.
clic(en_elemento=None)
Hace clic en un elemento.
Args
El elemento para hacer clic. Si es None, hace clic en la posición actual del mouse.
hacer_clic_y_mantener(sobre_elemento=None)
Mantiene presionado el botón izquierdo del ratón sobre un elemento.
Args
El elemento sobre el que hacer clic. Si es None, hace clic en la posición actual del mouse.
clic derecho(en_elemento=None)
Realiza un clic de contexto (clic derecho) en un elemento.
Args
El elemento para hacer clic con el botón derecho. Si None, hace clic en la posición actual del ratón.
doble_click(elemento=None)
Hace doble clic en un elemento.
Args
El elemento a hacer doble clic. Si es None, hace clic en la posición actual del mouse.
arrastrar_y_soltar
Mantiene presionado el botón izquierdo del mouse en el elemento de origen, luego se mueve al elemento de destino y lo suelta
el botón del ratón.
Argumentos
arrastrar_y_soltar_por_desplazamiento(origen,xdesplazamiento,ydesplazamiento)
Sostiene el botón izquierdo del ratón en el elemento fuente, luego se mueve al desplazamiento objetivo y lo suelta
el botón del ratón.
Args
• fuente: El elemento a presionar con el mouse.
tecla_abajo(valor, elemento=None)
Envía una pulsación de tecla solamente, sin soltarla. Solo debe usarse con teclas modificadoras (Control, Alt y
Cambio).
Args
La clave modificadora para enviar. Los valores se definen en la clase Keys.
• elemento: El elemento para enviar teclas. Si es None, envía una tecla al elemento actualmente enfocado.
ActionChains(driver).key_down([Link]).send_keys('c').key_up(Keys.
˓→ CONTROL).realizar()
tecla_arriba(valor, elemento=None)
Libera una tecla modificadora.
Args
La tecla modificadora para enviar. Los valores están definidos en la clase Keys.
• elemento: El elemento para enviar teclas. Si es None, envía una tecla al elemento actualmente enfocado.
ActionChains(driver).key_down([Link]).send_keys('c').key_up(Keys.
˓→ CONTROL).realizar()
mover_por_desplazamiento(xoffset, yoffset)
Mover el ratón a un desfase desde la posición actual del ratón.
Argumentos
• xoffset: Desplazamiento X al que moverse, como un entero positivo o negativo.
mover_a_elemento(elemento_destino)
Moviendo el ratón al medio de un elemento.
Args
El WebElement al que mover.
mover_a_elemento_con_desplazamiento(hacia_elemento,xoffset,yoffset)
Mueva el mouse por un desplazamiento del elemento especificado. Los desplazamientos son relativos a la esquina superior izquierda del
elemento.
Argumentos
El WebElement al que moverse.
• xoffset: Desplazamiento X al que moverse.
realizar()
Realiza todas las acciones almacenadas.
liberar(en_elemento=None)
Soltando un botón del ratón mantenido sobre un elemento.
Args
El elemento para soltar el ratón. Si es None, se suelta en la posición actual del ratón.
reiniciar_acciones()
Elimina las acciones que ya están almacenadas en el extremo remoto.
enviar_teclas(*claves_a_enviar)
Envía teclas al elemento actualmente enfocado.
Args
Las teclas a enviar. Las constantes de teclas modificadoras se pueden encontrar en la clase ‘Keys’.
enviar_claves_a_elemento(elemento, *claves_a_enviar)
Envía teclas a un elemento.
Args
El elemento al que enviar claves.
Las teclas para enviar. Las constantes de teclas modificadoras se pueden encontrar en la clase 'Keys'.
Alertas
La implementación de Alert.
[Link](controlador)
Bases: objeto
Permite trabajar con alertas.
Utiliza esta clase para interactuar con los mensajes de alerta. Contiene métodos para descartar, aceptar, introducir y obtener
texto de advertencias.
Aceptar / Descartar mensajes de alerta:
Alerta(driver).aceptar()
Alert(driver).dismiss()
¿Desea salir?
aceptar()
Acepta la alerta disponible.
Uso:: Alert(driver).accept() # Confirmar un cuadro de diálogo de alerta.
autenticar
Envía el nombre de usuario / contraseña a un diálogo Autenticado (como con la Autenticación HTTP Básica). Implicitamente 'hace clic
ok
Uso:: driver.switch_to.[Link]('queso', 'GoudaSecreto')
cadena que se establecerá en la sección de nombre de usuario del diálogo
establecer en la sección de contraseña del diálogo
despedir()
Descarta la alerta disponible.
enviar_claves(clavesPorEnviar)
Enviar teclas a la alerta.
Args
El texto que se enviará a Alert.
texto
Obtiene el texto de la Alerta.
Teclas Especiales
[Link]
Bases: objeto
Conjunto de códigos de teclas especiales.
u'\ue025'
u’ ’
u'\ue015'
u'\ue012'
u’\ue014’
u’\ue013’
u'\ue003'
u’\ue003’
u'1'
005
u'\ue03d'
CONTROL
028
u’017’
u'\ue015'
FIN= u’ ’
ENTER= u’\ue007’
u’e019’
u'\ue00c'
u’0’
F10= u'\ue03a'
e03b
F12= u''
F2= u’ 032’
F3= u’\ue033’
F4= u'\ue034'
u’\ue036’
F7= u’\ue037’
F8= u’\ue038’
F9= u’\ue039’
u’\ue011’
INSERT= u’ e016’
LEFT_ALT
'\ue009'
03d
u’ 024’
NULL= u’’
u'\ue01a'
u'\ue01b'
u’\ue01c’
01d
NUMPAD4
u'\ue01f'
u'\ue020'
u'\ue021'
'\ue022'
\ue023
00f
e00e
u'
'
u'\ue006'
\ue014
u’ 018’
u’ 4a3’
u’\ue008’
SPACE
u’e027’
[2~
UP= u’\ue013’
Estos son los atributos que se pueden utilizar para localizar elementos. Ver laUbicando Elementoscapítulo de ejemplos de usos.
La implementación de By.
[Link]
Bases: objeto
Conjunto de estrategias de localización compatibles.
nombre de clase
selector css
id
texto del enlace
nombre
texto de enlace parcial
nombre de la etiqueta
xpath
Capacidades Deseadas
Ver elUsando Selenium con WebDriver remotosección de ejemplos de usos de capacidades deseadas. Las deseadas
Implementación de capacidades.
class [Link].desired_capabilities.DesiredCapabilities
Bases: objeto
Conjunto de capacidades deseadas predeterminadas compatibles.
Utiliza esto como punto de partida para crear un objeto de capacidades deseadas para solicitar controladores web remotos para con-
Conectando al servidor de selenium o a la cuadrícula de selenium.
Ejemplo de uso:
fromseleniumimportcontrolador de navegador
[Link]
Nota: Siempre usa '.copy()' en el objeto DesiredCapabilities para evitar los efectos secundarios de alterar el Global.
instancia de clase.
Servicios públicos
Los métodos de Utils.
[Link].find_connectable_ip(anfitrión, puerto=None)
Resolver un nombre de host a una IP, prefiriendo direcciones IPv4.
Preferimos IPv4 para no cambiar el comportamiento de implementaciones anteriores solo de IPv4, y porque algunos
los controladores (por ejemplo, FirefoxDriver) no soportan conexiones IPv6.
Si se proporciona el número de puerto opcional, solo se consideran las IP que escuchan en el puerto dado.
Args
• anfitrión - Un nombre de host.
Devuelve una sola dirección IP, como una cadena. Si se encuentra alguna dirección IPv4, se devuelve una. De lo contrario, si
si se encuentra alguna dirección IPv6, se devuelve una. Si no, se devuelve None.
[Link].free_port()
Determina un puerto libre utilizando sockets.
[Link].is_connectable(puerto, host='localhost')
Intenta conectarse al servidor en el puerto para ver si está en funcionamiento.
Args
El puerto para conectarse.
[Link].is_url_connectable(puerto)
Intenta conectarse al servidor HTTP en la ruta /status y el puerto especificado para ver si responde con éxito.
Args
El puerto al que conectarse.
[Link].join_host_port(host, puerto)
Une un nombre de host y un puerto.
Esta es una implementación mínima destinada a manejar literales IPv6. Por ejemplo, _join_host_port('::1', 80)
'[::1]:80'.
Args
• host - Un nombre de host.
Firefox WebDriver
[Link](firefox_profile=None, fuego
fox_binary=None, timeout=30,
capabilities=None,proxy=None,
geckodriver
firefox_options=None,
[Link]
Bases:[Link]
context(*args,**kwds)
Establece el contexto en el que se están ejecutando los comandos de Selenium utilizando una declaración con. El estado del contexto
en el servidor se guarda antes de entrar en el bloque y se restaura al salir de él.
Parámetros contexto - El contexto puede ser una de las propiedades de la clase CONTEXT_CHROME o
CONTENIDO_DEL_CONTEXTO.
Ejemplo de uso:
[Link](selenium.CONTEXT_CHROME):
# ámbito de chrome
...hacer cosas...
salir()
Cierra el controlador y cierra todas las ventanas asociadas.
establecer_contexto(contexto)
chrome
contenido
Verdadero
perfil_de_firefox
Chrome WebDriver
[Link](executable_path='chromedriver',
port=0, chrome_options=None,
ninguno de-
Ninguna ser
vice_log_path=None)
Bases:[Link]
Controla el ChromeDriver y te permite manejar el navegador.
Necesitarás descargar el ejecutable de ChromeDriver desde[Link]
[Link]
crear_opciones()
iniciar_aplicación(id)
Lanza la aplicación de Chrome especificada por id.
salir()
Cierra el navegador y apaga el ejecutable de ChromeDriver que se inicia al comenzar la
ChromeDriver
WebDriver Remoto
La implementación de WebDriver.
[Link](command_executor=’[Link]
desired_capabilities=None,
None
Ninguno keep_alive=False,
file_detector=None)
Bases: objeto
Controla un navegador enviando comandos a un servidor remoto. Se espera que este servidor esté ejecutando el Web-
Protocolo de cable de controlador según lo definido en[Link]
Atributos
ID de sesión de la ventana del navegador iniciada y controlada por este WebDriver.
Diccionario de capacidades efectivas de esta sesión del navegador según se devuelve
por el servidor remoto. VerNo se puede traducir una URL.
CapacidadesDeseadas
• command_executor - objeto remote_connection.RemoteConnection utilizado para ejecutar com-
mandatos.
• error_handler - objeto [Link] utilizado para manejar errores.
agregar_cookie(cookie_dict)
Añade una cookie a tu sesión actual.
Args
Un objeto diccionario, con claves requeridas - “nombre” y “valor”; opcional
keys - “path”, “domain”, “secure”, “expiry”
volver()
Regresa un paso en el historial del navegador.
[Link]()
cerrar()
Cierra la ventana actual.
[Link]()
crear_elemento_web(element_id)
Crea un elemento web con el elemento_id especificado.
eliminar_todos_los_cookies()
Elimina todas las cookies en el ámbito de la sesión.
Usagedriver.eliminar_todas_las_galletas()
eliminar_cookie(nombre)
Elimina una sola cookie con el nombre dado.
Usagedriver.eliminar_cookie('my_cookie')
ejecutar(driver_command, params=None)
Envía un comando para ser ejecutado por un [Link].
Args
El nombre del comando a ejecutar como una cadena.
• params: Un diccionario de parámetros nombrados para enviar con el comando.
La respuesta JSON del comando cargada en un objeto diccionario.
ejecutar_script_async(script, *args)
Ejecuta JavaScript de manera asíncrona en la ventana/máscara actual.
Args
• script: El JavaScript a ejecutar.
• *args: Cualquier argumento aplicable para tu JavaScript.
Usagedriver.execute_async_script('[Link]')
ejecutar_script(script,*args)
Ejecuta JavaScript de manera sincrónica en la ventana/marca actual.
Args
El JavaScript a ejecutar.
• *args: Cualquier argumento aplicable para tu JavaScript.
Usagedriver.execute_script('[Link]')
file_detector_context(*args,**kwds)
Sobrescribe el detector de archivos actual (si es necesario) en un contexto limitado. Asegura que el detector de archivos original esté configurado.
después.
Ejemplo:
con webdriver.file_detector_context(UselessFileDetector): someinput.send_keys('/etc/hosts')
Args
•file_detector_class - Clase del detector de archivos deseado. Si la clase es diferente de
el actual file_detector, luego la clase se instancia con args y kwargs y se utiliza como
un detector de archivos durante la duración del administrador de contexto.
•args - Argumentos opcionales que se pasan a la clase del detector de archivos durante
instanciación.
• kwargs - Argumentos de palabra clave, pasados de la misma manera que args.
encontrar_elemento(por='id', valor=None)
Método 'privado' utilizado por los métodos find_element_by_*.
encontrar_elemento_por_nombre_de_clase(nombre)
Encuentra un elemento por nombre de clase.
Args
• nombre: El nombre de la clase del elemento a encontrar.
Usagedriver.encontrar_elemento_por_clase('foo')
encontrar_elemento_por_selector_css(css_selector)
Encuentra un elemento por selector css.
Args
El selector css que se utilizará para encontrar elementos.
Usagedriver.encontrar_elemento_por_selector_css('#foo')
encontrar_elemento_por_id(id_)
Encuentra un elemento por id.
Argumentos
• id_ - El id del elemento que debe ser encontrado.
Usagedriver.encontrar_elemento_por_id('foo')
encontrar_elemento_por_texto_de_enlace(link_text)
Encuentra un elemento por el texto del enlace.
Args
El texto del elemento que debe ser encontrado.
Usagedriver.encontrar_elemento_por_texto_de_enlace('Iniciar sesión')
encontrar_elemento_por_nombre(nombre)
Encuentra un elemento por nombre.
Args
encontrar_elemento_por_texto_de_enlace_parcial(link_text)
Encuentra un elemento mediante una coincidencia parcial de su texto de enlace.
Args
El texto del elemento para hacer una coincidencia parcial.
Usagedriver.encontrar_elemento_por_texto_de_enlace_parcial('Sign')
encontrar_elemento_por_nombre_de_etiqueta(nombre)
Encuentra un elemento por nombre de etiqueta.
Args
El nombre de la etiqueta del elemento a encontrar.
Usagedriver.encontrar_elemento_por_nombre_de_etiqueta(‘foo’)
encontrar_elemento_por_xpath(xpath)
Encuentra un elemento por xpath.
Args
• xpath - El localizador xpath del elemento a encontrar.
Usagedriver.encontrar_elemento_por_xpath('//div/td[1]')
find_elements(by='id', value=None)
Método 'privado' utilizado por los métodos find_elements_by_*.
Uso: Utilice los correspondientes find_elements_by_* en lugar de esto.
encontrar_elementos_por_nombre_de_clase(nombre)
Encuentra elementos por nombre de clase.
Args
• nombre: El nombre de la clase de los elementos a encontrar.
Usagedriver.encontrar_elementos_por_nombre_clase('foo')
encontrar_elementos_por_selector_css(css_selector)
Encuentra elementos por selector CSS.
Argumentos
El selector css que se debe utilizar al encontrar elementos.
Usagedriver.encontrar_elementos_por_selector_css('.foo')
encontrar_elementos_por_id(id_)
Encuentra múltiples elementos por id.
Args
• id_ - El id de los elementos que se deben encontrar.
Usagedriver.encontrar_elementos_por_id('foo')
encontrar_elementos_por_texto_en_link(texto)
Encuentra elementos por texto de enlace.
Args
encontrar_elementos_por_nombre(nombre)
Encuentra elementos por nombre.
Args
El nombre de los elementos a encontrar.
Usagedriver.encontrar_elementos_por_nombre('foo')
encontrar_elementos_por_texto_parcial_del_enlace(link_text)
Encuentra elementos por una coincidencia parcial de su texto de enlace.
Args
El texto del elemento para hacer una coincidencia parcial.
Usagedriver.encontrar_elemento_por_texto_de_enlace_parcial('Signo')
encontrar_elementos_por_nombre_de_etiqueta(nombre)
Encuentra elementos por nombre de etiqueta.
Args
• nombre: El nombre de la etiqueta que se usa al encontrar elementos.
Usagedriver.encontrar_elementos_por_nombre_de_etiqueta('foo')
encontrar_elementos_por_xpath(xpath)
Encuentra múltiples elementos por xpath.
Args
• xpath - El localizador xpath de los elementos a encontrar.
Usagedriver.encontrar_elementos_por_xpath("//div[contains(@class, 'foo')]" )
adelante()
Avanza un paso en el historial del navegador.
[Link]()
obtener(url)
Carga una página web en la sesión actual del navegador.
obtener_cookie(nombre)
Obtén una sola cookie por nombre. Devuelve la cookie si se encuentra, None si no.
Usagedriver.get_cookie('my_cookie')
obtener_galletas()
Devuelve un conjunto de diccionarios, correspondientes a las cookies visibles en la sesión actual.
Usagedriver.obtener_galletas()
obtener_registro(tipo_de_registro)
Obtiene el registro para un tipo de registro dado
Argumentos
tipo de registro que se devolverá
Usagedriver.get_log('navegador') driver.get_log('driver') driver.get_log('cliente')
driver.get_log('servidor')
obtener_capture_como_base64()
Obtiene la captura de pantalla de la ventana actual como una cadena codificada en base64, lo cual es útil en incrustados.
imágenes en HTML.
Usagedriver.obtener_imagen_como_base64()
obtener_captura_de_pantalla_como_archivo(nombre_archivo)
Obtiene la captura de pantalla de la ventana actual. Devuelve False si hay algún IOError, de lo contrario, devuelve True.
Utiliza rutas completas en tu nombre de archivo.
Args
• nombre de archivo: La ruta completa donde deseas guardar tu captura de pantalla.
Usagedriver.get_screenshot_as_file(''/Screenshots/[Link]'')
obtener_captura_de_pantalla_como_png()
Obtiene la captura de pantalla de la ventana actual como datos binarios.
Usagedriver.obtener_capture_de_pantalla_como_png()
obtener_posición_ventana(manejadorVentana='actual')
Obtiene la posición x,y de la ventana actual.
Usagedriver.obtener_posición_ventana()
obtener_rectángulo_ventana()
Obtiene las coordenadas x, y de la ventana, así como la altura y el ancho de la ventana actual.
Usagedriver.get_window_rect()
obtener_tamaño_ventana(manejadorVentana='actual')
Obtiene el ancho y la altura de la ventana actual.
Usagedriver.get_window_size()
espera_implicita(tiempo_a_esperar)
Establece un tiempo de espera fijo para esperar implícitamente a que se encuentre un elemento o a que se complete un comando.
el método solo necesita ser llamado una vez por sesión. Para establecer el tiempo de espera para las llamadas a exe-
cute_async_script, vea set_script_timeout.
Args
Cantidad de tiempo a esperar (en segundos)
Usagedriver.esperar_implicito(30)
maximizar_ventana()
Maximiza la ventana actual que está utilizando el webdriver
salir()
Cierra el controlador y cierra todas las ventanas asociadas.
[Link]()
refrescar()
Actualiza la página actual.
[Link]()
guardar_captura_de_pantalla
Obtiene la captura de pantalla de la ventana actual. Devuelve False si hay algún IOError, de lo contrario devuelve True.
Utiliza rutas completas en tu nombre de archivo.
Args
• nombre de archivo: La ruta completa donde deseas guardar tu captura de pantalla.
Usagedriver.guardar_imagen('/Screenshots/[Link]')
establecer_timeout_de_carga_de_página(tiempo_a_esperar)
Establezca la cantidad de tiempo a esperar para que una carga de página se complete antes de lanzar un error.
Args
El tiempo de espera
Usagedriver.set_page_load_timeout(30)
establecer_timeout_script
Establezca la cantidad de tiempo que el script debe esperar durante una llamada a execute_async_script antes de lanzar
ing un error.
Args
El tiempo a esperar (en segundos)
Usagedriver.set_script_timeout(30)
establecer_posición_ventana(x,y,manejadorVentana=’actual’)
Establece la posición x,y de la ventana actual. ([Link])
Argumentos
• x: la coordenada x en píxeles para establecer la posición de la ventana
Usagedriver.establecer_posición_ventana(0,0)
set_window_rect(x=None,y=None,width=None,height=None)
Establece las coordenadas x, y de la ventana, así como la altura y el ancho de la ventana actual.
Usagedriver.set_window_rect(x=10, y=10) driver.set_window_rect(width=100, height=200)
driver.set_window_rect(x=10, y=10, ancho=100, alto=200)
establecer_tamaño_ventana(ancho, alto, manejadorVentana='actual')
Establece el ancho y la altura de la ventana actual. ([Link])
Args
• ancho: el ancho en píxeles para establecer la ventana en
Usagedriver.set_window_size(800,600)
iniciar_cliente()
Se llama antes de iniciar una nueva sesión. Este método puede ser sobrescrito para definir un comportamiento de inicio personalizado.
iniciar_sesión
Crea una nueva sesión con las capacidades deseadas.
Args
detener_cliente()
Llamado después de ejecutar un comando de salida. Este método puede ser sobrescrito para definir un apagado personalizado.
comportamiento.
cambiar_a_elemento_activo()
Uso obsoleto de driver.switch_to.active_element
cambiar_a_alerta()
Uso obsoleto de driver.switch_to.alert
cambiar_a_contenido_predeterminado()
Uso obsoleto de driver.switch_to.default_content
cambiar_a_frame(referencia_frame)
Uso obsoleto de driver.switch_to.frame
cambiar_a_ventana(nombre_ventana)
Uso obsoleto de driver.switch_to.window
caché_de_aplicación
Devuelve un objeto ApplicationCache para interactuar con la caché de la aplicación del navegador
url_actual
Obtiene la URL de la página actual.
Usagedriver.url_actual
manejador_ventana_actual
Devuelve el identificador de la ventana actual.
Usagedriver.current_window_handle
capacidades_deseadas
devuelve las capacidades deseadas actuales del controlador que se están utilizando
detector_de_archivos
tipos_de_registro
Obtiene una lista de los tipos de registro disponibles
móvil
nombre
Devuelve el nombre del navegador subyacente para esta instancia.
Uso
[Link]
orientación
Obtiene la orientación actual del dispositivo
orientación del conductor
fuente_de_página
Obtiene el código fuente de la página actual.
Usagedriver.page_source
cambiar_a
título
Devuelve el título de la página actual.
Título del controlador de uso
manejadores_de_ventana
Devuelve los identificadores de todas las ventanas dentro de la sesión actual.
Usagedriver.window_handles
ElementoWeb
[Link](padre,id_,w3c=False)
Bases: objeto
Representa un elemento DOM.
En general, todas las operaciones interesantes que interactúan con un documento se realizarán a través de esta interfaz.
Todas las llamadas a métodos realizarán una verificación de frescura para asegurarse de que la referencia del elemento siga siendo válida. Esto es-
esencialmente determina si el elemento sigue o no adjunto al DOM. Si esta prueba falla, entonces un
Se lanza StaleElementReferenceException, y todas las llamadas futuras a esta instancia fallarán.
borrar()
Borra el texto si es un elemento de entrada de texto.
hacer clic()
Haz clic en el elemento.
encontrar_elemento(por='id', valor=None)
encontrar_elemento_por_nombre_de_clase(nombre)
Encuentra un elemento dentro de los hijos de este elemento por nombre de clase.
Argumentos
nombre - nombre de la clase para buscar.
encontrar_elemento_por_selector_css(css_selector)
Encuentra elementos dentro de los hijos de este elemento por selector CSS.
Argumentos
cadena de selector CSS, ej: '[Link]#home'
encontrar_elemento_por_id(id_)
Encuentra el elemento dentro de los hijos de este elemento por ID.
Args
• id_ - ID del elemento hijo a ubicar.
encontrar_elemento_por_texto_de_enlace(link_text)
Encuentra el elemento dentro de los hijos de este elemento por texto de enlace visible.
Argumentos
Argumentos
• nombre - propiedad nombre del elemento a encontrar.
encontrar_elemento_por_texto_parcial_del_enlace(link_text)
Encuentra el elemento dentro de los hijos de este elemento por texto de enlace parcialmente visible.
Args
Texto del enlace - Cadena de texto del enlace a buscar.
encontrar_elemento_por_nombre_de_etiqueta(nombre)
Encuentra un elemento dentro de los hijos de este elemento por nombre de etiqueta.
Args
nombre - nombre de la etiqueta html (por ejemplo: h1, a, span)
encontrar_elemento_por_xpath(xpath)
Encuentra el elemento por xpath.
myelement.encontrar_elementos_por_xpath(".//a")
myelement.encontrar_elementos_por_xpath("//a")
encontrar_elementos(por='id', valor=None)
encontrar_elementos_por_nombre_de_clase(nombre)
Encuentra una lista de elementos dentro de los hijos de este elemento por nombre de clase.
Argumentos
nombre - nombre de la clase a buscar.
encontrar_elementos_por_selector_css(css_selector)
Busca una lista de elementos dentro de los hijos de este elemento mediante un selector CSS.
Args
cadena de selector CSS, ej: '[Link]#home'
encontrar_elementos_por_id(id_)
Encuentra una lista de elementos dentro de los hijos de este elemento por ID.
Args
• id_ - Id del elemento hijo a encontrar.
encontrar_elementos_por_texto_en_el_enlace(link_text)
Encuentra una lista de elementos dentro de los hijos de este elemento por texto de enlace visible.
Args
Cadena de texto del enlace para buscar.
7.11. WebElement 53
Bindings de Selenium para Python, Lanzamiento 2
encontrar_elementos_por_nombre(nombre)
Encuentra una lista de elementos dentro de los hijos de este elemento por nombre.
Argumentos
nombre - propiedad de nombre para buscar.
encontrar_elementos_por_texto_parcial_del_enlace(link_text)
Encuentra una lista de elementos dentro de los hijos de este elemento por texto del enlace.
Args
Cadena de texto del enlace para buscar.
encontrar_elementos_por_nombre_de_etiqueta(nombre)
Encuentra una lista de elementos dentro de los hijos de este elemento por nombre de etiqueta.
Args
nombre - nombre de la etiqueta html (por ejemplo: h1, a, span)
encontrar_elementos_por_xpath(xpath)
Encuentra elementos dentro del elemento por xpath.
Args
• xpath - cadena de localizador xpath.
myelement.encontrar_elementos_por_xpath(".//a")
myelement.encontrar_elementos_por_xpath("//a")
obtener_atributo(nombre)
Obtiene el atributo o propiedad dada del elemento.
Este método intentará primero devolver el valor de una propiedad con el nombre dado. Si existe una propiedad con ese
el nombre no existe, devuelve el valor del atributo con el mismo nombre. Si no hay un atributo con eso
nombre, None es devuelto.
Los valores que se consideran verdaderos, es decir, iguales a "verdadero" o "falso", se devuelven como booleanos. Todos los demás
Los valores que no son None se devuelven como cadenas. Para atributos o propiedades que no existen, se devuelve None.
Args
Nombre del atributo / propiedad a recuperar.
Ejemplo:
obtener_propiedad(nombre)
Obtiene la propiedad dada del elemento.
Argumentos
Nombre de la propiedad a recuperar.
Ejemplo:
está_mostrado()
Si el elemento es visible para un usuario.
está_habilitado()
Devuelve si el elemento está habilitado.
está_seleccionado()
Devuelve si el elemento está seleccionado.
Se puede usar para verificar si una casilla de verificación o un botón de opción está seleccionado.
captura de pantalla(nombrefichero)
Obtiene la captura de pantalla del elemento actual. Devuelve False si hay algún IOError, de lo contrario devuelve True.
Utiliza rutas completas en tu nombre de archivo.
Argumentos
• nombre de archivo: La ruta completa donde deseas guardar tu captura de pantalla.
[Link](‘/Screenshots/[Link]’)
enviar_claves(*valor)
Simula escribir en el elemento.
Args
• valor - Una cadena para escribir o establecer campos de formularios. Para establecer entradas de archivos, esto podría ser un
ruta de archivo local.
Utiliza esto para enviar eventos de teclas simples o para completar campos de formulario:
driver.find_element_by_name('username')
form_textfield.send_keys("admin")
driver.find_element_by_name('profilePic')
file_input.send_keys("ruta/a/[Link]")
Generalmente es mejor envolver la ruta del archivo en uno de los métodos
# en [Link] para devolver la ruta real y soportar pruebas cruzadas en sistemas operativos.
# file_input.send_keys([Link]("ruta/a/imagen_de_perfil.gif"))
enviar()
Envía un formulario.
valor_de_propiedad_css(nombre_de_propiedad)
El valor de una propiedad CSS.
identificación
ID interno utilizado por selenium.
Esto es principalmente para uso interno. Casos de uso simples como verificar si 2 elementos web se refieren al mismo.
elemento, se puede hacer usando==:
sielemento1==elemento2:
Estos 2 son iguales
7.11. WebElement 55
Bindings de Selenium para Python, Versión 2
ubicación
La ubicación del elemento en el lienzo renderizable.
ubicación_una_vez_desplazada_a_la_vista
ESTA PROPIEDAD PUEDE CAMBIAR SIN PREVIO AVISO. Use esto para descubrir dónde en la pantalla un
el elemento es para que podamos hacer clic en él. Este método debería hacer que el elemento se desplace a la vista.
padre
Referencia interna a la instancia de WebDriver de la cual se encontró este elemento.
recto
Un diccionario con el tamaño y la ubicación del elemento.
captura_de_pantalla_como_base64
Obtiene la captura de pantalla del elemento actual como una cadena codificada en base64.
element.screenshot_as_base64
captura_de_pantalla_como_png
Obtiene la captura de pantalla del elemento actual como datos binarios.
element.screenshot_as_png
tamaño
El tamaño del elemento.
nombre_de_etiqueta
La propiedad tagName de este elemento.
texto
El texto del elemento.
[Link](webelement)
Bases: objeto
deseleccionar_todo()
Borrar todas las entradas seleccionadas. Esto solo es válido cuando el SELECT admite múltiples selecciones. lanza
NotImplementedError Si el SELECT no admite selecciones múltiples
deseleccionar_por_indice(indice)
Deseleccione la opción en el índice dado. Esto se hace examinando el atributo "índice" de un elemento, y
no meramente contando.
Args
• índice - La opción en este índice será deseleccionada
lanza NoSuchElementException si no hay una opción con el índice especificado en SELECT
deseleccionar_por_valor(valor)
Deselecciona todas las opciones que tengan un valor que coincida con el argumento. Es decir, cuando se le dé 'foo' esto deselectaría
una opción como:
<option value=”foo”>Bar</option>
Args
El valor a coincidir
deseleccionar_por_texto_visible(texto)
Deselecciona todas las opciones que muestran texto que coincide con el argumento. Es decir, dado 'Bar', esto deseleccionaría
una opción como:
<option value=”foo”>Bar</option>
Argumentos
El texto visible para coincidir
seleccionar_por_indice(indice)
Seleccione la opción en el índice dado. Esto se hace examinando el atributo "índice" de un elemento, y no
simplemente contando.
Args
• índice - La opción en este índice será seleccionada
Lanza NoSuchElementException si no hay una opción con el índice especificado en SELECT
seleccionar_por_valor(valor)
Selecciona todas las opciones que tengan un valor que coincida con el argumento. Es decir, cuando se da 'foo', esto seleccionaría un
opción como:
<option value=”foo”>Bar</option>
Args
El valor para coincidir con
lanza NoSuchElementException si no hay una opción con el valor especificado en SELECT
seleccionar_por_texto_visible(texto)
Seleccione todas las opciones que muestren texto que coincida con el argumento. Es decir, cuando se proporciona 'Bar' esto seleccionaría un
opción como:
<option value=”foo”>Bar</option>
Args
El texto visible para hacer coincidir
lanza NoSuchElementException si no hay ninguna opción con el texto especificado en SELECT
todas_las_opciones_seleccionadas
Devuelve una lista de todas las opciones seleccionadas que pertenecen a esta etiqueta de selección
primera_opción_seleccionada
La primera opción seleccionada en esta etiqueta select (o la opción actualmente seleccionada en un select normal)
opciones
Devuelve una lista de todas las opciones que pertenecen a esta etiqueta de selección
[Link](driver,timeout,poll_frequency=0.5,
ignored_exceptions=None)
Bases: objeto
hasta(método, mensaje=’‘)
Llama al método proporcionado con el controlador como argumento hasta que el valor devuelto no sea Falso.
hasta_no(método,mensaje=’‘)
Llama al método proporcionado con el controlador como argumento hasta que el valor de retorno sea False.
7.12. Soporte de UI 57
Selenium Python Bindings, Lanzamiento 2
Soporte de color
[Link](rojo,verde,azul,alpha=1)
Bases: objeto
Clase de soporte para conversión de color
Ejemplo:
de [Link] importarColor
imprimir(Color.from_string('#00ff33').rgba)
imprimir(Color.from_string('rgb(1, 255, 3)').hex)
imprimir(Color.from_string('azul').rgba)
staticfrom_string(str_)
hex
rgb
rgba
[Link].expected_conditions.alert_is_present
Bases: objeto
Se espera que haya una alerta.
[Link].expected_conditions.element_located_selection_state_to_be(loc
es_
Bases: objeto
Una expectativa de localizar un elemento y verificar si el estado de selección especificado está en ese estado. El localizador es una tupla de
(por, ruta) is_selected es un booleano
[Link].expected_conditions.element_located_to_be_selected(localizador)
Bases:objeto
Se selecciona una expectativa para que el elemento sea ubicado. El localizador es una tupla de (por, ruta)
[Link].expected_conditions.element_selection_state_to_be(element,
is_selected)
Bases: objeto
Una expectativa para verificar si el elemento dado está seleccionado. El elemento es un objeto WebElement, is_selected es un
Boolean.
class [Link].expected_conditions.element_to_be_clickable(locator)
Bases: objeto
Una Expectativa para verificar que un elemento sea visible y esté habilitado de manera que se pueda hacer clic en él.
[Link].expected_conditions.element_to_be_selected(element)
Bases:objeto
Una expectativa para verificar que la selección esté seleccionada. El elemento es un objeto WebElement
[Link].expected_conditions.frame_to_be_available_and_switch_to_it(lo
Bases: objeto
Una expectativa para verificar si el marco dado está disponible para cambiar. Si el marco está disponible, cambia.
el controlador dado al marco especificado.
[Link].expected_conditions.invisibilidad_del_elemento_localizado(locator)
Bases: objeto
Una expectativa para comprobar que un elemento es invisible o no está presente en el DOM.
localizador utilizado para encontrar el elemento
[Link].expected_conditions.nueva_ventana_ha_sido_abierta(current_handles)
Bases: objeto
Una expectativa de que se abrirá una nueva ventana y que aumentará el número de identificadores de ventanas.
[Link].expected_conditions.numero_de_ventanas_a_ser(num_windows)
Bases: objeto
Una expectativa de que el número de ventanas sea un valor determinado.
[Link].expected_conditions.presencia_de_todos_los_elementos_localizados(locator)
Bases: objeto
Una expectativa para comprobar que hay al menos un elemento presente en una página web. Se utiliza un localizador para encontrar el
el elemento devuelve la lista de WebElements una vez que han sido ubicados
[Link].expected_conditions.presencia_de_elemento_localizado(localizador)
Bases: objeto
Una expectativa para verificar que un elemento está presente en el DOM de una página. Esto no significa necesariamente
que el elemento es visible. localizador - utilizado para encontrar el elemento devuelve el WebElement una vez que se encuentra
[Link].expected_conditions.staleness_of(element)
Bases: objeto
Espera hasta que un elemento ya no esté adjunto al DOM. element es el elemento por el que esperar. devuelve Falso si el
el elemento todavía está adjunto al DOM, de lo contrario es verdadero.
[Link].expected_conditions.text_to_be_present_in_element(localizador,
text_
Bases: objeto
Una expectativa para verificar si el texto dado está presente en el elemento especificado. localizador, texto
[Link].expected_conditions.text_to_be_present_in_element_value(locato
texto_
Bases: objeto
Una expectativa para verificar si el texto dado está presente en el localizador del elemento, texto
class [Link].expected_conditions.title_contains(titulo)
Bases: objeto
Una expectativa para verificar que el título contenga una subcadena que distingue entre mayúsculas y minúsculas. title es el fragmento de título esperado
devuelve True cuando el título coincide, False en caso contrario
[Link].expected_conditions.titulo_es(title)
Bases: objeto
Una expectativa para verificar el título de una página. title es el título esperado, que debe ser una coincidencia exacta.
Verdadero si el título coincide, falso de lo contrario.
[Link].expected_conditions.visibilidad_de(elemento)
Bases: objeto
Una expectativa para verificar que un elemento, conocido por estar presente en el DOM de una página, es visible. Visibilidad
significa que el elemento no solo se muestra, sino que también tiene una altura y un ancho que son mayores que 0. el elemento es el
WebElement devuelve el (mismo) WebElement una vez que es visible
[Link].expected_conditions.visibilidad_de_todos_los_elementos_localizados(locator
Bases: objeto
Una expectativa para verificar que todos los elementos estén presentes en el DOM de una página y sean visibles. La visibilidad significa
que los elementos no solo se muestran, sino que también tienen una altura y un ancho que son mayores que 0. localizador - utilizado para
encontrar los elementos devuelve la lista de WebElements una vez que están localizados y visibles
[Link].expected_conditions.visibilidad_de_cualquier_elemento_localizado(locator
Bases: objeto
Una expectativa para verificar que hay al menos un elemento visible en una página web. Se utiliza un localizador para encontrar el
elemento devuelve la lista de WebElements una vez que se han localizado
[Link].expected_conditions.visibility_of_element_located(locator)
Bases: objeto
Una expectativa para verificar que un elemento está presente en el DOM de una página y visible. La visibilidad significa que
el elemento no solo se muestra sino que también tiene una altura y un ancho que son mayores que 0. localizador - utilizado para encontrar el
el elemento devuelve el WebElement una vez que se encuentra y es visible
Otra pregunta frecuente:No puedo acceder a URLs. Por favor, proporciona el texto que deseas traducir.
Deberías ver achromedriverexecutable. Ahora puedes crear una instancia de Chrome WebDriver así:
controlador=[Link](ruta_ejecutable="/ruta/al/chromedriver")
Ref:[Link]
Selenium delega las consultas XPath al propio motor XPath del navegador, por lo que Selenium admite XPath.
cualquier cosa que el navegador soporte. En navegadores que no tienen motores XPath nativos (IE 6, 7, 8), Selenium soporta
Solo XPath 1.0.
Ref:[Link]
Puedes usar el método execute_script para ejecutar JavaScript en la página cargada. Así que puedes llamar a la API de JavaScript.
desplazarse hasta la parte inferior o cualquier otra posición de una página.
61
Bindings de Selenium para Python, Versión 2
driver.execute_script("[Link](0, [Link]);")
Elventanael objeto en el DOM tiene undesplazar amétodo para desplazarse a cualquier posición de una ventana abierta. ElscrollHeight
es una propiedad común para todos los elementos. El [Link] dará la altura de todo el cuerpo del
página.
Ref:[Link]
Ref:[Link]
El primer paso es identificar el tipo de archivo que deseas guardar automáticamente.
Para identificar el tipo de contenido que deseas descargar automáticamente, puedes usarcurl:
curl-I URL|grep"Content-Type"
Otra forma de encontrar el tipo de contenido es utilizando elsolicitudesmódulo, puedes usarlo así:
importar solicitudes
content_type=[Link]('[Link]
imprimir(tipo_de_contenido)
Una vez que se identifica el tipo de contenido, puedes usarlo para establecer la preferencia del perfil de firefox: [Link].
[Link]
Aquí hay un ejemplo:
importos
fromseleniumimportcontrolador Web
fp=[Link]()
fp.set_preference("[Link]",2)
fp.set_preference("[Link]",Falso)
fp.set_preference("[Link]", [Link]())
fp.set_preference("[Link]","application/octet-stream
˓→ ")
navegador=[Link](perfil_firefox=fp)
[Link]("[Link]
browser.find_element_by_partial_link_text("selenium-2").click()
Selecciona el elemento <input type="file"> y llama al método send_keys() pasando la ruta del archivo, ya sea el
ruta relativa al script de prueba, o una ruta absoluta. Ten en cuenta las diferencias en los nombres de ruta entre Windows y
Sistemas Unix.
fp=[Link]()
fp.add_extension(extension='[Link]')
fp.establecer_preferencia("[Link]","1.8.4")Evitar la pantalla de inicio
navegador=[Link](perfil_firefox=fp)
fromseleniumimportweb controlador
driver=[Link]()
[Link]('[Link]
driver.save_screenshot('captura_de_pantalla.png')
[Link]()
Índices y tablas
• índice de generación
• índice de módulos
buscar
65
Vínculos de Selenium para Python, Versión 2
s
[Link].exceptions32
[Link],44
[Link].action_chains
35
[Link].alert38
[Link],41
[Link].capacidades_deseadas
41
[Link].keys39
[Link].utils42
[Link]
43
[Link],44
[Link]
52
[Link],58
[Link].expected_conditions
58
[Link],56
[Link].wait57
67
Vínculos de Selenium para Python, Versión 2
A método)45
aceptar() ([Link] BACK_SPACE ([Link]
método)39 atributo)39
CadenasDeAcción (clase en sele- RETROCESO ([Link]
[Link].action_chains) atributo)39
35 Por (clase en [Link]),41
ADD (atributo [Link])
39
C
add_cookie() ([Link] ([Link] en-
método)44 tributo)39
Alerta (clase en [Link])38 CROMO ([Link].desired_capabilities.CapacidadesDeseadas
alerta_está_presente (clase en sele- atributo)42
[Link].expected_conditions) CLASS_NAME ([Link] en-
58 tributo41
todas las opciones seleccionadas (sele- BORRAR ([Link] en-
atributo [Link] tributo39
57 clear() ([Link]
ALT([Link] atributo) método)52
39 click() ([Link].action_chains.ActionChains
ANDROID ([Link]ún.capacidades_deseadas.CapacidadesDeseadas método)36
atributo)42 click() ([Link]
caché de aplicación (sele- método)52
[Link] clic_y_mantener() (sele-
atributo)51 [Link].action_chains.ActionChains
FLECHA_ABAJO (sele- método)36
atributo [Link] close() ([Link]
39 método)45
FLECHA_IZQUIERDA ([Link] Color (clase en [Link])58
atributo)39 MANDO ([Link]
Flecha derecha (sele- atributo)39
atributo de [Link] context() ([Link]
39 método)43
FLECHA_ARRIBA ([Link] CONTEXTO_CHROME (sele-
atributo),39 [Link]
authenticate() ([Link] atributo)44
método)39 context_click() ([Link].action_chains.ActionChains
método)36
B CONTENIDO_DEL_CONTEXTO (sele-
regresar() ([Link] [Link]
atributo)44
69
Vínculos de Selenium para Python, Versión 2
70 Índice
Vínculos de Selenium para Python, Versión 2
Índice 71
Bindings de Selenium para Python, Versión 2
[Link] H
método),48 AYUDA ([Link] en-
encontrar_elementos_por_xpath() (sele- tributo)40
[Link] hex ([Link] atributo)
método)54 58
FIREFOX ([Link].desired_capabilities.DesiredCapabilities
INICIO ([Link] en-
atributo)42 tributo),40
perfil_de_firefox ([Link]
HTMLUNIT ([Link].desired_capabilities.DesiredCap
atributo)44 atributo)42
primera_opción_seleccionada (sele- HTMLUNITCONJS (sele-
atributo de [Link] [Link].desired_capabilities.CapacidadesDeseadas
57 atributo)42
adelante() ([Link]
método)48 Yo
frame_a_disponible_y_cambiar_a_él (clase en sele-
ID (atributo [Link])41
[Link].expected_conditions)
id ([Link]
58
atributo)55
puerto_libre() (en módulo sele- ImeActivationFailedException33
[Link])43
ImeNotAvailableException33
from_string() ([Link]
implicitly_wait() ([Link]
método estático)58
método)49
G
get() ([Link]
método)48
método),54
método)48
método)48
get_log() ([Link]
método)48
método),54
get_screenshot_as_base64() (sele-
[Link]
método)48
get_screenshot_as_archivo() (sele-
[Link]
método),49
get_screenshot_as_png() (sele-
[Link]
método)49
obtener_posición_ventana() (sele-
[Link]
método)49
obtener_rectángulo_ventana() (sele-
[Link]
método)49
obtener_tamaño_ventana() (sele-
[Link]
método),49
72 Índice
Bindings de Selenium para Python, Lanzamiento 2
K nombre ([Link]
key_down() ([Link].action_chains.ActionChains atributo)51
método),37 EVENTOS_NATIVOS_PERMITIDOS (sele-
key_up() ([Link].action_chains.ActionChains [Link]
método)37 atributo)44
Teclas (clase en [Link])39 se ha abierto una nueva ventana(clase en sele-
keys_to_typing() (en el módulo sele- [Link].expected_conditions)
[Link]),43 59
NoAlertPresentException34
L NoSuchAttributeException34
lanzar_aplicación() ([Link].WebDriverNoSuchElementException34
método),44 NoSuchFrameException34
IZQUIERDA (atributo [Link])NoSuchWindowException34
40 NULL ([Link] en-
LEFT_ALT([Link] en- tributo)40
tributo40 número_de_ventanas_a_ser (clase en sele-
CONTROL_IZQUIERDO (sele- [Link].expected_conditions)
atributo de [Link] 59
40 NUMPAD0 ([Link] en
LEFT_SHIFT ([Link] tributo)40
atributo)40 NUMPAD1 ([Link] en-
ENLACE_TEXTO ([Link] tributo)40
atributo)41 NUMPAD2 ([Link] en-
ubicación ([Link] tributo)40
atributo)55 NUMPAD3 ([Link] en-
ubicación_una_vez_desplazada_a_la_vista (sele- tributo)40
[Link] NUMPAD4 ([Link] en-
atributo)56 tributo)40
tipos_de_registro ([Link]) NUMPAD5 ([Link] en-
atributo)51 tributo40
NUMPAD6 ([Link] en-
M tributo)40
maximizar_ventana() (sele- NUMPAD7 ([Link] en-
[Link] tributo)40
método)49 NUMPAD8 ([Link] en-
META([Link] en- homenaje)40
tributo40 NUMPAD9 ([Link] en-
móvil ([Link] tributo41
atributo),51
mover_por_desplazamiento() (sele- O
ÓPERA ([Link].desired_capabilities.DesiredCapabili
[Link].action_chains.ActionChains
método)37 atributo)42
mover_a_elemento() selec- opciones ([Link] en-
[Link].action_chains.ActionChains tributo)57
método)37 orientación ([Link]
mover_a_elemento_con_desplazamiento() (sele- atributo)51
[Link].action_chains.ActionChains
método),37 P
MoveTargetOutOfBoundsException33 PAGE_DOWN ([Link]
MULTIPLICAR([Link] en- atributo)41
tributo)40 fuente_de_página ([Link]
atributo)51
N PAGE_UP ([Link] en-
NOMBRE (atributo [Link])41 tributo),41
Índice 73
Vínculos de Selenium para Python, Versión 2
74 Índice
Selenium Python Bindings, Lanzamiento 2
Índice 75
Vínculos de Selenium para Python, Versión 2
WebDriverException,35
WebDriverWait (clase en sele-
[Link])57
WebElement (clase en sele-
[Link])cincuenta y dos
manejadores_de_ventana ([Link]
atributo)52
X
XPATH (atributo [Link])
41
76 Índice