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)?
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);");
Défilement 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 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);
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
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, 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.
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);
}
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).
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.
L'exécuteur Javascript fait toujours le travail parfaitement:
((JavascriptExecutor) driver).executeScript("scroll(0,300)");
Où (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.
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
-
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)");
Si vous voulez faire défiler horizontalement dans la bonne direction, utilisez le JavaScript suivant. (pilote (JavascriptExecutor)).executeScript ("fenêtre.scrollBy(2000,0)");
Si vous voulez faire défiler horizontalement dans le sens gauche, utilisez la commande suivante JavaScript. (pilote (JavascriptExecutor)).executeScript ("fenêtre.scrollBy(-2000,0)");