it-swarm.com.de

Wie scrollen Sie ein bestimmtes DIV mit Selenium WebDriver mit Java?

Einige WebElements werden von WebDriver nicht erkannt. WebDriver kann das Element nicht finden, das im sichtbaren Bereich des Browsers nicht sichtbar ist.

Damit das WebElement von WebDriver angezeigt werden kann, müssen wir dieses Element in der Browser-Ansicht sichtbar machen, um einen Bildlauf nach unten in einem bestimmten div durchzuführen!

Wie kann ich meine Aktion für einen bestimmten Bereich meiner Webseite ausführen (nach unten scrollen und klicken)? Ich habe viel versucht, hat mir nicht geholfen. 

Bitte helfen Sie mir, mein Problem zu lösen.

21
pandiaraj

Runterscrollen:

import org.openqa.Selenium.JavascriptExecutor;
WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("scroll(0, 250)"); //y value '250' can be altered

Hochscrollen:

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("scroll(250, 0)"); //x value '250' can be altered

Bildlauf unten auf der Seite:

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

oder

Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.END).perform();

Vollbildlauf in Zeitlupe nach unten:

for (int second = 0;; second++) {
    if(second >=60){
        break;
    }
    ((JavascriptExecutor) driver).executeScript("window.scrollBy(0,400)", ""); //y value '400' can be altered
    Thread.sleep(3000);
}

oder

JavascriptExecutor jse = (JavascriptExecutor)driver;
for (int second = 0;; second++) {
    if(second >=60){
        break;
    }
    jse.executeScript("window.scrollBy(0,800)", ""); //y value '800' can be altered
    Thread.sleep(3000);
}

Scrollen Sie automatisch zu Ihrem WebElement:

Point hoverItem =driver.findElement(By.xpath("Value")).getLocation();
((JavascriptExecutor)driver).executeScript("return window.title;");    
Thread.sleep(6000);
((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+(hoverItem.getY())+");"); 
// Adjust your page view by making changes right over here (hoverItem.getY()-400)

oder

((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", driver.findElement(By.xpath("Value')]")));

oder

WebElement element = driver.findElement(By.xpath("Value"));
Coordinates coordinate = ((Locatable)element).getCoordinates(); 
coordinate.onPage(); 
coordinate.inViewPort();
8
Rupesh Shinde

Zuallererst sind die meisten Antworten, die hier veröffentlicht wurden, nur außerhalb des Themas. Ich habe jetzt mit Selenium 2 und Selenium 3 gearbeitet. Der Web-Treiber kann Fenster-Scrollen ausführen, um ein Element sichtbar zu machen.

Für alle, die Snippets posten:

driver.execute_script('scrollBy(0, 250)')

sie bekommen die Frage überhaupt nicht!

Eigentlich habe ich immer noch keinen Weg gefunden, die Drag-Aktion des Scroll-Handles richtig zu simulieren, aber diese Antwort scheint vielversprechend -, aber ich habe es nicht versucht.

Bisher gibt es persönlich zwei Möglichkeiten, dies für mich zu tun:

  1. Verwenden Sie Keys.ARROW_DOWN
  2. Verwenden Sie Keys.PAGE_DOWN

Eigentlich gibt es einen dritten Weg, geben Sie einfach Selenium ab und kontaktieren Sie die Website, wenn sie eine API bereitstellen.

8
Junchao Gu

Der einfachste Weg, dies zu tun, ist Ausführen eines Javascript zum Scrollen des Elements auf/ab.

JavascriptExecutor jsExec = (JavascriptExecutor) driver;
jsExec.executeScript("document.getElementById('id').scrollDown += 100");
6
Marcelo Xavier
driver.get("http://www.***.com/");
driver.manage().window().maximize();
WebElement scroll = driver.findElement(By.id("someId"));
scroll.sendKeys(Keys.PAGE_DOWN);
3
Pavel Kononenko

Zuerst sollten Sie einen Bildlauf durchführen, anstatt ein Element zu finden.

document.getElementById("your div id").scrollTop(250);

Nach oben können Sie das spezifische div finden.

Sie können auch unten versuchen:

    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("javascript:window.scrollBy(250,350)");
2
Helping Hands

Eine andere Möglichkeit, dies mit der scrollIntoView()-Methode von JavascriptExceutor zu tun:

WebElement DIVelement = driver.findElement(By.xpath("xpath to div"));

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("arguments[0].scrollIntoView(true)". DIVelement);
2
kushal.8

Mein 'WORKAROUND' ist es, durch die x- und y-Koordinate des Elements zur Position zu scrollen. Ich habe auch einen Versatz zu y hinzugefügt, damit Kopf-/Fußzeilen oder andere Elemente die Sichtbarkeit des Elements nicht blockieren, zu dem ich scrollen möchte.

Ich habe meine Antwort unter dieser Frage gepostet - 

Selenium webdriver kann nicht auf einen Link außerhalb der Seite klicken

0
yuva

Betrachten Sie Ihr HTML wie folgt:

<div id="someId" class="className" style="position: relative; top: 0px; left: opx;>

sie können das style-Attribut in div.__ beobachten. Überprüfen Sie, ob der Wert von top im obigen Beispiel 0px ist

Versuchen Sie jetzt etwas zu tun:

$('.className').animate({top: "-60px"});

das hilft Ihnen, nach unten zu scrollen ... Es ist ein JavaScript-Executor, also müssen Sie ihn natürlich implementieren.

0
Gaurav Lad

Keine der geposteten Antworten funktionierte für mich, jedoch habe ich eine Lösung gefunden, die auf diesem Beitrag basiert.

((JavascriptExecutor) driver).executeScript(
    "arguments[0].scrollTop=arguments[1].offsetTop",
    divWithScrollbarElement,
    elementToScrollTo);

dabei ist divWithScrollbarElement das div-Element, das Sie scrollen möchten, und elementToScrollTo ist das untergeordnete Element, das Sie sichtbar machen möchten (das in meinem Fall eigentlich das übergeordnete Element des Elements war, das ich ursprünglich anzeigen wollte). Wenn sich elementToScrollTo noch nicht wirklich im DOM befindet, müssen Sie das Skript möglicherweise einmal verwenden, um einen Bildlauf nach unten durchzuführen, und dann erneut, wenn weitere Elemente geladen wurden.

0
Dave