From 487cb4ea0c5e51e7a9b85d6bbb6ab9200f6772f7 Mon Sep 17 00:00:00 2001 From: rogozinds Date: Tue, 17 Jan 2017 06:13:06 -0800 Subject: Add getHeaderCellByCaption method to tb-api GridElement (#8248) * Add getHeaderCellByCaption method to tb-api GridElement --- .../com/vaadin/testbench/elements/GridElement.java | 66 +++++++++++++++++++--- 1 file changed, 59 insertions(+), 7 deletions(-) (limited to 'testbench-api') diff --git a/testbench-api/src/main/java/com/vaadin/testbench/elements/GridElement.java b/testbench-api/src/main/java/com/vaadin/testbench/elements/GridElement.java index f4959e1531..5970cc53a1 100644 --- a/testbench-api/src/main/java/com/vaadin/testbench/elements/GridElement.java +++ b/testbench-api/src/main/java/com/vaadin/testbench/elements/GridElement.java @@ -29,8 +29,7 @@ import com.vaadin.testbench.elementsbase.ServerClass; /** * TestBench Element API for Grid - * - * @since + * * @author Vaadin Ltd */ @ServerClass("com.vaadin.ui.Grid") @@ -65,8 +64,8 @@ public class GridElement extends AbstractComponentElement { } public GridCellElement getCell(int columnIndex) { - TestBenchElement e = (TestBenchElement) findElement( - By.xpath("./td[" + (columnIndex + 1) + "]")); + TestBenchElement e = (TestBenchElement) findElement(By + .xpath("./td[" + (columnIndex + 1) + "]")); return e.wrap(GridCellElement.class); } } @@ -207,13 +206,66 @@ public class GridElement extends AbstractComponentElement { * @return Header cell element with given indices. */ public GridCellElement getHeaderCell(int rowIndex, int colIndex) { - return getSubPart("#header[" + rowIndex + "][" + colIndex + "]") - .wrap(GridCellElement.class); + return getSubPart("#header[" + rowIndex + "][" + colIndex + "]").wrap( + GridCellElement.class); + } + + /** + * Finds the header cell element with the given caption. If + * there are multiple headers with the same name, the first one is returned. + * + * @param caption + * The header caption + * @return The first header cell element with a given caption. + * @throws NoSuchElementException + * if there is no header row or no header cell with the given + * text. + */ + public GridCellElement getHeaderCellByCaption(String caption) { + List headerRows = findElement(By.vaadin("#header")) + .findElements(By.xpath("./tr/th")); + for (WebElement header : headerRows) { + if (caption.equals(header.getText())) { + return TestBenchElement + .wrapElement(header, getCommandExecutor()) + .wrap(GridCellElement.class); + } + } + String errorMessage = String + .format("There is no header cell with %s caption. ", caption); + throw new NoSuchElementException(errorMessage); + } + + /** + * Gets the header cell element with the given caption in the given header + * row. If there are multiple headers with the same name, the first one is + * returned. + * + * @param rowIndex + * The index of the header row + * @param caption + * The header caption + * @return The first header cell element with a given caption. + * @throws NoSuchElementException + * if there is no header row or no header cell with the given + * text. + */ + public GridCellElement getHeaderCellByCaption(int rowIndex, String caption) { + List headerCells = getHeaderCells(rowIndex); + for (GridCellElement cell : headerCells) { + if (caption.equals(cell.getText())) { + return cell; + } + } + String errorMessage = String.format( + "The row with index %d does not have header with %s caption. ", + rowIndex, caption); + throw new NoSuchElementException(errorMessage); } /** * Gets footer cell element with given row and column index. - * + * * @param rowIndex * Row index * @param colIndex -- cgit v1.2.3