web-dev-qa-db-fra.com

Faites défiler la page vers le haut ou le bas dans Selenium WebDriver (Selenium 2) en utilisant java

J'ai écrit le code suivant dans Selenium 1 (a.k.a Selenium RC) pour le défilement de page à l'aide de Java:

Selenium.getEval("scrollBy(0, 250)");

Quel est le code équivalent dans Selenium 2 (WebDriver)?

58
Ripon Al Wasim

Pour Faites défiler vers le bas:

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)");

OU vous pouvez faire comme suit:

jse.executeScript("scroll(0, 250);");

Pour Défilement vers le haut:

jse.executeScript("window.scrollBy(0,-250)");
OR,
jse.executeScript("scroll(0, -250);");
94
Ripon Al Wasim

Défilement vers le bas d'une page:

JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
38
user3472488

Selenium Webdriver permet de faire défiler de haut en bas de nombreuses manières. J'utilise toujours Java Script pour faire de même.

Voici le code qui fonctionne toujours pour moi si je veux faire défiler vers le haut ou le bas

 // This  will scroll page 400 pixel vertical
  ((JavascriptExecutor)driver).executeScript("scroll(0,400)");

Vous pouvez obtenir le code complet à partir d’ici page de défilement en sélénium

Si vous voulez faire défiler un élément, un morceau de code ci-dessous fonctionnera pour vous.

je.executeScript("arguments[0].scrollIntoView(true);",element);

Vous obtiendrez la documentation complète ici Faites défiler pour un élément spécifique

13
Mukesh Otwani

Cela peut ne pas être une réponse exacte à votre question (en termes de WebDriver), mais j'ai constaté que la bibliothèque Java.awt est plus stable que Selenium.Keys. Ainsi, une action en bas de page utilisant l'ancien sera:

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
10
rs79
JavascriptExecutor js = ((JavascriptExecutor) driver);

Faites défiler vers le bas:

js.executeScript("window.scrollTo(0, document.body.scrollHeight);");

Faites défiler vers le haut:

js.executeScript("window.scrollTo(0, -document.body.scrollHeight);");
3
CreaThor

Je ne voulais pas utiliser JavaScript, ni aucune bibliothèque externe, c'était donc ma solution (C #):

IWebElement body = Driver.FindElement(By.TagName("body"));

IAction scrollDown = new Actions(Driver)
    .MoveToElement(body, body.Size.Width - 10, 15) // position mouse over scrollbar
    .ClickAndHold()
    .MoveByOffset(0, 50) // scroll down
    .Release()
    .Build();

scrollDown.Perform();

Vous pouvez également en faire facilement une méthode d’extension pour faire défiler tout élément.

1
KthProg

Essaye ça

        Actions dragger = new Actions(driver);
        WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("//*[@id='jobreslist_outercontainer']/div/div[2]/div"));

        // 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

L'exécuteur Javascript fait toujours le travail à la perfection:

((JavascriptExecutor) driver).executeScript("scroll(0,300)");

(0,300) sont respectivement les distances horizontale et verticale. Mettez vos distances selon vos besoins.

Si vous êtes un perfectionniste et souhaitez obtenir la distance exacte à laquelle vous souhaitez faire défiler la première tentative, utilisez cet outil, MeasureIt . C'est un excellent add-on firefox.

0
user7123229

Merci pour la réponse de Ripon Al Wasim. J'ai fait quelques améliorations. à cause de problèmes de réseau, je réessaye trois fois jusqu'à la rupture de la boucle.

driver.get(url)
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
try_times = 0
while True:
    # Scroll down to bottom
    driver.execute_script("window.scrollBy(0,2000)")

    # Wait to load page
    time.sleep(scroll_delay)
    # Calculate new scroll height and compare with last scroll height
    new_height = driver.execute_script("return document.body.scrollHeight")

    if last_height == new_height:
        try_times += 1

    if try_times > 3:
        try_times = 0
        break
    last_height = new_height
0
Ivan

Vous devez ajouter un parchemin vers la page pour sélectionner tous les éléments à l'aide de Selenium.executeScript("window.scrollBy(0,450)", "").

Si vous avez une longue liste, ajoutez le défilement plusieurs fois pendant l'exécution. Notez que le défilement ne va que jusqu'à un certain point de la page, par exemple (0 450).

0
SufiWorld
JavascriptExecutor jse = ((JavascriptExecutor) driver);
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");

Ce code fonctionne pour moi. En tant que page que je teste, charge lorsque nous défilons vers le bas.

0
Latha