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.
Author by
JDunn
Updated on July 09, 2022Comments
-
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 columnselement.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 about 9 yearsThanks 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 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 about 9 yearsI get a Failed: undefined is not a function for cellTexts.get(1), the button clicking part worked well though
-
alecxe about 9 years@JDunn what about
expect(cellTexts[1]).toEqual("The second text");
? Thanks. -
JDunn about 9 yearsExpected undefined to equal 'The second text'