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]
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"); } }
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.
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. =)
@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 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
STE 7 anni fa
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