選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

GridColumnHidingTest.java 7.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package com.vaadin.tests.components.grid;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertFalse;
  4. import static org.junit.Assert.assertTrue;
  5. import java.util.List;
  6. import org.junit.Test;
  7. import org.openqa.selenium.Dimension;
  8. import org.openqa.selenium.WebElement;
  9. import org.openqa.selenium.interactions.Actions;
  10. import com.vaadin.testbench.By;
  11. import com.vaadin.testbench.elements.ButtonElement;
  12. import com.vaadin.testbench.elements.GridElement;
  13. import com.vaadin.testbench.elements.GridElement.GridCellElement;
  14. import com.vaadin.testbench.elements.LabelElement;
  15. import com.vaadin.tests.tb3.MultiBrowserTest;
  16. public class GridColumnHidingTest extends MultiBrowserTest {
  17. @Test
  18. public void serverHideColumns() {
  19. openTestURL();
  20. GridElement grid = $(GridElement.class).first();
  21. ButtonElement toggleNameColumn = $(ButtonElement.class).get(0);
  22. ButtonElement toggleAgeColumn = $(ButtonElement.class).get(1);
  23. ButtonElement toggleEmailColumn = $(ButtonElement.class).get(2);
  24. assertEquals("Foo", grid.getCell(0, 0).getText());
  25. assertEquals("Maya", grid.getCell(1, 0).getText());
  26. assertEquals("46", grid.getCell(0, 1).getText());
  27. assertEquals("yeah@cool.com", grid.getCell(0, 2).getText());
  28. toggleAgeColumn.click();
  29. assertEquals("Foo", grid.getCell(0, 0).getText());
  30. assertEquals("Maya", grid.getCell(1, 0).getText());
  31. assertEquals("yeah@cool.com", grid.getCell(0, 1).getText());
  32. toggleNameColumn.click();
  33. assertEquals("yeah@cool.com", grid.getCell(0, 0).getText());
  34. toggleEmailColumn.click();
  35. assertFalse(isElementPresent(By.className("v-grid-cell")));
  36. toggleAgeColumn.click();
  37. toggleNameColumn.click();
  38. toggleEmailColumn.click();
  39. assertEquals("Foo", grid.getCell(0, 0).getText());
  40. assertEquals("46", grid.getCell(0, 1).getText());
  41. assertEquals("yeah@cool.com", grid.getCell(0, 2).getText());
  42. }
  43. @Test
  44. public void clientHideColumns() {
  45. openTestURL();
  46. GridElement grid = $(GridElement.class).first();
  47. getSidebarOpenButton(grid).click();
  48. getColumnHidingToggle(grid, "custom age column caption").click();
  49. assertEquals("Foo", grid.getCell(0, 0).getText());
  50. assertEquals("Maya", grid.getCell(1, 0).getText());
  51. assertEquals("yeah@cool.com", grid.getCell(0, 1).getText());
  52. assertEquals("maya@foo.bar", grid.getCell(1, 1).getText());
  53. getColumnHidingToggle(grid, "Name").click();
  54. assertEquals("yeah@cool.com", grid.getCell(0, 0).getText());
  55. getColumnHidingToggle(grid, "custom age column caption").click();
  56. assertEquals("46", grid.getCell(0, 0).getText());
  57. assertEquals("18", grid.getCell(1, 0).getText());
  58. assertEquals("yeah@cool.com", grid.getCell(0, 1).getText());
  59. assertEquals("maya@foo.bar", grid.getCell(1, 1).getText());
  60. }
  61. @Test
  62. public void clientHideServerShowColumns() {
  63. openTestURL();
  64. GridElement grid = $(GridElement.class).first();
  65. getSidebarOpenButton(grid).click();
  66. // Assuming client-side hiding works. See clientHideColumns()
  67. getColumnHidingToggle(grid, "custom age column caption").click();
  68. getColumnHidingToggle(grid, "Name").click();
  69. // Show from server
  70. $(ButtonElement.class).caption("server side toggle age column").first()
  71. .click();
  72. assertEquals("46", grid.getCell(0, 0).getText());
  73. assertEquals("18", grid.getCell(1, 0).getText());
  74. assertEquals("yeah@cool.com", grid.getCell(0, 1).getText());
  75. assertEquals("maya@foo.bar", grid.getCell(1, 1).getText());
  76. }
  77. @Test
  78. public void columnVisibilityChangeListener() {
  79. openTestURL();
  80. GridElement grid = $(GridElement.class).first();
  81. LabelElement isHiddenLabel = $(LabelElement.class).get(1);
  82. ButtonElement toggleNameColumn = $(ButtonElement.class).get(0);
  83. ButtonElement toggleAgeColumn = $(ButtonElement.class).get(1);
  84. assertEquals("visibility change label", isHiddenLabel.getText());
  85. toggleNameColumn.click();
  86. assertEquals("true", isHiddenLabel.getText());
  87. toggleAgeColumn.click();
  88. assertEquals("true", isHiddenLabel.getText());
  89. toggleAgeColumn.click();
  90. assertEquals("false", isHiddenLabel.getText());
  91. getSidebarOpenButton(grid).click();
  92. getColumnHidingToggle(grid, "Name").click();
  93. assertEquals("false", isHiddenLabel.getText());
  94. getColumnHidingToggle(grid, "custom age column caption").click();
  95. assertEquals("true", isHiddenLabel.getText());
  96. getSidebarOpenButton(grid).click();
  97. }
  98. @Test
  99. public void columnTogglesVisibility() {
  100. openTestURL();
  101. GridElement grid = $(GridElement.class).first();
  102. getSidebarOpenButton(grid).click();
  103. List<WebElement> elements = getColumnHidingToggles(grid);
  104. assertEquals(2, elements.size());
  105. assertTrue("Name".equals(elements.get(0).getText()));
  106. assertTrue(
  107. "custom age column caption".equals(elements.get(1).getText()));
  108. }
  109. @Test
  110. public void testShrinkColumnToZeroWithHiddenColumn() {
  111. openTestURL();
  112. // hide all
  113. $(ButtonElement.class).get(3).click();
  114. ButtonElement toggleNameColumn = $(ButtonElement.class).get(0);
  115. ButtonElement toggleEmailColumn = $(ButtonElement.class).get(2);
  116. // Show
  117. toggleNameColumn.click();
  118. toggleEmailColumn.click();
  119. GridElement gridElement = $(GridElement.class).first();
  120. GridCellElement cell = gridElement.getCell(0, 1);
  121. dragResizeColumn(1, 0, -cell.getSize().getWidth());
  122. assertGreaterOrEqual("Cell got too small.", cell.getSize().getWidth(),
  123. 10);
  124. assertEquals(gridElement.getCell(0, 0).getLocation().getY(),
  125. gridElement.getCell(0, 1).getLocation().getY());
  126. }
  127. protected WebElement getSidebarOpenButton(GridElement grid) {
  128. List<WebElement> elements = grid
  129. .findElements(By.className("v-grid-sidebar-button"));
  130. return elements.isEmpty() ? null : elements.get(0);
  131. }
  132. protected List<WebElement> getColumnHidingToggles(GridElement grid) {
  133. WebElement sidebar = getSidebar(grid);
  134. return sidebar.findElements(By.className("column-hiding-toggle"));
  135. }
  136. protected WebElement getColumnHidingToggle(GridElement grid,
  137. String caption) {
  138. List<WebElement> elements = getColumnHidingToggles(grid);
  139. for (WebElement e : elements) {
  140. if (caption.equalsIgnoreCase(e.getText())) {
  141. return e;
  142. }
  143. }
  144. return null;
  145. }
  146. protected WebElement getSidebar(GridElement grid) {
  147. List<WebElement> elements = findElements(
  148. By.className("v-grid-sidebar-popup"));
  149. return elements.isEmpty() ? null : elements.get(0);
  150. }
  151. private void dragResizeColumn(int columnIndex, int posX, int offset) {
  152. GridElement gridElement = $(GridElement.class).first();
  153. GridCellElement headerCell = gridElement.getHeaderCell(0, columnIndex);
  154. Dimension size = headerCell.getSize();
  155. new Actions(getDriver())
  156. .moveByOffset(
  157. headerCell.getLocation().getX() + size.getWidth()
  158. + posX,
  159. headerCell.getLocation().getY() + size.getHeight() / 2)
  160. .clickAndHold().moveByOffset(offset, 0).release().perform();
  161. }
  162. }