Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selenium - locating multiple elements with the same class name

Tags:

selenium

Hello there I am trying to locate multiple elements with the same className. The className and the body structure of the elements are the same but the texts, links and pictures are different.

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

Each of these child elements looks something like this:

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

Each child element has different text in the H2 tag. So once it is AVG AntiVirus Free 2015, then it is Internet Security .... and so on. So what I want to do is save all elements into a list and then work with them. At first I save these elements intto a list of WebElements :

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

Afterwards I want to iterate through the list and write the h2 text for each element on the screen:

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

So the outcome should be a list of 3 different headings extracted from divs. The problem: the outcome is the list of 3 headings which are the same!

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

It looks like I located the same element 3 times. Does anyone have an idea what could be the problem? Thank you

like image 303
Zawe Avatar asked Jul 15 '15 08:07

Zawe


2 Answers

    List<WebElement> list = driver.findElements(By.xpath(".//*[@class='dc-item clearfix']//h2/a"));
    for(WebElement el : list) {
       System.out.println(el.getText());
    }
like image 140
Cathal Avatar answered Nov 15 '22 09:11

Cathal


You can also try:-

List<WebElement> list = driver.findElements(By.xpath(".//*[@class='dc-info']//a"));
    for(WebElement element : list) {
       System.out.println(element.getText());
    }
like image 29
Vishal Jagtap Avatar answered Nov 15 '22 09:11

Vishal Jagtap