Come iterare un elenco di WebElement e stampare i valori uno per uno per eseguire un'azione

  • List allLinks = driver.findElements(By.xpath("//div[@class='datepicker']/div/table/tbody/tr/td/table/tbody[2]/tr/td[@class='' or @class='datepickerSaturday' or @class='datepickerSunday']/a/span"));
    
    Iterator itr = allLinks.iterator();
    while(itr.hasNext()) {
        System.out.println(itr.next());
    }
    

    Voglio stampare gli elementi dell'elenco uno per uno ed eseguire alcune azioni. Ma non riesco a ottenere il valore presente nell'elenco.

    Questo è quello che ottengo in console:

    [[FirefoxDriver: firefox su MAC (81e15827-9357-0341-9c72-5b26054f780d)]

    Xpath: -

    //div[@class='datepicker']/div/table/tbody/tr/td/table/tbody[2]/tr/td[@class='' or @class='datepickerSaturday' or @class='datepickerSunday']/a/span]
    

    Stampa il primo valore nell'elenco. Dovrebbe essere posizionato al posto di LISTVALUE nel seguente xpath // div [@ class = 'datepicker'] / div / table / tbody / tr / td / table / tbody [2] / tr / td [@ class = '' o @ class = 'datepickerSaturday' o @ class = 'datepickerSunday'] / a / span [contiene (text (), "LISTVALUE")] per eseguire l'azione di clic

  • Ecco un buon esempio di come seleziono da un menu a discesa:

    public Boolean selectByText( String text ) {
        WebElement dropDown = driver.findElement( By.xpath( ".//dropdown/path" ) );
        dropDown.click();
        List allOptions = dropDown.findElements(By.xpath(".//option"));
        for ( WebElement we: allOptions) { 
            dropDown.sendKeys( Keys.DOWN ); //simulate visual movement
            sleep(250);       
            if ( we.getText().contains( text ) ) select.selectByVisibleText("Value1");
        }
    }
    

    Qual è il motivo per utilizzare il metodo `sleep ()`?

    Quando simuli l'esperienza di un utente che esegue i tasti di scelta rapida su un menu a discesa, non vuoi che vada così velocemente da poterlo vedere.

    Ahh, quindi questo è solo per la demo. Capisco che questo funzionerà anche senza dormire, in modo che durante l'esecuzione di _x_ test (_x_> 1000), il loro tempo di esecuzione non sia inutilmente anticipato.

    Giusto. Quando eseguo i test, registro video ed eseguo il multi-thread e quindi la velocità non conta molto per me. Pertanto questa tecnica è davvero utile per il debug utilizzando la riproduzione video.

  • Ti sta dando l'elemento web semplicemente metti .getText () ogni volta che vedi tale codice. Fare-

    Iterator itr = allLinks.iterator();
    while(itr.hasNext()) {
        System.out.println(itr.next().getText());
    }
    

    Ok, questa domanda è stata posta anni fa e l'ho vista ora

    Va bene, non c'è mai un brutto momento per una grande risposta. La domanda è: è un'ottima risposta? Sento che potrebbe usare più amore prima che sia una * ottima * risposta. =)

    potrebbe `ListIterator` essere più specifico? Punti bonus immaginari per l'utilizzo di "hasNext".

  • @sathiya: Che tipo di elenco vuoi iterare (Dropdown..etc)?

    Di seguito è riportato il metodo per ottenere i dati dalla tabella. Spero che questo ti possa aiutare.

    WebElement table = driver.findElement(By.xpath("your path"));
    List rows = table.findElements(By.tagName("your tagName"));
    java.util.Iterator i = rows.iterator();
    while(i.hasNext()) {
        WebElement row = i.next();
        System.out.println(row.getText());
    }
    

    Per l'iterazione dell'elenco a discesa è possibile utilizzare il codice sottostante.

    List drop = driver.findElements(By.name("customerId"));
    java.util.Iterator i = drop.iterator();
    while(i.hasNext()) {
        WebElement row = i.next();
        System.out.println(row.getText());
    } 
    

    Per le date che si trovano all'interno di una tabella. Xpath per table- / html / body / div [4] / div / div [2] / div [3] / div / div [5] / div [2] / div / ul / li / div / div / div / table / tbody / tr / td / table. Non voglio che tutte le righe vengano stampate, perché nella pagina saranno disponibili solo le date future. Il percorso X comune per le date sarà - "// div [@ class = 'datepicker'] / div / table / tbody / tr / td / table / tbody [2] / tr / td [@ class = '' o @class = "datepickerSaturday" o @ class = "datepickerSunday"] / a / span ". Come stampare i valori per questo caso.

    @sathiya Potresti fornire l'URL dell'applicazione o dare un'applicazione di esempio in modo che possiamo aggirare. E per favore elabora la tua domanda. Quando ho usato il codice sopra nella mia applicazione ho ottenuto tutte le date (che vengono visualizzate tutte). Risultato: 'Lu Ma Me Gi Ve Sa Su 24 25 26 27 28 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 6 '

    List myList = myDriver.findElement (By.xpath ("")); System.out.println (myList.size ()); for (int i = 0; i

  •  List elements = driver.findElements(By.xpath("//ul[@id='ctl00_MainContent_view1Extender_SearchBarAutoComplete2_2_completionListElem']//li"));
        java.util.Iterator program = elements.iterator();
        while (program.hasNext()) {
            String values = program.next().getText();
    
            if(!values.equals("null"))
            {
                testStepPassed("Field should display all the Programs defined for the provider " +values);
            }
            else
            {
                testStepFailed("Field is not display all the Programs defined for the provider ");
            }
    
        }
    

    Cosa aggiunge questo alle risposte esistenti e accettate? Per una risposta a una vecchia domanda è utile aggiungere più del semplice codice.

    Ehi JaiHind! cosa fa questo codice? come è meglio della risposta accettata?

  • Inserisci System.out.println (itr.next (). GetAttribute ("src"));

    List allLinks = driver.findElements (By.xpath ("// div [@ class = 'datepicker'] / div / table / tbody / tr / td / table / tbody [2] / tr / td [@ class = '' o @ class = 'datepickerSaturday' o @ class = 'datepickerSunday'] / a / span "));
    
    Iteratore itr = allLinks.iterator ();
    while (itr.hasNext ()) {
        System.out.println (itr.next () **. GetAttribute ("src") **);
    
    }
    

Licenza sotto CC-BY-SA con attribuzione


Contenuto datato prima del 26/06/2020 09:53