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)?
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);");
Défilement vers le bas d'une page:
JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
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
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);
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);");
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.
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);
}
L'exécuteur Javascript fait toujours le travail à la perfection:
((JavascriptExecutor) driver).executeScript("scroll(0,300)");
où (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.
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
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).
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.