¿Hay alguna forma en Selenium 1.xo 2.x para desplazar la ventana del navegador de modo que un elemento particular identificado por un XPath esté a la vista del navegador? Hay un método de enfoque en Selenium, pero no parece desplazar físicamente la vista en Firefox. ¿Alguien tiene alguna sugerencia sobre cómo hacer esto?
La razón por la que necesito esto es porque estoy probando el clic de un elemento en la página. Lamentablemente, el evento no parece funcionar a menos que el elemento sea visible. No tengo control del código que se activa cuando se hace clic en el elemento, por lo que no puedo depurarlo ni modificarlo, por lo que la solución más fácil es desplazar el elemento a la vista.
selenium
scroll
automated-tests
Dan a la carta
fuente
fuente
Respuestas:
He intentado muchas cosas con respecto al desplazamiento, pero el siguiente código ha proporcionado mejores resultados.
Esto se desplazará hasta que el elemento esté a la vista:
fuente
position: fixed
en su página y está ocultando el elemento que Selenium quiere hacer clic. Muy a menudo, estos elementos fijos van en la parte inferior, por lo que la configuración loscrollIntoView(true)
mueve muy bien a la parte superior de la ventana gráfica.true
ascrollIntoView
si el objeto al que se desplaza está debajo de donde está actualmente,false
si el objeto al que se desplaza está arriba de donde está actualmente. Me costó mucho descubrirlo.Puede usar la
org.openqa.selenium.interactions.Actions
clase para moverse a un elemento.Java:
Pitón:
fuente
Es posible que desee probar esto.
fuente
js.ExecuteScript("arguments[0].scrollIntoView(true);" + "window.scrollBy(0,-100);", e);
para IE y Firefox yjs.ExecuteScript("arguments[0].scrollIntoViewIfNeeded(true);", e);
para Chrome. Sencillo.((JavascriptExecutor) driver).executeScript("javascript:window.scrollBy(0,250)");
Esto funcionó en Chrome. Y la única solución que realmente funcionó para mí. En la misma situación que el primer comentarista, tenía un elemento fijo en la parte inferior que seguía ocultando el elemento que necesitaba hacer clic.Si desea desplazarse por la ventana de Firefox con el controlador web Selenium, una de las formas es usar JavaScript en el código Java. El código JavaScript para desplazarse hacia abajo (hasta la parte inferior de la página web) es el siguiente:
fuente
La orientación a cualquier elemento y el envío de teclas hacia abajo (o arriba / izquierda / derecha) parece funcionar también. Sé que esto es un truco, pero tampoco estoy realmente en la idea de usar JavaScript para resolver el problema de desplazamiento.
Por ejemplo:
fuente
var elem = driver.FindElement(By.Id("element_id")); elem.SendKeys(Keys.PageDown);
Para más ejemplos, vaya aquí . Todo en ruso, pero el código Java es transcultural :)
fuente
En Selenium necesitamos la ayuda de un ejecutor de JavaScript para desplazarnos a un elemento o desplazar la página:
En la declaración anterior
element
es el elemento exacto donde necesitamos desplazarnos. Probé el código anterior y funcionó para mí.Tengo una publicación completa y un video sobre esto:
http://learn-automation.com/how-to-scroll-into-view-in-selenium-webdriver/
fuente
Puede usar este fragmento de código para desplazarse:
C#
ahí tienes
fuente
Esto funcionó para mí:
fuente
Selenium 2 intenta desplazarse al elemento y luego hacer clic en él. Esto se debe a que Selenium 2 no interactuará con un elemento a menos que piense que es visible.
Desplazarse al elemento ocurre implícitamente, por lo que solo necesita encontrar el elemento y luego trabajar con él.
fuente
WebElement.click()
, el elemento debe estar visible para hacer clic en él. No se desplazará en su nombre.Use el controlador para enviar claves como la tecla pagedowno downarrowpara mostrar el elemento. Sé que es una solución demasiado simple y podría no ser aplicable en todos los casos.
fuente
element
en la página visible y enviar PageDownelement.SendKeys(Keys.PageDown);
funcionó para mí.Desde mi experiencia, Selenium Webdriver no se desplaza automáticamente a un elemento al hacer clic cuando hay más de una sección desplazable en la página (lo cual es bastante común).
Estoy usando Ruby, y para mi AUT, tuve que parchear el método de clic de la siguiente manera;
El método 'location_once_scrolled_into_view' es un método existente en la clase WebElement.
Aprecio que no estés usando Ruby, pero debería darte algunas ideas.
fuente
module Capybara :: module Node
, y necesitaba llamar ennative.location_once_scrolled_into_view
lugar de sololocation_once_scrolled_into_view
. También rescaté::Selenium::WebDriver::Error::UnknownError
, que es lo que obtengo a menudo en Firefox 44.0.2. Pero creo que esta solución no es lo suficientemente flexible y, en última instancia, coloca las<Element>.native.location_once_scrolled_into_view
llamadas en la prueba de aceptación en sí, seguida inmediatamente depage.execute_script('window.scrollByPages(-1)')
donde sea necesario.Element#scroll_into_view
que delega a Selenium'slocation_once_scrolled_into_view
. Pero ambos no hacen nada diferente del comportamiento predeterminado de Selenium, por lo que los elementos de desbordamiento aún pueden obstruir cualquier cosa que intentemos hacer clic.El script de Ruby para desplazar un elemento a la vista es el siguiente.
fuente
Algunas veces también enfrenté el problema de desplazarme con selenio. Entonces utilicé javaScriptExecuter para lograr esto.
Para desplazarse hacia abajo:
O también
Para desplazarse hacia arriba:
O,
fuente
Si crees que otras respuestas fueron demasiado extravagantes, esta también lo es, pero no hay una inyección de JavaScript involucrada.
Cuando el botón está fuera de la pantalla, se rompe y se desplaza hacia él, así que vuelva a intentarlo ... ¯ \ _ (ツ) _ / ¯
fuente
Esta es una solución repetida con JavaScript, pero con un elemento de espera agregado.
De
ElementNotVisibleException
lo contrario, puede aparecer si se está realizando alguna acción sobre el elemento.fuente
He utilizado esta manera para desplazar el elemento y hacer clic:
fuente
scrollIntoView(false)
funcionó, peroscrollIntoView(true)
no lo hice. Cualquiera puede funcionar , depende de su escenario.fuente
Es posible que desee visitar la página Desplazarse por los elementos web y la página web - Selenium WebDriver usando Javascript :
fuente
En la mayoría de las situaciones para desplazarse, este código funcionará.
fuente
JAVA
Intente desplazarse hasta la
x y
posición de uso del elemento , y useJavascriptExecutor
con este argumento:"window.scrollBy(x, y)"
.Siguiente importación:
Primero necesitas
x y
ubicar el elemento.fuente
No estoy seguro de si la pregunta sigue siendo relevante, pero después de consultar la documentación de scrollIntoView de https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView .
La solución más fácil sería
Esto desplaza el elemento al centro de la página.
fuente
El comportamiento predeterminado de Selenium nos permite desplazarnos para que el elemento apenas se vea en la parte superior de la ventana gráfica. Además, no todos los navegadores tienen exactamente el mismo comportamiento. Esto es muy insatisfactorio. Si graba videos de las pruebas de su navegador, como yo, lo que quiere es que el elemento se desplace hacia la vista y se centre verticalmente .
Aquí está mi solución para Java:
Y luego, para desplazarte, lo llamas así:
fuente
Así es como lo hago con PHP webDriver para Selenium. Funciona para el servidor independiente Selenium 2.39.0 + https://github.com/Element-34/php-webdriver + Firefox 25.0
Nota: Yo uso una versión personalizada del Element34 PHP-webdriver. Pero no hay ningún cambio en el núcleo. Solo uso mi "welement" en lugar de "element". Pero no influye en el caso en cuestión. El autor del controlador dice "permitir que casi todas las llamadas API sean una transformación directa de lo que se define en el protocolo WebDriver". Por lo tanto, no debería tener problemas con otros lenguajes de programación.
Simplemente hacer clic no funcionará en mi configuración. Hará un desplazamiento en lugar de hacer clic, así que tuve que hacer clic dos veces sin llamar a "location_in_view ()".
Nota: Este método funciona para elementos que se pueden ver, como una entrada de tipo botón.
Echa un vistazo a: http://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/element/:id/location
La descripción de JsonWireProtocol # sugiere el uso de location + moveto, porque location _in_view es un método interno.
fuente
Algo que funcionó para mí fue usar el método Browser.MoveMouseToElement en un elemento en la parte inferior de la ventana del navegador. Milagrosamente funcionó en Internet Explorer, Firefox y Chrome.
Elegí esto sobre la técnica de inyección de JavaScript solo porque se sentía menos hacky.
fuente
He estado haciendo pruebas con componentes ADF y debes tener un comando separado para desplazarte si se usa carga diferida. Si el objeto no está cargado e intenta encontrarlo usando Selenium, Selenium lanzará una excepción de elemento no encontrado.
fuente
Si nada funciona, intente esto antes de hacer clic en:
fuente
En Java podemos desplazarnos usando JavaScript, como en el siguiente código:
Puede asignar un valor deseado a la variable "elm.scrollTop".
fuente
Una solución es:
fuente
Este código me está funcionando:
fuente