Estoy usando la API de Selenium 2 Java con FirefoxDriver. Cuando completo un formulario, se agregan casillas de verificación a la página según las entradas del formulario.
Me gustaría simular un clic en esas casillas de verificación usando Selenium. Los elementos son visibles y utilizables en un navegador normal, pero el selenio afirma que los elementos no son visibles.
"Element is not currently visible and so may not be interacted with"
¿Puedo obligar al selenio a ignorar el estado no visible de los elementos? ¿Cómo puedo obligar a Selenium a interactuar con el elemento no visible?
java
selenium-webdriver
djondal
fuente
fuente
Respuestas:
Selenium determina que un elemento es visible o no según los siguientes criterios (use un inspector DOM para determinar qué CSS se aplica a su elemento, asegúrese de mirar el estilo calculado):
Tu elemento coincide con uno de esos criterios. Si no tiene la capacidad de cambiar el estilo del elemento, así es como puede hacerlo forzosamente con javascript (asumiremos WebDriver ya que dijo Selenium2 API):
Pero eso no activará un evento de javascript, si depende del evento de cambio para esa entrada, tendrá que activarlo también (muchas formas de hacerlo, la más fácil es usar cualquier biblioteca de JavaScript que esté cargada en esa página).
La fuente para el control de visibilidad -
https://github.com/SeleniumHQ/selenium/blob/master/javascript/atoms/dom.js#L577
La especificación de WebDriver que define esto:
https://dvcs.w3.org/hg/webdriver/raw-file/tip/webdriver-spec.html#widl-WebElement-isDisplayed-boolean
fuente
A veces, esto significa que hay varios elementos en una página que tienen la misma propiedad por la que estás intentando buscar y estás "hablando con el incorrecto".
Si su elemento no se puede identificar de forma única por: id o: nombre (o: clase), podría ser complicado.
A veces, buscar el elemento por: xpath ayudará y, en algunos casos, incluso eso no es práctico.
En esos casos, es posible que deba obtener todos los elementos que coincidan con sus criterios y hacer referencia al correcto en el índice. Está sucio, pero funciona.
Estoy usando Selenium / Watir de la aplicación Ruby on Rails, así que en mi caso, el ejemplo sería:
Espero que esto ayude.
fuente
Tuve un problema similar, pero estaba relacionado con el elemento que no estaba visible en la ventana gráfica. Tomé una captura de pantalla y me di cuenta de que la ventana del navegador era demasiado estrecha y no se podía ver el elemento. Hice uno de estos y funcionó:
Ver: WebDriver.maximize_window ()
fuente
O puede usar Selenium Action Class para simular la interacción del usuario, por ejemplo
fuente
También hay otro caso en el que el elemento visible se reconocerá como no visible:
Para verificar si el elemento con el que no desea interactuar está transformado en CSS, en CHROME haga esto:
fuente
La invisibilidad también puede deberse al momento en que se supone que el elemento debe aparecer lentamente. Forzar al navegador a esperar un poco podría ayudar en ese caso.
Consulte, por ejemplo, la pregunta sobre dejar que WebDriver espere hasta que un elemento esté presente .
fuente
Tuve el mismo problema con el selenio 2 en Internet Explorer 9, pero mi solución es realmente extraña. No pude hacer clic en las entradas dentro de mi formulario -> repeticiones de selenio, no son visibles.
Ocurrió cuando mi forma tenía sombras curvas -> http://www.paulund.co.uk/creating-different-css3-box-shadows-effects : en el concreto "Efecto no. 2"
No tengo idea de por qué y cómo esta solución de pseudoelemento detuvo las pruebas de selenio, pero funciona para mí.
fuente
No puede forzar el acceso / cambio de elemento al que el usuario normalmente no tiene acceso, ya que Selenium está diseñado para imitar la interacción del usuario.
Si ocurre este error, verifique si:
maximize()
en node.js ,maximize_window()
en Python),executeScript()
en node.js ,execute_script()
en Python).fuente
Acabo de resolver este error mientras uso capibara en el proyecto ror agregando:
a
features/support/env.rb
.fuente
Acabo de resolver este error esperando la propiedad de visualización del elemento
fuente
Entro en la excepción ElementNotVisibleException usando selenio para pruebas funcionales en un sitio de django con glifos de arranque como enlaces en plantillas como:
Durante mis pruebas funcionales, el estilo de arranque no se carga, luego intentar hacer clic en dichos enlaces generará ElementNotVisibleException. Me las arreglo para hacer que se pueda hacer clic simplemente agregando un espacio en la etiqueta, así:
fuente
Hay muchas buenas respuestas en esta página.
Ambos se analizan en varios detalles anteriormente. La respuesta que no vi fue ScrollToElement. Parece que está procesando una lista de elementos, mientras que mientras procesa está creando más elementos, casillas de verificación. Esto puede hacer que los elementos de su lista salgan de la página visible. A veces puede ver el elemento a simple vista, pero simplemente no puede hacer clic en él. Al procesar listas, a veces tiene que intervenir el desplazamiento.
Como me encontré con esto, creé un PageScroll.java y puse mis scripts de desplazamiento allí. Estos son algunos de los métodos de esta clase:
consulte Desplazar elemento a la vista con selenio para obtener más ejemplos
fuente
La respuesta aceptada funcionó para mí. A continuación se muestra un código para encontrar el elemento padre que hace que Selenium piense que no es visible.
fuente
Para agregar mi granito de arena aquí: si un elemento reside detrás de un div fijo, se considerará como no visible y no podrá hacer clic en él; esto me sucedió recientemente y lo resolví ejecutando un script como se recomendó anteriormente, que hace:
fuente