Pagina scorrere verso l’alto o verso il basso in Selenium WebDriver (Selenium 2) utilizzando java

Ho scritto il seguente codice in Selenium 1 (aka Selenium RC) per lo scorrimento delle pagine usando java:

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

Qual è il codice equivalente in Selenium 2 (WebDriver)?

Per scorrere verso il basso :

 WebDriver driver = new FirefoxDriver(); JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("window.scrollBy(0,250)", ""); 

O, puoi fare come segue:

 jse.executeScript("scroll(0, 250);"); 

Per scorrere verso l’alto :

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

Scorrere verso il basso di una pagina:

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

Ci sono molti modi per scorrere su e giù in Selenium Webdriver. Io uso sempre Java Script per fare lo stesso.

Di seguito è riportato il codice che funziona sempre per me se voglio scorrere verso l’alto o verso il basso

  // This will scroll page 400 pixel vertical ((JavascriptExecutor)driver).executeScript("scroll(0,400)"); 

È ansible ottenere il codice completo da qui scorrere la pagina in selenium

Se vuoi scorrere per un elemento, allora sotto il codice funzionerà per te.

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

Otterrai il documento completo qui Scorri per un elemento specifico

Questa potrebbe non essere una risposta esatta alla tua domanda (in termini di WebDriver), ma ho scoperto che la libreria java.awt è più stabile di selenium.Keys . Quindi, un’azione di riduzione della pagina che utilizza il primo sarà:

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

Scorri in basso:

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

Scorrere verso l’alto:

 js.executeScript("window.scrollTo(0, -document.body.scrollHeight);"); 

Non volevo usare JavaScript o alcuna libreria esterna, quindi questa era la mia soluzione (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(); 

Puoi anche facilmente rendere questo un metodo di estensione per scorrere verso l’alto o verso il basso su qualsiasi elemento.

Prova questo

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

Dovresti aggiungere una scroll alla pagina per selezionare tutti gli elementi usando Selenium.executeScript("window.scrollBy(0,450)", "") .

Se si dispone di un elenco di grandi dimensioni, aggiungere lo scorrimento più volte durante l’esecuzione. Nota: lo scorrimento si sposta solo su un determinato punto della pagina, ad esempio (0,450).

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

Questo codice funziona per me. Come la pagina che sto testando, carica mentre scorri verso il basso.

L’esecutore di Javascript esegue sempre perfettamente il lavoro:

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

dove (0,300) sono rispettivamente le distanze orizzontali e verticali. Metti le distanze secondo le tue esigenze.

Se sei un perfezionista e ti piace ottenere la distanza esatta che ti piace scorrere fino al primo tentativo, usa questo strumento, MeasureIt . È un brillante componente aggiuntivo per Firefox.

Grazie per la risposta di Ripon Al Wasim. Ho fatto dei miglioramenti. a causa di problemi di rete, riprovo tre volte fino al ciclo di interruzione.

 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