Come scorrere un determinato DIV utilizzando Selenio WebDriver con Java?

Alcuni di WebElements non sono riconosciuti da WebDriver, WebDriver non riesce a trovare l’elemento che non è visibile nel browser dell’area visibile.

Per rendere il WebElement visualizzabile da WebDriver, Abbiamo bisogno di rendere tale elemento visibile nel browser, per fare scorrere verso il basso in particolare div!Come scorrere un determinato DIV utilizzando Selenio WebDriver con Java?

Come posso svolgere la mia azione(scorrere verso il basso e fare clic) sulla zona particolare della mia pagina web. Ho cercato molto, non mi ha aiutato.

Prego di aiutarmi a risolvere il mio problema.

  • Si prega di controllare , ho modificato la mia risposta. Prova questo : JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(“javascript:window.scrollBy(250,350)”);
  • L’immagine mostrata qui sembra una ListBox. In che u possibile selezionare più valori. Controllare che tipo di elemento html è. per esempio:- (Verificare se si tratta di un elemento Select). Se si tratta di un elemento di selezione, Perché non usare Selezionare obj = new Selezionare(elemento); obj.SelectByText(“Australia”). E se vuoi selezionare più valori anticipo per il ciclo in java per raggiungere lo stesso
InformationsquelleAutor pandiaraj | 2014-11-28

 

9 Replies
  1. 9

    Prima di tutto, la maggior parte delle risposte pubblicate qui sono appena fuori l’argomento. Ho lavorato con selenio 2 e selenio 3 ora, il webdriver in grado di gestire finestra di scorrimento per rendere un elemento visibile.

    Per tutti postando notizie come:

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

    non si ottiene la questione a tutti!

    In realtà non riuscivo ancora a trovare un modo per simulare correttamente l’azione di trascinamento di scorrimento gestire, ma questa risposta sembra promettente — ma non ho provato.

    Così finora personalmente ci sono due modi per fare questo per me:

    1. Utilizzare Keys.ARROW_DOWN
    2. Utilizzare Keys.PAGE_DOWN

    In realtà c’è una terza via, basta rinunciare selenio e contattare il sito se forniscono API.

    • Corretto. Anche per element.send_keys(Keys.PAGE_DOWN), elemento deve inserire sullo schermo, altrimenti il Selenio può rifiutare la send_keys() comando.
    • FYI questa risposta non lavoro in C#. Il driver restituisce “impossibile elemento attivo” eccezione, perché si sta cercando di utilizzare la SendKeys su qualcosa di diverso da un campo di testo. Facendo clic su un elemento per dare il focus non ha alcun effetto. In questo caso, sembra che javascript può ancora essere la migliore scommessa….
  2. 7

    Scorrere Verso Il Basso:

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

    Scorrere verso l’alto:

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

    Scorrere in fondo alla Pagina:

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

    o

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

    Pieno di scorrimento verso il basso in slow motion:

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

    o

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

    Scorrere automaticamente al tuo 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)

    o

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

    o

    WebElement element = driver.findElement(By.xpath("Value"));
    Coordinates coordinate = ((Locatable)element).getCoordinates(); 
    coordinate.onPage(); 
    coordinate.inViewPort();
    • Questo è solo un copia-incolla di lavoro di ogni esempio di scorrimento, la maggior parte dei quali sono del tutto irrilevante per la questione. La questione è di circa lo scorrimento di una specifica div non lo scorrimento della finestra stessa.
    • Shinde: sei sicuro di aver ben capito la domanda? L’autore ha chiesto come scorrere il contenuto all’interno di un determinato div e appena copiato qui tutti i possibili modi per scorrere la finestra principale di contenuto che non aiuta.
    • Come potrebbe rispondere così tanto fino rating?, la sua irrilevante per la questione
    • Quest’ultimo ha lavorato per me. Anche io ho trovato la soluzione qui sqa.stackexchange.com/a/17480/30196.
    • Questo è un pat rispondere e non rispondere alla domanda posta e non dovrebbe mai essere stato con voto positivo.
  3. 6

    Il modo più semplice per farlo è l’esecuzione del Javascript per scorrere l’elemento su/giù.

    JavascriptExecutor jsExec = (JavascriptExecutor) driver;
    jsExec.executeScript("document.getElementById('id').scrollDown += 100");
    • Volevi dire scrollTop invece di scrollDown ? (attualmente lavorando con chrome)
  4. 3
    driver.get("http://www.***.com/");
    driver.manage().window().maximize();
    WebElement scroll = driver.findElement(By.id("someId"));
    scroll.sendKeys(Keys.PAGE_DOWN);
    • Sto usando i Tasti.GIÙ per scorrere, ma come puoi identificare che lo scorrimento è caricato di nuovi elementi da una chiamata ajax? Problema che sto affrontando è, prima ancora di Chiavi.GIÙ le finiture (no nuovi elementi caricati), il mio script recupera il vecchio set di elemento div.
    • Questo non funzionerà se il “someId” elemento non è possibile ottenere la messa a Fuoco.
    • Ok, ma che impedisce di attesa il tempo fino a quando tutti gli elementi dom avrà scaricato? Oppure fare clic sul pulsante o un link che apre elementi nascosti?
    • Grazie. Questa soluzione è stata l’unica che ha funzionato per me oggi. Con voto positivo.
  5. 2

    Un altro modo di farlo utilizzando JavascriptExceutor‘s scrollIntoView() metodo:

    WebElement DIVelement = driver.findElement(By.xpath("xpath to div"));
    
    JavascriptExecutor jse = (JavascriptExecutor)driver;
    jse.executeScript("arguments[0].scrollIntoView(true)". DIVelement);
  6. 1

    Prima si dovrebbe fare scorrere piuttosto che trovare un elemento in modo da fare come di seguito :

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

    Dopo sopra è possibile trovare quello specifico div.

    Puoi anche provare qui sotto :

    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("javascript:window.scrollBy(250,350)");
  7. 0

    Considerare il tuo HTML, come di seguito:

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

    si può osservare style attributo in div
    verificare il valore di top che è 0px nell’esempio sopra

    Ora di provare a fare qualcosa di simile:

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

    che vi aiuterà a scorrere verso il basso.
    La sua JavaScript esecutore ovviamente è necessario per la sua attuazione.

  8. 0

    Nessuna delle risposte per me ha funzionato, però ho trovato una soluzione basata su questo post.

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

    dove divWithScrollbarElement è l’elemento div che si sta cercando di scorrimento, e elementToScrollTo è l’elemento che si desidera rendere visibile (che nel mio caso era in realtà il padre dell’elemento che mi è stato inizialmente il tentativo di vista). Se elementToScrollTo in realtà non è nel DOM di sicurezza, potrebbe essere necessario utilizzare lo script una volta per scorrere verso il basso, per quanto possibile, e poi di nuovo una volta di più elementi caricati.

Lascia un commento