2015-07-15 27 views
5

Witaj, próbuję zlokalizować wiele elementów z tą samą nazwą klasy. Klasa nazwa i struktura elementów są takie same, ale teksty, linki i obrazy są różne.Selen - lokalizowanie wielu elementów o tej samej nazwie klasy

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

Każdy z tych elementów podrzędnych wygląda mniej więcej tak:

<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> 

Każdy element dziecko ma inny tekst w tagu H2. Więc kiedy już jest AVG AntiVirus Free 2015, to jest Internet Security .... i tak dalej. Tak więc chcę zapisać wszystkie elementy na liście, a następnie pracować z nimi. Początkowo zapisać te elementy intto listy WebElements:

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

Następnie chcę iterację listy i napisać tekst h2 dla każdego elementu na ekranie:

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

Rezultatem więc powinna być lista 3 różnych nagłówków wyodrębnionych z divs. The problem: wynikiem jest lista 3 nagłówków, które są tego samego!

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

Wygląda na to, że zlokalizowałem ten sam element 3 razy. Czy ktoś ma pomysł, co może być problemem? Dziękuję

Odpowiedz

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

Dziękuję, że będzie napisać cały tekst można go znaleźć w elemencie dziecięcej (linki, opisy, nagłówek ...) bym lubię uzyskiwać dostęp tylko do znacznika h2. – Zawe

+0

ya, źle odczytałem pytanie. Mam zaktualizowane xpath od, czy nowy działa? – Cathal

+0

Tak, to działa. Dziękuję Ci. Ale chodziło o to, że ... można najpierw zapisać cały element potomny. Lista <"WebElement"> list = driver.findElements (By.xpath ("// div [@ class = 'dc-item clearfix']")); , a następnie dostęp do różnych części. Coś takiego jak list.get (1) .findElement (By.xpath ("// h2/a")). GetText(). Czy wiesz, że coś takiego jest możliwe? – Zawe

1

Można też spróbować: -

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