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);
}
}