1

I want to iterate through this table and need to get a text from each row like text inside td= health1, health 2 and health 3, similarly, I need text inside the state.Hoe can I do that

<table id="TableFormtable" class="datatable" summary=" Server ">
    <tbody>
        <tr>
            <th title="Sort table by Name" scope="col"></th>
            <th title="Sort table by clusterName" scope="col"></th>
            <th title="Sort table by Machine" scope="col"></th>
            <th title="Sort table by State" scope="col"></th>
            <th title="Sort table by Health" scope="col"></th>
            <th title="Sort table by port" scope="col"></th>
        </tr>
        <tr class="rowEven">
            <td id="name1" scope="row"></td>
            <td id="clusterName1"></td>
            <td id="machineName1"></td>
            <td id="state1"></td>
            <td id="health1"></td>
            <td id="port1"></td>
        </tr>
        <tr class="rowOdd">
            <td id="name2" scope="row"></td>
            <td id="clusterName2"></td>
            <td id="machineName2"></td>
            <td id="state2"></td>
            <td id="health2"></td>
            <td id="port2"></td>
        </tr>
        <tr class="rowEven">
            <td id="name3" scope="row"></td>
            <td id="clusterName3"></td>
            <td id="machineName3"></td>
            <td id="state3"></td>
            <td id="health3"></td>
            <td id="port3"></td>
        </tr>
    </tbody>
</table>

I am using

 List<WebElement> allRows = utils
                .findElements(By.xpath("//table[@id='genericTableFormtable']/tbody/tr[@id='rowEven' or @id='rowOdd']"));

after this step how can I iterate to each row and get the respective values.

1 Answer 1

1

To create a List with the id attributes or the innerTexts using Java8's stream() and map() you can use the following based Locator Strategies:

  • Printing the id attributes:

    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//table[@id='TableFormtable']/tbody//tr[@class='rowEven' or @class='rowOdd']//td[starts-with(@id, 'health')]"))).stream().map(element->element.getAttribute("id")).collect(Collectors.toList()));
    
  • Printing the innerText attributes:

    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//table[@id='TableFormtable']/tbody//tr[@class='rowEven' or @class='rowOdd']//td[starts-with(@id, 'health')]"))).stream().map(element->element.getText()).collect(Collectors.toList()));
    
Sign up to request clarification or add additional context in comments.

2 Comments

Thank you it worked, Can you explain what is this doing after we use .stream
@joshua Once you collected the desired nodes with id attribute starting with health, to get the text you simply need to invoke getText() method. We created a List with those desired texts and printed it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.