example chrome java selenium selenium-webdriver

chrome - selenium webdriver java example



¿Cómo desplazar un DIV específico utilizando Selenium WebDriver con Java? (9)

Algunos de WebElements no son reconocidos por WebDriver, WebDriver no encuentra el elemento que no es visible en el área visible del navegador.

Para que WebDeliver pueda ver el elemento Web, debemos hacer que ese elemento sea visible en la vista del navegador para desplazarse hacia abajo en un div en particular.

¿Cómo puedo realizar mi acción (desplazarme hacia abajo y hacer clic) en un área particular de mi página web? Intenté mucho, no me ayudó.

Por favor ayúdame a resolver mi problema.


Desplácese hacia abajo:

import org.openqa.selenium.JavascriptExecutor; WebDriver driver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("scroll(0, 250)"); //y value ''250'' can be altered

Desplazarse hacia arriba:

JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("scroll(250, 0)"); //x value ''250'' can be altered

Desplácese por la parte inferior de la página:

JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight));");

o

Actions actions = new Actions(driver); actions.keyDown(Keys.CONTROL).sendKeys(Keys.END).perform();

Desplazamiento completo hacia abajo en cámara lenta:

for (int second = 0;; second++) { if(second >=60){ break; } ((JavascriptExecutor) driver).executeScript("window.scrollBy(0,400)", ""); //y value ''400'' can be altered Thread.sleep(3000); }

o

JavascriptExecutor jse = (JavascriptExecutor)driver; for (int second = 0;; second++) { if(second >=60){ break; } jse.executeScript("window.scrollBy(0,800)", ""); //y value ''800'' can be altered Thread.sleep(3000); }

Desplázate automáticamente a tu WebElement:

Point hoverItem =driver.findElement(By.xpath("Value")).getLocation(); ((JavascriptExecutor)driver).executeScript("return window.title;"); Thread.sleep(6000); ((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+(hoverItem.getY())+");"); // Adjust your page view by making changes right over here (hoverItem.getY()-400)

o

((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", driver.findElement(By.xpath("Value'')]")));

o

WebElement element = driver.findElement(By.xpath("Value")); Coordinates coordinate = ((Locatable)element).getCoordinates(); coordinate.onPage(); coordinate.inViewPort();


Considera que tu HTML es como a continuación:

<div id="someId" class="className" style="position: relative; top: 0px; left: opx;>

puede observar el atributo de style en la verificación div para el valor de top que es 0px en el ejemplo anterior

Ahora trata de hacer algo como:

$(''.className'').animate({top: "-60px"});

lo que te ayudará a desplazarte hacia abajo. Es un ejecutor de JavaScript, así que, por supuesto, necesitas implementarlo.


En primer lugar, la mayoría de las respuestas publicadas aquí están fuera del tema. He estado trabajando con selenio 2 y selenio 3 ahora, el controlador web puede manejar el desplazamiento de la ventana para hacer que un elemento sea visible.

Para todos los que publican fragmentos como:

driver.execute_script(''scrollBy(0, 250)'')

¡No entiendes la pregunta en absoluto!

En realidad, aún no encontré la manera de simular correctamente la acción de arrastrar del controlador de desplazamiento, pero esta respuesta parece prometedora, pero no lo intenté.

Hasta ahora, personalmente, hay dos formas de hacer esto por mí:

  1. Utilice Keys.ARROW_DOWN
  2. Use Keys.PAGE_DOWN

En realidad, hay una tercera forma, simplemente abandone el selenio y póngase en contacto con el sitio web si proporciona alguna API.


La forma más sencilla de hacerlo es ejecutar un Javascript para desplazar el elemento hacia arriba / abajo.

JavascriptExecutor jsExec = (JavascriptExecutor) driver; jsExec.executeScript("document.getElementById(''id'').scrollDown += 100");


Mi ''SOLUCIÓN DE TRABAJO'' es desplazarse a la posición por las coordenadas x e y de los elementos. También agregué un desplazamiento a y para que cualquier encabezado / pie de página u otro elemento no bloquee la visibilidad del elemento al que quiero desplazarme.

Tengo mi respuesta publicada bajo esta pregunta -

Selenium webdriver no puede hacer clic en un enlace fuera de la página


Ninguna de las respuestas publicadas funcionó para mí, sin embargo, he encontrado una solución basada en esta publicación .

((JavascriptExecutor) driver).executeScript( "arguments[0].scrollTop=arguments[1].offsetTop", divWithScrollbarElement, elementToScrollTo);

donde divWithScrollbarElement es el elemento div que desea desplazar, y elementToScrollTo es el elemento secundario que desea hacer visible (que en mi caso era en realidad el elemento primario del elemento que inicialmente intentaba ver). Si elementToScrollTo no está en el DOM, es posible que deba usar el script una vez para desplazarse hacia abajo tanto como sea posible, y luego una vez más, se han cargado los elementos.


Otra forma de hacerlo es usando el método scrollIntoView() JavascriptExceutor :

WebElement DIVelement = driver.findElement(By.xpath("xpath to div")); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("arguments[0].scrollIntoView(true)". DIVelement);


Primero debes hacer un desplazamiento en lugar de encontrar un elemento, así que haz lo siguiente:

document.getElementById("your div id").scrollTop(250);

Después de arriba puedes encontrar ese div específico.

También puedes probar a continuación:

JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("javascript:window.scrollBy(250,350)");


driver.get("http://www.***.com/"); driver.manage().window().maximize(); WebElement scroll = driver.findElement(By.id("someId")); scroll.sendKeys(Keys.PAGE_DOWN);