diff --git a/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridColumnElement.java b/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridColumnElement.java index 092428924ac..4844db289f1 100644 --- a/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridColumnElement.java +++ b/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridColumnElement.java @@ -19,28 +19,9 @@ /** * A TestBench element representing a <vaadin-grid-column> - * element. This is not a TestBenchElement as polyfilled browsers are not - * capable of finding it or handling it as a web element. + * element. */ -public class GridColumnElement { - - private GridElement grid; - private Long __generatedId; - - public GridColumnElement(Long __generatedId, GridElement grid) { - this.grid = grid; - this.__generatedId = __generatedId; - } - - /** - * For internal use only. - * - * @return the generated id for the column - */ - protected Long get__generatedId() { - return __generatedId; - } - +public class GridColumnElement extends TestBenchElement { /** * Gets the header cell for this column. *

@@ -49,16 +30,7 @@ protected Long get__generatedId() { * @return the header cell for the column */ public GridTHTDElement getHeaderCell() { - return ((TestBenchElement) execJs("return column._headerCell")) - .wrap(GridTHTDElement.class); - } - - private Object execJs(String js) { - return grid.getCommandExecutor() - .executeScript("var grid = arguments[0];" // - + "var generatedId = arguments[1];" - + "var column = grid._getColumns().filter(function(column) {return column.__generatedTbId == generatedId;})[0];" - + js, grid, __generatedId); + return getPropertyElement("_headerCell").wrap(GridTHTDElement.class); } /** @@ -69,18 +41,6 @@ private Object execJs(String js) { * @return the footer cell for the column */ public GridTHTDElement getFooterCell() { - return ((TestBenchElement) execJs("return column._footerCell")) - .wrap(GridTHTDElement.class); + return getPropertyElement("_footerCell").wrap(GridTHTDElement.class); } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof GridColumnElement)) { - return false; - } - - return get__generatedId() - .equals(((GridColumnElement) obj).get__generatedId()); - } - } diff --git a/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridElement.java b/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridElement.java index 5a412eea0b8..389ae044745 100644 --- a/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridElement.java +++ b/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridElement.java @@ -17,7 +17,6 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; @@ -78,16 +77,10 @@ public void scrollToColumn(int columnIndex) { * the column to scroll to */ public void scrollToColumn(GridColumnElement column) { - executeScript(""" - const grid = arguments[0]; - const columnId = arguments[1]; - const column = grid._getColumns().find((col) => { - return col.__generatedTbId === columnId; - }); - if (column) { - grid.scrollToColumn(column); - } - """, this, column.get__generatedId()); + if (column == null) { + return; + } + callFunction("scrollToColumn", column); } /** @@ -305,29 +298,15 @@ public GridTRElement getRow(int rowIndex, boolean scroll) * given column */ public List getAllColumns() { - generatedColumnIdsIfNeeded(); - String getVisibleColumnsJS = "return arguments[0]._getColumns().sort(function(a,b) { return a._order - b._order;}).map(function(column) { return column.__generatedTbId;});"; @SuppressWarnings("unchecked") - List elements = (List) executeScript(getVisibleColumnsJS, + List columns = (List) executeScript( + """ + const [grid] = arguments; + return grid._getColumns().sort((a, b) => a._order - b._order); + """, this); - return elements.stream() - .map(generatedId -> new GridColumnElement(generatedId, this)) - .collect(Collectors.toList()); - } - - protected void generatedColumnIdsIfNeeded() { - String generateIds = "const grid = arguments[0];" - + "if (!grid.__generatedTbId) {"// - + " grid.__generatedTbId = 1;"// - + "}" // - + "grid._getColumns().forEach(function(column) {" - + " if (!column.__generatedTbId) {" - + " column.__generatedTbId = grid.__generatedTbId++;" // - + " }" // - + "});"; - - executeScript(generateIds, this); - // + return columns.stream() + .map(element -> element.wrap(GridColumnElement.class)).toList(); } /** @@ -338,13 +317,16 @@ protected void generatedColumnIdsIfNeeded() { * given column */ public List getVisibleColumns() { - generatedColumnIdsIfNeeded(); - String getVisibleColumnsJS = "return arguments[0]._getColumns().filter(function(column) {return !column.hidden;}).sort(function(a,b) { return a._order - b._order;}).map(function(column) { return column.__generatedTbId;});"; - List elements = (List) executeScript(getVisibleColumnsJS, - this); - return elements.stream().map(id -> new GridColumnElement(id, this)) - .collect(Collectors.toList()); - + @SuppressWarnings("unchecked") + List columns = (List) executeScript( + """ + const [grid] = arguments; + return grid._getColumns() + .filter((column) => !column.hidden) + .sort((a, b) => a._order - b._order); + """, this); + return columns.stream() + .map(element -> element.wrap(GridColumnElement.class)).toList(); } /** @@ -556,13 +538,16 @@ private void removeActiveItem(GridTRElement row) { * @return the multi-select column, or null */ private GridColumnElement getMultiSelectColumn() { - generatedColumnIdsIfNeeded(); - List columnIds = (List) executeScript( - "return arguments[0]._getColumns().filter(function(col) { return typeof col.selectAll != 'undefined';}).map(function(column) { return column.__generatedTbId;});", + TestBenchElement column = (TestBenchElement) executeScript( + """ + const [grid] = arguments; + return grid._getColumns().find((column) => column.selectAll !== undefined) ?? null; + """, this); - if (columnIds.isEmpty()) + if (column == null) { return null; - return new GridColumnElement(columnIds.get(0), this); + } + return column.wrap(GridColumnElement.class); } /** diff --git a/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridTHTDElement.java b/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridTHTDElement.java index 9b7f29328a4..4792fd84990 100644 --- a/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridTHTDElement.java +++ b/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridTHTDElement.java @@ -90,17 +90,12 @@ public int getRow() { * @return the column element */ public GridColumnElement getColumn() { - Double id = getPropertyDouble("_column", "__generatedTbId"); - GridElement grid = getGrid(); - if (id == null) { - grid.generatedColumnIdsIfNeeded(); - id = getPropertyDouble("_column", "__generatedTbId"); - } - if (id == null) { + TestBenchElement column = getPropertyElement("_column"); + if (column == null) { throw new NoSuchElementException( "Unable to find column. This should not really happen."); } - return new GridColumnElement(id.longValue(), grid); + return column.wrap(GridColumnElement.class); } /** diff --git a/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridTRElement.java b/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridTRElement.java index 0aef178fe24..3678931ab8f 100644 --- a/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridTRElement.java +++ b/vaadin-grid-flow-parent/vaadin-grid-testbench/src/main/java/com/vaadin/flow/component/grid/testbench/GridTRElement.java @@ -15,8 +15,6 @@ */ package com.vaadin.flow.component.grid.testbench; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.vaadin.testbench.TestBenchElement; @@ -47,20 +45,15 @@ public GridTHTDElement getCell(GridColumnElement column) { * columns */ public List getCells(GridColumnElement... columns) { - Object cells = executeScript("const row = arguments[0];" // - + "const columnIds = arguments[1];" - + "return Array.from(row.children)." - + "filter(function(cell) { return cell._column && columnIds.includes(cell._column.__generatedTbId);})", - this, Arrays.stream(columns) - .map(GridColumnElement::get__generatedId).toArray()); - if (cells != null) { - return ((ArrayList) cells).stream() - .map(elem -> ((TestBenchElement) elem) - .wrap(GridTHTDElement.class)) - .toList(); - } else { - return new ArrayList<>(); - } + @SuppressWarnings("unchecked") + List cells = (List) executeScript( + """ + const [row, columns] = arguments; + return Array.from(row.children) + .filter((cell) => columns.includes(cell._column)); + """, this, columns); + return cells.stream().map(cell -> cell.wrap(GridTHTDElement.class)) + .toList(); } /** diff --git a/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridProColumnElement.java b/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridProColumnElement.java index ae282cd279d..14e8dd9c7f7 100644 --- a/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridProColumnElement.java +++ b/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridProColumnElement.java @@ -14,38 +14,17 @@ /** * A TestBench element representing a - * <vaadin-pro-grid-edit-column> element. This is not a - * TestBenchElement as polyfilled browsers are not capable of finding it or - * handling it as a web element. + * <vaadin-pro-grid-edit-column> element. */ -public class GridProColumnElement { - - private GridProElement grid; - private Long __generatedId; - - public GridProColumnElement(Long __generatedId, GridProElement grid) { - this.grid = grid; - this.__generatedId = __generatedId; - } - - /** - * For internal use only. - * - * @return the generated id for the column - */ - protected Long get__generatedId() { - return __generatedId; - } - +public class GridProColumnElement extends TestBenchElement { /** * Gets the options List for this column. * * @return the options list */ + @SuppressWarnings("unchecked") public ArrayList getOptionsList() { - ArrayList editorOptions = (ArrayList) execJs( - "return column.editorOptions"); - return editorOptions; + return (ArrayList) getProperty("editorOptions"); } /** @@ -56,26 +35,6 @@ public ArrayList getOptionsList() { * @return the header cell for the column */ public GridTHTDElement getHeaderCell() { - return ((TestBenchElement) execJs("return column._headerCell")) - .wrap(GridTHTDElement.class); - } - - private Object execJs(String js) { - return grid.getCommandExecutor() - .executeScript("var grid = arguments[0];" // - + "var generatedId = arguments[1];" - + "var column = grid._getColumns().filter(function(column) {return column.__generatedTbId == generatedId;})[0];" - + js, grid, __generatedId); + return getPropertyElement("_headerCell").wrap(GridTHTDElement.class); } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof GridProColumnElement)) { - return false; - } - - return get__generatedId() - .equals(((GridProColumnElement) obj).get__generatedId()); - } - } diff --git a/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridProElement.java b/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridProElement.java index 0a302880c15..318a85c5d09 100644 --- a/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridProElement.java +++ b/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridProElement.java @@ -9,7 +9,6 @@ package com.vaadin.flow.component.gridpro.testbench; import java.util.List; -import java.util.stream.Collectors; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; @@ -167,20 +166,6 @@ public GridTRElement getRow(int rowIndex) { .wrap(GridTRElement.class); } - protected void generatedColumnIdsIfNeeded() { - String generateIds = "const grid = arguments[0];" - + "if (!grid.__generatedTbId) {"// - + " grid.__generatedTbId = 1;"// - + "}" // - + "grid._getColumns().forEach(function(column) {" - + " if (!column.__generatedTbId) {" - + " column.__generatedTbId = grid.__generatedTbId++;" // - + " }" // - + "});"; - - executeScript(generateIds, this); - } - /** * Gets the currently visible columns in the grid, including any selection * checkbox column. @@ -189,12 +174,16 @@ protected void generatedColumnIdsIfNeeded() { * given column */ public List getVisibleColumns() { - generatedColumnIdsIfNeeded(); - String getVisibleColumnsJS = "return arguments[0]._getColumns().filter(function(column) {return !column.hidden;}).sort(function(a,b) { return a._order - b._order;}).map(function(column) { return column.__generatedTbId;});"; - List elements = (List) executeScript(getVisibleColumnsJS, - this); - return elements.stream().map(id -> new GridProColumnElement(id, this)) - .collect(Collectors.toList()); - + @SuppressWarnings("unchecked") + List columns = (List) executeScript( + """ + const [grid] = arguments; + return grid._getColumns() + .filter((column) => !column.hidden) + .sort((a, b) => a._order - b._order); + """, this); + return columns.stream() + .map(element -> element.wrap(GridProColumnElement.class)) + .toList(); } } diff --git a/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridTHTDElement.java b/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridTHTDElement.java index ce8271348ac..6bacb0bf6e1 100644 --- a/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridTHTDElement.java +++ b/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridTHTDElement.java @@ -56,17 +56,12 @@ public boolean innerHTMLContains(String key) { * @return the column element */ public GridProColumnElement getColumn() { - Double id = getPropertyDouble("_column", "__generatedTbId"); - GridProElement grid = getGrid(); - if (id == null) { - grid.generatedColumnIdsIfNeeded(); - id = getPropertyDouble("_column", "__generatedTbId"); - } - if (id == null) { + TestBenchElement column = getPropertyElement("_column"); + if (column == null) { throw new NoSuchElementException( "Unable to find column. This should not really happen."); } - return new GridProColumnElement(id.longValue(), grid); + return column.wrap(GridProColumnElement.class); } /** diff --git a/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridTRElement.java b/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridTRElement.java index 0650d6a516d..329874a5944 100644 --- a/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridTRElement.java +++ b/vaadin-grid-pro-flow-parent/vaadin-grid-pro-testbench/src/main/java/com/vaadin/flow/component/gridpro/testbench/GridTRElement.java @@ -23,13 +23,12 @@ public class GridTRElement extends TestBenchElement { * @return the cell for the given column */ public GridTHTDElement getCell(GridProColumnElement column) { - TestBenchElement e = (TestBenchElement) executeScript( - "const grid = arguments[0];" // - + "const columnId = arguments[1];" // - + "return Array.from(grid.children)." - + "filter(function(cell) { return cell._column && cell._column.__generatedTbId == columnId;})[0]", - this, column.get__generatedId()); - return e == null ? null : e.wrap(GridTHTDElement.class); + TestBenchElement cell = (TestBenchElement) executeScript(""" + const [row, column] = arguments; + return Array.from(row.children) + .find((cell) => cell._column === column) ?? null; + """, this, column); + return cell == null ? null : cell.wrap(GridTHTDElement.class); } }