wake-up-neo.com

Scrollen mit Selenium WebDriver mit Java

Ich verwende Selenium WebDriver, um meine Browsertests zu automatisieren. Mein Browserheader ist schwebend und ist unabhängig vom Browser-Scroll immer vorhanden

Wenn ich also auf bestimmte Elemente klicke, die sich unterhalb des aktuell sichtbaren Bereichs des Browsers befinden, versucht Selenium, das Element in die Ansicht zu rollen und darauf zu klicken. 

Aufgrund des automatischen Bildlaufs werden die Elemente jedoch hinter dem gleitenden Header gescrollt, und wenn eine Aktion für sie ausgeführt wird, werden die Elemente im Seitenheader angeklickt.

Gibt es eine Möglichkeit, die Standardrolle des WebDriver einzuschränken ?

10
Rogers Jefrey L
    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+");");
5
TomaszB

Wenn Sie mit einem Selenium-Web-Treiber im Firefox-Fenster einen Bildlauf durchführen möchten, können Sie JavaScript im Java-Code verwenden. Der Java-Code für das Scrollen nach unten lautet wie folgt:

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

Verwenden Sie einfach die .sendKeys(Keys.PAGE_DOWN); , Wenn Ihr Element sichtbar war. Klicken Sie es einfach an, indem Sie .click(element).perform(); Für mich wie folgt verwenden:

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

Sie können mit Javascript zum erforderlichen Speicherort scrollen. Sie müssen die scrollTo-Methode anstelle der scrollBy-Methode verwenden, damit sie funktioniert.

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) + ");");
}
2

Nach oben scrollen kann gemacht werden:

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

Um nach unten zu scrollen:

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);");

Um nach oben zu scrollen, ersetzen Sie einfach den Wert von scroll durch (2500, 0).

1
BazingaRtshe

Verwenden Sie den folgenden Code, um nach oben und nach unten zu scrollen 

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);
}
1
Maddy

Ich hatte kürzlich dieses Problem, weil ein Drupal-Menü das Element blockierte, als ich diesen Code ausführte:

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

Nachdem diese Seite referenziert wurde , habe ich den Boolean mit diesem Code auf false gesetzt, und er funktioniert hervorragend:

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