Page faites défiler vers le haut ou vers le bas dans Selenium WebDriver (Selenium 2) en utilisant java
J'ai écrit le code suivant dans Selenium 1 (alias 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 answers
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)");
Ce n'est peut-être pas 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 page vers le bas utilisant la première 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 de haut en bas dans Selenium Webdriver J'utilise toujours Java Script pour faire la même chose.
Ci-Dessous est 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 un élément, le morceau de code ci-dessous fonctionnera pour vous.
je.executeScript("arguments[0].scrollIntoView(true);",element);
Vous obtiendrez le doc complet ici Faites défiler pour un é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, 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 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, se charge lorsque nous faisons défiler vers le bas.
Javascript executor fait toujours parfaitement le travail:
((JavascriptExecutor) driver).executeScript("scroll(0,300)");
Où (0,300)
sont les distances horizontales et verticales respectivement. Mettez vos distances selon vos exigences.
Si vous êtes perfectionniste et que vous aimez obtenir la distance exacte à laquelle vous souhaitez faire défiler à 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'à ce que 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 souhaitez 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.
Importation org.openqa.nium.JavascriptExecutor;
2.Si vous souhaitez 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ù ‘element’ est le localisateur où vous voulez faire 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 souhaitez 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 la direction de gauche, utilisez ce qui suit JavaScript. ((pilote JavascriptExecutor)).executeScript ("fenêtre.scrollBy(-2000,0)");