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

J'ai écrit le code suivant dans Selenium 1 (aka Selenium RC) pour le défilement de page en utilisant java:

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

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

47
demandé sur Ripon Al Wasim 2012-09-06 08:51:38

12 réponses

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 faites Défiler vers le haut:

jse.executeScript("window.scrollBy(0,-250)", "");
OR,
jse.executeScript("scroll(0, -250);");
84
répondu Ripon Al Wasim 2016-08-05 11:48:57

Défilement vers le Bas d'une page:

JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
31
répondu user3472488 2017-11-08 12:03:18

Cela peut ne pas être une réponse exacte à votre question (en termes de WebDriver), mais j'ai trouvé que la bibliothèque java.awt est plus stable que selenium.Keys. Ainsi, une action de réduction de page utilisant le premier sera:

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
9
répondu rs79 2015-06-04 17:26:10

Il y a plusieurs façons de faire défiler vers le haut et vers le bas dans Selenium Webdriver j'utilise toujours Java Script pour faire la même chose.

Voici le code qui fonctionne toujours pour moi si je veux faire défiler vers le haut ou vers 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 dans Selenium

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

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

Vous obtiendrez le document complet ici Faites défiler l'élément spécifique

9
répondu Mukesh Otwani 2015-06-10 20:52:43
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);");
2
répondu CreaThor 2017-07-28 09:22:20

Je ne voulais pas utiliser JavaScript, ou des bibliothèques externes, donc c'était 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 facilement en faire une méthode d'extension pour faire défiler vers le haut ou vers le bas sur n'importe quel élément.

1
répondu KthProg 2017-01-19 18:30:26

Essayez ceci

        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);
        }
0
répondu Maddy 2013-06-27 02:39:09

Vous devez ajouter un défilement à la page pour sélectionner tous les éléments en utilisant Selenium.executeScript("window.scrollBy(0,450)", "").

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

0
répondu SufiWorld 2016-08-24 17:12:34
JavascriptExecutor jse = ((JavascriptExecutor) driver);
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");

Ce code fonctionne pour moi. Comme la page que je teste, les charges que nous faisons défiler vers le bas.

0
répondu Latha 2016-11-03 09:11:12

L'exécuteur Javascript fait toujours le travail parfaitement:

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

(0,300) sont les distances horizontales et verticales respectivement. Mettez vos distances selon vos exigences.

Si vous un perfectionniste et comme pour obtenir la distance exacte que vous aimez faire défiler jusqu'à la première tentative, utilisez cet outil, MeasureIt . Il est un brillant firefox add-on.

0
répondu 2016-11-10 14:59:36

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

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
répondu Ivan 2018-03-06 10:55:51
  1. Si vous voulez faire défiler la page verticalement pour effectuer une action, vous pouvez le faire en utilisant le JavaScript suivant. (pilote (JavascriptExecutor)).executeScript ("fenêtre.scrollTo (0, document.corps.scrollHeight)");

        Where ‘JavascriptExecutor’ is an interface, which helps executing JavaScript through Selenium WebDriver. You can use the following code to import.
    

Importer org.openqa.nium.JavascriptExecutor;

2.Si vous voulez faire défiler un élément particulier, vous devez utiliser le JavaScript suivant.

Élément WebElement = pilote.findElement (par.xpath ("//input [@id= ' email’]")); ((JavascriptExecutor) pilote).executeScript ("arguments [0].scrollIntoView();", élément);

Où "élément" est le localisateur où vous voulez défiler.

3.Si vous souhaitez faire défiler une coordonnée particulière, utilisez le JavaScript suivant.
((JavascriptExecutor) pilote).executeScript ("fenêtre.scrollBy(200,300)"); Où '200 300' sont les coordonnées.

4.Si vous voulez faire défiler vers le haut dans une direction verticale, vous pouvez utiliser le JavaScript suivant. ((JavascriptExecutor) pilote).executeScript ("fenêtre.scrollTo (document.corps.scrollHeight,0)");

  1. Si vous voulez faire défiler horizontalement dans la bonne direction, utilisez le JavaScript suivant. (pilote (JavascriptExecutor)).executeScript ("fenêtre.scrollBy(2000,0)");

  2. Si vous voulez faire défiler horizontalement dans le sens gauche, utilisez la commande suivante JavaScript. (pilote (JavascriptExecutor)).executeScript ("fenêtre.scrollBy(-2000,0)");

0
répondu Tapan Khimani 2018-10-05 06:52:21