2012-02-25 22 views
10

Estoy usando Selenium WebDriver para automatizar las pruebas de mi navegador. El encabezado de mi navegador es flotante y está siempre presente independientemente del desplazamiento del navegador.Desplazamiento con Selenium WebDriver con Java

Así que cuando hago clic en ciertos elementos que están debajo de la región visible actual del navegador, el selenio intenta desplazar el elemento a la vista y hacer clic en ellos.

Pero debido al desplazamiento automático como tal, los elementos se desplazan detrás del encabezado flotante y cuando se realiza alguna acción en ellos, se hace clic en los elementos del encabezado de página.

¿Hay alguna manera de limitar el desplazamiento predeterminado del WebDriver?

+0

Entiendo que le gustaría controlar el desplazamiento usando Selenium WebDriver. Hay un problema similar discutido/resuelto [aquí] (http://sqa.stackexchange.com/a/1292/1316), que espero sea útil. – Ziran

+0

Gracias, escribí un javascript to suite mis necesidades –

+0

Puede encontrar la solución aquí: http://stackoverflow.com/questions/12293158/page-scroll-up-or-down-in-webdriver-selenium-2-using -java OR, http://stackoverflow.com/questions/11554370/vertical-scroll-down-and-scroll-up-in-webdriver-with-java –

Respuesta

5
Locatable hoverItem = (Locatable) driver.findElement(By.xpath("//li[text()='Reklama w Google']")); 
    int y = hoverItem.getCoordinates().getLocationOnScreen().getY(); 
    ((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+y+");"); 
+0

// C# 4.5 versión de esto que compila int y = (elemento (ILocatable)) .Coordinates.LocationInViewport.Y; (controlador (IJavaScriptExecutor)) .ExecuteScript ("ventana.scrollBy (0, "+ y +"); "); } – Aligned

+0

window.scroll en lugar de scrollBy me funciona mejor – Aligned

+0

Además, si tiene un ID html, puede usar el siguiente – EsotericNonsense

4

Si desea desplazarse en la ventana de Firefox usando WebDriver selenio, una de las formas es el uso de JavaScript en el código Java, el código javeScript para desplazarse hacia abajo es el siguiente:

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

Perfecto para mí. Se desplaza directamente hacia abajo :) - para aquellos que quieren una versión de JS/transportador 'browser.executeScript (" window.scrollTo (0, Math.max (document.documentElement.scrollHeight, document.body.scrollHeight, document.documentElement.clientHeight)); ");' –

2

Puede desplazarse a la ubicación necesaria usando javascript. Necesita usar el método scrollTo en lugar del método scrollBy para que funcione.

public void scrollToElement(By by) { 
    Locatable element = (Locatable) selenium.findElement(by); 
    Point p= element.getCoordinates().getLocationOnScreen(); 
    JavascriptExecutor js = (JavascriptExecutor) selenium; 
    js.executeScript("window.scrollTo(" + p.getX() + "," + (p.getY()+150) + ");"); 
} 
1

uso por debajo de código para desplazarse hacia arriba y desplazamiento hacia abajo

Actions dragger = new Actions(driver); 

WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("<Scroll bar Element >")); 

// drag downwards 

int numberOfPixelsToDragTheScrollbarDown = 50; 

for (int i=10 ; i<500 ; i=i+numberOfPixelsToDragTheScrollbarDown) { 
    try { 
     // this causes a gradual drag of the scroll bar, 10 units at a time 
     dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform(); 
     Thread.sleep(1000L); 
    } catch(Exception e1){} 
} 

// now drag opposite way (downwards) 
numberOfPixelsToDragTheScrollbarDown = -50; 
for (int i=500;i>10;i=i+numberOfPixelsToDragTheScrollbarDown){ 
    // this causes a gradual drag of the scroll bar, -10 units at a time 
    dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform(); 
    Thread.sleep(1000L); 
} 
2

uso simple del .sendKeys(Keys.PAGE_DOWN); cuando su elemento era visible, haga clic sobre él, por .click(element).perform(); para mi trabajo algo como esto:

clicker = new Actions(driver); 
    clicker.sendKeys(Keys.PAGE_DOWN); 
    Thread.sleep(1000); 
    clicker.click(button).perform();  
    Thread.sleep(1000); 
1

Vaya a la parte superior se puede hacer:

private void scrollToTop() { 
    JavascriptExecutor js = (JavascriptExecutor) webDriver; 
    js.executeScript("window.scrollTo(0, 0);"); 
} 
1

Para desplazarse hacia abajo:

System.setProperty("webdriver.chrome.driver", 
        "/home/shreetesh/chromedriver"); 
WebDriver driver = new ChromeDriver(); 
String url = "https://en.wikipedia.org/wiki/Main_Page"; 
driver.get(url); 
JavascriptExecutor js = (JavascriptExecutor)driver; 
js.executeScript("scroll(0, 25000);"); 

Para desplazarse hacia arriba basta con sustituir el valor de desplazamiento con (2500, 0).

0

Recientemente tuve este problema debido a un menú de Drupal bloquear el elemento cuando me encontré con este código:

public void scrollTo(WebElement x) { 
     ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", x); 
     } 

Después referencing this page, he actualizado para establecer el valor booleano false usando este código, y funciona muy bien:

public void scrollTo(WebElement x) { 
     ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", x); 
     } 
Cuestiones relacionadas