2015-07-15 1 views
5

Ciao, sto cercando di individuare più elementi con lo stesso className. Il className e la struttura del corpo degli elementi sono gli stessi, ma i testi, i collegamenti e le immagini sono diversi.Selenium: individuazione di più elementi con lo stesso nome di classe

<div class="dc-content-right clearfix"> (parent) 
    <div class="dc-item clearfix">  (child nodes) 
    <div class="dc-item clearfix"> 
    <div class="dc-item clearfix"> 

Ognuno di questi elementi bambino sembra qualcosa di simile:

<div class="dc-item clearfix"> 
    <div class="dc-icon"> 
    <div class="dc-info"> 
    <h2> 
     <a href="http://www.avg.com/ww-en/free-antivirus-download">AVG AntiVirusFree 2015</a> 
    </h2> 

Ogni elemento bambino ha testo diverso nel tag H2. Quindi, una volta che AVG AntiVirus è stato rilasciato nel 2015, allora è Internet Security .... e così via. Quindi quello che voglio fare è salvare tutti gli elementi in una lista e poi lavorare con loro. All'inizio ho salvare questi elementi intto una lista di WebElements:

List <"WebElement"> list = driver.findElements(By.xpath("//div[@class='dc-item clearfix']")); 

Poi voglio scorrere la lista e scrivere il testo h2 per ogni elemento sullo schermo:

for(WebElement i:superDiv) 
      { 
       System.out.println(i.findElement(By.xpath("//h2/a")).getText()); 
      } 

Così il risultato dovrebbe essere un elenco di 3 titoli diversi estratti da divs. Il problema : il risultato è l'elenco di 3 titoli che sono lo stesso!

AVG AntiVirus Free 2015 
AVG AntiVirus Free 2015 
AVG AntiVirus Free 2015 

Sembra che abbia localizzato lo stesso elemento 3 volte. Qualcuno ha un'idea di quale potrebbe essere il problema? Grazie

risposta

4
List<WebElement> list = driver.findElements(By.xpath(".//*[@class='dc-item clearfix']//h2/a")); 
    for(WebElement el : list) { 
     System.out.println(el.getText()); 
    } 
+0

Grazie, che scriverà tutto il testo si può trovare in un elemento figlio, (collegamenti, descrizioni, intestazione ...) vorrei piace accedere solo al tag h2. – Zawe

+0

ya, ho letto male la domanda. Ho aggiornato xpath da allora, funziona quello nuovo? – Cathal

+0

Sì, funziona. Grazie. Ma l'intero punto era .. è possibile prima salvare l'intero elemento figlio. Elenco <"WebElement"> list = driver.findElements (By.xpath ("// div [@ class = 'dc-item clearfix']")); e poi accedere alle diverse parti di esso. Qualcosa come list.get (1) .findElement (By.xpath ("// h2/a")). GetText(). Sai che qualcosa del genere è persino possibile? – Zawe

1

Si può anche provare: -

List<WebElement> list = driver.findElements(By.xpath(".//*[@class='dc-info']//a")); 
    for(WebElement element : list) { 
     System.out.println(element.getText()); 
    }