Blättern Sie in Selenium WebDriver (Selenium 2) mit Java nach oben oder unten

72

Ich habe den folgenden Code in Selenium 1 (auch bekannt als Selenium RC) für das Scrollen von Seiten mit Java geschrieben:

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

Was ist der entsprechende Code in Selenium 2 (WebDriver)?

Ripon Al Wasim
quelle

Antworten:

113

Szenario- / Testschritte:
1. Öffnen Sie einen Browser und navigieren Sie zu TestURL.
2. Scrollen Sie einige Pixel nach unten und nach oben

Zum Scrollen nach unten :

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

ODER Sie können wie folgt vorgehen:

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

Zum Scrollen nach oben :

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

Scrollen Sie zum Ende der Seite:

Szenario- / Testschritte:
1. Öffnen Sie einen Browser und navigieren Sie zu TestURL.
2. Scrollen Sie zum Ende der Seite

Weg 1: Mit JavaScriptExecutor

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

Weg 2: Durch Drücken von Strg + Ende

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL, Keys.END);

Weg 3: Mit der Java Robot-Klasse

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_END);
robot.keyRelease(KeyEvent.VK_END);
robot.keyRelease(KeyEvent.VK_CONTROL);
Ripon Al Wasim
quelle
Der obige Code dient zum Scrollen nach unten. Zum Scrollen nach oben: jse.executeScript ("scroll (250, 0)"); Nur der Wert wäre umgekehrt
Ripon Al Wasim
12
Nein - das wird nach rechts scrollen. Scrollen Sie nach obenscroll(0,-250)
Stephen
Danke Stephen. Sowohl der Bildlauf (250,0) als auch der Bildlauf (0, -250) sollten für den Bildlauf nach oben funktionieren.
Ripon Al Wasim
3
Für den Bildlauf ist (0, -250) logisch. Ich stimme Stephen zu.
Ripon Al Wasim
jse.executeScript ("window.scrollBy (0,250)", ""); es funktioniert gut. Ich möchte eine Variable als int y = 250 verwenden. jse.executeScript ("window.scrollBy (0, y)", ""); Ein Fehler wird in diesem Fall als "y ist nicht definiert" angezeigt. Wie verwende ich in diesem Fall die Variable?
Ripon Al Wasim
42

Zum Ende einer Seite scrollen:

JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
user3472488
quelle
1
nur um zu erwähnen, es ist zum Scrollen nach unten
Tarun
Es funktioniert nicht in meiner Salesforce-Anwendung, in der window.scrollBy (0,250) funktioniert. Es wird jedoch nicht zum Ende der Seite gescrollt.
Ashok Kumar Ganesan
15

Es gibt viele Möglichkeiten, in Selenium Webdriver nach oben und unten zu scrollen. Ich verwende immer Java Script, um dasselbe zu tun.

Unten ist der Code, der immer für mich funktioniert, wenn ich nach oben oder unten scrollen möchte

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

Den vollständigen Code erhalten Sie hier. Bildlaufseite in Selen

Wenn Sie nach einem Element scrollen möchten, funktioniert der folgende Code für Sie.

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

Das vollständige Dokument erhalten Sie hier. Blättern Sie für ein bestimmtes Element

Mukesh Otwani
quelle
Das hat funktioniert, wenn ich nach unten scrollen muss. Wie kann ich die Seite nach oben scrollen?
RV_Dev
Der erste Codeausschnitt scrollt nur die Seite, nicht das Element selbst. Wie kann ich das tun?
Harvey Lin
11

Dies ist möglicherweise keine genaue Antwort auf Ihre Frage (in Bezug auf WebDriver), aber ich habe festgestellt, dass die java.awtBibliothek stabiler ist als selenium.Keys. Eine Aktion zum Abblättern mit der ersteren lautet also:

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
rs79
quelle
Ich habe Robot vorher nicht benutzt. Aber ich kann versuchen zu benutzen. Danke rs79
Ripon Al Wasim
Arbeitete für mich, ohne Schlaf
Tomsv
3
JavascriptExecutor js = ((JavascriptExecutor) driver);

Runterscrollen:

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

Hochscrollen:

js.executeScript("window.scrollTo(0, -document.body.scrollHeight);");
Schöpfer
quelle
2

Versuche dies

        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);
        }
Maddy
quelle
1
Ich mag das eigentlich, da es einen
Bildlauf durchführt,
1

Ich wollte kein JavaScript oder externe Bibliotheken verwenden, daher war dies meine Lösung (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();

Sie können dies auch einfach zu einer Erweiterungsmethode machen, um auf einem beliebigen Element nach oben oder unten zu scrollen.

KthProg
quelle
@raffamaiden setzen Köpfe auf Ihren Browser lol ... Ich bin nicht sicher, warum jemand gegen einen Browser testen möchte, dass seine Benutzer sowieso nicht verwenden werden
KthProg
Du hast recht. Das OP hat jedoch nicht angegeben, dass eine App getestet wird. Sie können Selen auch für andere Zwecke verwenden (z. B. Webscraping).
Raffaem
Guter Punkt, mein Herr. Ich habe nicht an diese Art von Anwendungsfall gedacht.
KthProg
0

Sie sollten der Seite einen Bildlauf hinzufügen, um alle Elemente mit auszuwählen Selenium.executeScript("window.scrollBy(0,450)", "").

Wenn Sie eine große Liste haben, fügen Sie die Schriftrolle während der Ausführung mehrmals hinzu. Beachten Sie, dass die Schriftrolle beispielsweise nur zu einem bestimmten Punkt auf der Seite führt (0,450).

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

Dieser Code funktioniert für mich. Die Seite, die ich teste, wird geladen, wenn wir nach unten scrollen.

Latha
quelle
0

Javascript Executor macht den Job immer perfekt:

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

Wo (0,300)sind die horizontalen bzw. vertikalen Abstände. Stellen Sie Ihre Entfernungen gemäß Ihren Anforderungen ein.

Wenn Sie ein Perfektionist sind und beim ersten Versuch genau die Entfernung ermitteln möchten, bis zu der Sie scrollen möchten , verwenden Sie dieses Tool, MeasureIt . Es ist ein brillantes Firefox-Add-On.


quelle
0

Vielen Dank für die Antwort von Ripon Al Wasim. Ich habe mich verbessert. Aufgrund von Netzwerkproblemen versuche ich es dreimal bis zur Unterbrechung der Schleife.

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
Ivan
quelle
0

1.Um die Seite nach unten zu scrollen, verwenden Sie window.scrollTo (0, document.body.scrollHeight) als Parameter

// Code, um nach unten zu navigieren

WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollHeight));

2.Um die Seite nach oben zu scrollen, verwenden Sie window.scrollTo (0, document.body.scrollTop) als Parameter

// Code, um nach oben zu navigieren

WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollTop));

3.Um die Seite nach links zu scrollen, verwenden Sie window.scrollTo (0, document.body.scrollLeft) als Parameter

// Code, um nach links zu navigieren

WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollLeft));

4.Um zu einem bestimmten Punktfenster zu scrollen.scrollTo (0,500) als Parameter

// Code zum Navigieren zu einem bestimmten Punkt, z. B. 500, wird hier als Wert übergeben

WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,500));

Um die Navigation direkt im Browser zu überprüfen, öffnen Sie das Entwicklertool im Browser und navigieren Sie zur Konsole. Führen Sie den Befehl auf der Konsole window.scrollTo (0,400) aus. Geben Sie hier die Bildbeschreibung ein

shiv
quelle
0

JavascriptExecutor ist am besten, um eine Webseite nach unten zu scrollen. Die window.scrollToFunktion in JavascriptExecutor kann dies tun

JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0,100"); 

Der obige Code wird um 100 y-Koordinaten nach unten gescrollt

Whizdom-Schulungen
quelle
0
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)");
AnaGuzman
quelle
-1
  1. Wenn Sie die Seite vertikal scrollen möchten, um eine Aktion auszuführen, können Sie dies mit dem folgenden JavaScript tun. ((JavascriptExecutor) Treiber) .executeScript ("window.scrollTo (0, document.body.scrollHeight)");

        Where ‘JavascriptExecutor’ is an interface, which helps executing JavaScript through Selenium WebDriver. You can use the following code to import.
    

import org.openqa.selenium.JavascriptExecutor;

2.Wenn Sie zu einem bestimmten Element scrollen möchten, müssen Sie das folgende JavaScript verwenden.

WebElement element = driver.findElement (By.xpath ("// input [@ id = 'email']")); ((JavascriptExecutor) Treiber) .executeScript ("Argumente [0] .scrollIntoView ();", Element) ;;

Wobei 'Element' der Locator ist, in den Sie scrollen möchten.

3.Wenn Sie an einer bestimmten Koordinate scrollen möchten, verwenden Sie das folgende JavaScript.
((JavascriptExecutor) Treiber) .executeScript ("window.scrollBy (200,300)"); Wobei '200.300' die Koordinaten sind.

4.Wenn Sie in vertikaler Richtung nach oben scrollen möchten, können Sie das folgende JavaScript verwenden. ((JavascriptExecutor) Treiber) .executeScript ("window.scrollTo (document.body.scrollHeight, 0)");

  1. Wenn Sie horizontal in die richtige Richtung scrollen möchten, verwenden Sie das folgende JavaScript. ((JavascriptExecutor) Treiber) .executeScript ("window.scrollBy (2000,0)");

  2. Wenn Sie horizontal nach links scrollen möchten, verwenden Sie das folgende JavaScript. ((JavascriptExecutor) Treiber) .executeScript ("window.scrollBy (-2000,0)");

Tapan Khimani
quelle