You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GridBasicsTest.java 9.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. package com.vaadin.tests.components.grid.basics;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertTrue;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.util.Locale;
  7. import java.util.stream.Stream;
  8. import org.junit.Before;
  9. import org.openqa.selenium.By;
  10. import org.openqa.selenium.WebElement;
  11. import org.openqa.selenium.interactions.Actions;
  12. import org.openqa.selenium.remote.DesiredCapabilities;
  13. import com.vaadin.testbench.TestBenchElement;
  14. import com.vaadin.testbench.elements.GridElement;
  15. import com.vaadin.testbench.elements.GridElement.GridCellElement;
  16. import com.vaadin.testbench.elements.GridElement.GridEditorElement;
  17. import com.vaadin.testbench.parallel.Browser;
  18. import com.vaadin.tests.tb3.MultiBrowserTest;
  19. import com.vaadin.v7.tests.components.grid.basicfeatures.GridBasicFeaturesTest.CellSide;
  20. /**
  21. * Base class for all {@link GridBasics} UI tests
  22. */
  23. public abstract class GridBasicsTest extends MultiBrowserTest {
  24. public static final int ROWS = 1000;
  25. /* Identical List of test data */
  26. private List<DataObject> testData;
  27. @Override
  28. public List<DesiredCapabilities> getBrowsersToTest() {
  29. // Most tests are run with only one browser.
  30. return getBrowserCapabilities(Browser.CHROME);
  31. }
  32. @Override
  33. protected Class<?> getUIClass() {
  34. return GridBasics.class;
  35. }
  36. @Before
  37. public void setUp() {
  38. openTestURL();
  39. testData = DataObject.generateObjects();
  40. }
  41. protected GridElement getGridElement() {
  42. return $(GridElement.class).first();
  43. }
  44. protected List<TestBenchElement> getGridHeaderRowCells() {
  45. List<TestBenchElement> headerCells = new ArrayList<>();
  46. for (int i = 0; i < getGridElement().getHeaderCount(); ++i) {
  47. headerCells.addAll(getGridElement().getHeaderCells(i));
  48. }
  49. return headerCells;
  50. }
  51. protected Stream<DataObject> getTestData() {
  52. return testData.stream();
  53. }
  54. protected void scrollGridVerticallyTo(double px) {
  55. executeScript("arguments[0].scrollTop = " + px,
  56. getGridVerticalScrollbar());
  57. }
  58. protected void scrollGridHorizontallyTo(double px) {
  59. executeScript("arguments[0].scrollLeft = " + px,
  60. getGridHorizontalScrollbar());
  61. }
  62. protected WebElement getGridVerticalScrollbar() {
  63. return getDriver().findElement(By.xpath(
  64. "//div[contains(@class, \"v-grid-scroller-vertical\")]"));
  65. }
  66. protected WebElement getGridHorizontalScrollbar() {
  67. return getDriver().findElement(By.xpath(
  68. "//div[contains(@class, \"v-grid-scroller-horizontal\")]"));
  69. }
  70. protected GridCellElement getDefaultColumnHeader(int index) {
  71. List<GridCellElement> headerRowCells = getGridElement()
  72. .getHeaderCells(0);
  73. return headerRowCells.get(index);
  74. }
  75. protected void dragAndDropDefaultColumnHeader(int draggedColumnHeaderIndex,
  76. int onTopOfColumnHeaderIndex, CellSide cellSide) {
  77. GridCellElement columnHeader = getDefaultColumnHeader(
  78. onTopOfColumnHeaderIndex);
  79. new Actions(getDriver())
  80. .clickAndHold(getDefaultColumnHeader(draggedColumnHeaderIndex))
  81. .moveToElement(columnHeader, getHorizontalOffsetForDragAndDrop(
  82. columnHeader, cellSide), 0)
  83. .release().perform();
  84. }
  85. protected void dragAndDropColumnHeader(int headerRow,
  86. int draggedColumnHeaderIndex, int onTopOfColumnHeaderIndex,
  87. CellSide cellSide) {
  88. GridCellElement headerCell = getGridElement().getHeaderCell(headerRow,
  89. onTopOfColumnHeaderIndex);
  90. new Actions(getDriver())
  91. .clickAndHold(getGridElement().getHeaderCell(headerRow,
  92. draggedColumnHeaderIndex))
  93. .moveToElement(headerCell,
  94. getHorizontalOffsetForDragAndDrop(headerCell, cellSide),
  95. 0)
  96. .release().perform();
  97. }
  98. protected void dragAndDropColumnHeader(int headerRow,
  99. int draggedColumnHeaderIndex, int onTopOfColumnHeaderIndex,
  100. int horizontalOffset) {
  101. GridCellElement headerCell = getGridElement().getHeaderCell(headerRow,
  102. onTopOfColumnHeaderIndex);
  103. new Actions(getDriver())
  104. .clickAndHold(getGridElement().getHeaderCell(headerRow,
  105. draggedColumnHeaderIndex))
  106. .moveToElement(headerCell, horizontalOffset, 0).release()
  107. .perform();
  108. }
  109. private int getHorizontalOffsetForDragAndDrop(GridCellElement columnHeader,
  110. CellSide cellSide) {
  111. if (cellSide == CellSide.LEFT) {
  112. return -5;
  113. } else {
  114. int half = columnHeader.getSize().getWidth() / 2;
  115. return half + half / 2;
  116. }
  117. }
  118. protected void toggleColumnReorder() {
  119. selectMenuPath("Component", "State", "Column Reordering");
  120. }
  121. protected void assertColumnHeaderOrder(int... indices) {
  122. List<TestBenchElement> headers = getGridHeaderRowCells();
  123. for (int i = 0; i < indices.length; i++) {
  124. assertColumnHeader("HEADER CELL " + indices[i], headers.get(i));
  125. }
  126. }
  127. protected void assertColumnHeader(String expectedHeaderCaption,
  128. TestBenchElement testBenchElement) {
  129. assertEquals(expectedHeaderCaption.toLowerCase(Locale.ROOT),
  130. testBenchElement.getText().toLowerCase(Locale.ROOT));
  131. }
  132. protected void assertColumnIsSorted(int index) {
  133. WebElement columnHeader = getDefaultColumnHeader(index);
  134. assertTrue(columnHeader.getAttribute("class").contains("sort"));
  135. }
  136. protected void assertFocusedCell(int row, int column) {
  137. assertTrue(getGridElement().getCell(row, column).getAttribute("class")
  138. .contains("focused"));
  139. }
  140. protected void focusCell(int row, int column) {
  141. getGridElement().getCell(row, column).click();
  142. }
  143. protected WebElement getSidebarPopup() {
  144. List<WebElement> elements = findElements(
  145. By.className("v-grid-sidebar-popup"));
  146. if (elements.isEmpty()) {
  147. getSidebarOpenButton().click();
  148. elements = findElements(By.className("v-grid-sidebar-popup"));
  149. }
  150. return elements.isEmpty() ? null : elements.get(0);
  151. }
  152. protected WebElement getSidebarPopupIfPresent() {
  153. List<WebElement> elements = findElements(
  154. By.className("v-grid-sidebar-popup"));
  155. return elements.isEmpty() ? null : elements.get(0);
  156. }
  157. protected WebElement getSidebarOpenButton() {
  158. List<WebElement> elements = findElements(
  159. By.className("v-grid-sidebar-button"));
  160. return elements.isEmpty() ? null : elements.get(0);
  161. }
  162. /**
  163. * Returns the toggle inside the sidebar for hiding the column at the given
  164. * index, or null if not found.
  165. */
  166. protected WebElement getColumnHidingToggle(int columnIndex) {
  167. WebElement sidebar = getSidebarPopup();
  168. List<WebElement> elements = sidebar
  169. .findElements(By.className("column-hiding-toggle"));
  170. for (WebElement e : elements) {
  171. if (e.getText().toLowerCase(Locale.ROOT)
  172. .startsWith("column " + columnIndex)) {
  173. return e;
  174. }
  175. }
  176. return null;
  177. }
  178. protected GridEditorElement getEditor() {
  179. return getGridElement().getEditor();
  180. }
  181. protected int getGridVerticalScrollPos() {
  182. return ((Number) executeScript("return arguments[0].scrollTop",
  183. getGridVerticalScrollbar())).intValue();
  184. }
  185. protected void toggleFirstRowSelection() {
  186. selectMenuPath("Component", "Body rows", "Toggle first row selection");
  187. }
  188. protected void selectAll() {
  189. selectMenuPath("Component", "State", "Selection model", "Select All");
  190. }
  191. protected void deselectAll() {
  192. selectMenuPath("Component", "State", "Selection model", "Deselect All");
  193. }
  194. protected void setSelectionModelMulti() {
  195. selectMenuPath("Component", "State", "Selection model", "multi");
  196. }
  197. protected void setSelectionModelSingle() {
  198. selectMenuPath("Component", "State", "Selection model", "single");
  199. }
  200. protected void setSelectionModelNone() {
  201. selectMenuPath("Component", "State", "Selection model", "none");
  202. }
  203. protected void setSelectAllCheckBoxVisible() {
  204. selectMenuPath("Component", "State", "Selection model",
  205. "SelectAllCheckbox: Visible");
  206. }
  207. protected void setSelectAllCheckBoxHidden() {
  208. selectMenuPath("Component", "State", "Selection model",
  209. "SelectAllCheckbox: Hidden");
  210. }
  211. protected void setSelectAllCheckBoxDefault() {
  212. selectMenuPath("Component", "State", "Selection model",
  213. "SelectAllCheckbox: Default");
  214. }
  215. protected WebElement getSelectAllCheckbox() {
  216. GridCellElement header = getGridElement().getHeaderCell(0, 0);
  217. return header.findElement(By.tagName("input"));
  218. }
  219. }