Protractor : Read Table contents

28,485

Solution 1

Use all() in conjunction with map():

var row = element.all(by.repeater('item in items.list')).first();
var cells = row.all(by.tagName('td'));

var cellTexts = cells.map(function (elm) {
    return elm.getText();
});

Then, you can assert it to be an array of column texts:

expect(cellTexts).toEqual(["The first text", "The second text", "The third text"]);

Solution 2

Easiest way would be as below:

var tabledata = element.all(by.css("./table"));

// get rows 
var rows = tabledata.all(by.tagName("tr"));

// get cell values
var cells = rows.all(by.tagName("td"));

expect(cells.get(0).getText()).toEqual("something")
expect(cells.get(1).getText()).toEqual("something")
expect(cells.get(2).getText()).toEqual("something")

I implemented it and it is working for me.

Share:
28,485
JDunn
Author by

JDunn

Updated on July 09, 2022

Comments

  • JDunn
    JDunn almost 2 years

    I've been writing e2e tests for my angular js app and am unable to figure this out. I've got a table with data in it. I want to extract the first rows data.

    <table>
        <tr>
            <td><\td>
            <td><\td>
            <td><\td>
        </tr>
    </table>
    

    I did this in protractors elementExplorer and it prints out the values of all 3 columns

    element.all(by.repeater('item in items.list')).get(0).getText()
    James
    Byrne
    1
    

    If I do this, it prints out the first column value

    element.all(by.repeater('item in items.list')).get(0).element(by.css('td')).getText()
    WARNING - more than one element found for locator By.cssSelector("td") - the first result will be used
    James
    

    My Question is, how do I get the values of the other columns?

  • JDunn
    JDunn about 9 years
    Thanks alexcxe. That worked. How do I get individual elements of cellTexts. For example I want to extract "The second text". Also "The third text" happens to be the text of a button which I'd like to click.
  • alecxe
    alecxe about 9 years
    @JDunn you can use get(): expect(cellTexts.get(1)).toEqual("The second text");. If you need to locate the button in the third td: cells.get(2).element(by.tagName("button")).click();. Hope it helps.
  • JDunn
    JDunn about 9 years
    I get a Failed: undefined is not a function for cellTexts.get(1), the button clicking part worked well though
  • alecxe
    alecxe about 9 years
    @JDunn what about expect(cellTexts[1]).toEqual("The second text");? Thanks.
  • JDunn
    JDunn about 9 years
    Expected undefined to equal 'The second text'