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 (alias Selenium RC) pour faire défiler les pages en utilisant java:

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

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

Pour faire 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 faire défiler vers le haut :

 jse.executeScript("window.scrollBy(0,-250)", ""); OR, jse.executeScript("scroll(0, -250);"); 

Faire défiler vers le bas d’une page:

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

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 de bas de page utilisant le premier sera:

 Robot robot = new Robot(); robot.keyPress(KeyEvent.VK_PAGE_DOWN); robot.keyRelease(KeyEvent.VK_PAGE_DOWN); 

Il existe de nombreuses façons de faire défiler vers le haut ou le bas dans Selenium Webdriver. J’utilise toujours Java Script pour faire la même chose.

Ci-dessous 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 ici Scroll Page in Selenium

Si vous voulez faire défiler un élément, 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 pour l’élément spécifique

 JavascriptExecutor js = ((JavascriptExecutor) driver); 

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

Je ne voulais pas utiliser JavaScript, ni aucune bibliothèque externe, 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 un élément vers le haut ou vers le bas.

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

Vous devez append un défilement à la page pour sélectionner tous les éléments à l’aide de 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 n’atteint qu’un certain point dans la page, par exemple (0,450).

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

Ce code fonctionne pour moi. Comme la page que je teste, charge à mesure que nous descendons.

Javascript executor fait toujours le travail parfaitement:

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

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

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

Merci pour la réponse de Ripon Al Wasim. J’ai fait des améliorations. En raison 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