Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

GridComponentsTest.java 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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.Locale;
  6. import java.util.stream.IntStream;
  7. import java.util.stream.Stream;
  8. import org.junit.Test;
  9. import org.openqa.selenium.Keys;
  10. import org.openqa.selenium.WebElement;
  11. import com.vaadin.testbench.By;
  12. import com.vaadin.testbench.annotations.RunLocally;
  13. import com.vaadin.testbench.elements.ButtonElement;
  14. import com.vaadin.testbench.elements.GridElement;
  15. import com.vaadin.testbench.elements.GridElement.GridCellElement;
  16. import com.vaadin.testbench.elements.GridElement.GridRowElement;
  17. import com.vaadin.testbench.elements.LabelElement;
  18. import com.vaadin.testbench.elements.NotificationElement;
  19. import com.vaadin.testbench.elements.TextFieldElement;
  20. import com.vaadin.testbench.parallel.Browser;
  21. import com.vaadin.testbench.parallel.BrowserUtil;
  22. import com.vaadin.tests.tb3.MultiBrowserTest;
  23. public class GridComponentsTest extends MultiBrowserTest {
  24. @Test
  25. public void testReuseTextFieldOnScroll() {
  26. if (BrowserUtil.isPhantomJS(getDesiredCapabilities())) {
  27. // skip test on PhantomJS as it often crashes the browser
  28. return;
  29. }
  30. openTestURL();
  31. GridElement grid = $(GridElement.class).first();
  32. editTextFieldInCell(grid, 0, 1);
  33. // Scroll out of view port
  34. grid.getRow(900);
  35. // Scroll back
  36. grid.getRow(0);
  37. WebElement textField = grid.getCell(0, 1)
  38. .findElement(By.tagName("input"));
  39. assertEquals("TextField value was reset", "Foo",
  40. textField.getAttribute("value"));
  41. assertTrue("No mention in the log",
  42. logContainsText("1. Reusing old text field for: Row 0"));
  43. }
  44. @Test
  45. public void testReuseTextFieldOnSelect() {
  46. openTestURL();
  47. GridElement grid = $(GridElement.class).first();
  48. editTextFieldInCell(grid, 1, 1);
  49. // Select row
  50. grid.getCell(1, 1).click(1, 1);
  51. WebElement textField = grid.getCell(1, 1)
  52. .findElement(By.tagName("input"));
  53. assertEquals("TextField value was reset", "Foo",
  54. textField.getAttribute("value"));
  55. assertTrue("No mention in the log",
  56. logContainsText("1. Reusing old text field for: Row 1"));
  57. }
  58. @Test
  59. public void testReplaceData() {
  60. openTestURL();
  61. assertRowExists(5, "Row 5");
  62. $(ButtonElement.class).caption("Reset data").first().click();
  63. assertRowExists(5, "Row 1005");
  64. }
  65. @Test
  66. public void testTextFieldSize() {
  67. openTestURL();
  68. GridCellElement cell = $(GridElement.class).first().getCell(0, 1);
  69. int cellWidth = cell.getSize().getWidth();
  70. int fieldWidth = cell.findElement(By.tagName("input")).getSize()
  71. .getWidth();
  72. // padding left and right, +1 to fix sub pixel issues
  73. int padding = 18 * 2 + 1;
  74. int extraSpace = Math.abs(fieldWidth - cellWidth);
  75. assertTrue("Too much unused space in cell. Expected: " + padding
  76. + " Actual: " + extraSpace, extraSpace <= padding);
  77. }
  78. private void editTextFieldInCell(GridElement grid, int row, int col) {
  79. WebElement textField = grid.getCell(row, col)
  80. .findElement(By.tagName("input"));
  81. textField.clear();
  82. textField.sendKeys("Foo");
  83. }
  84. @Test
  85. public void testRow5() {
  86. openTestURL();
  87. assertRowExists(5, "Row 5");
  88. }
  89. @Test
  90. public void testRow0() {
  91. openTestURL();
  92. assertRowExists(0, "Row 0");
  93. assertEquals("Grid row height is not what it should be", 40,
  94. $(GridElement.class).first().getRow(0).getSize().getHeight());
  95. }
  96. @Test
  97. public void testRow999() {
  98. openTestURL();
  99. assertRowExists(999, "Row 999");
  100. }
  101. @Test
  102. public void testRow30() {
  103. openTestURL();
  104. Stream.of(30, 130, 230, 330).forEach(this::assertNoButton);
  105. IntStream.range(300, 310).forEach(this::assertNoButton);
  106. }
  107. @Test(expected = AssertionError.class)
  108. public void testRow31() {
  109. openTestURL();
  110. // There is a button on row 31. This should fail.
  111. assertNoButton(31);
  112. }
  113. @Test
  114. public void testHeaders() {
  115. openTestURL();
  116. GridElement grid = $(GridElement.class).first();
  117. GridCellElement headerCell = grid.getHeaderCell(0, 0);
  118. assertTrue("First header should contain a Label",
  119. headerCell.isElementPresent(LabelElement.class));
  120. assertEquals("Label",
  121. headerCell.$(LabelElement.class).first().getText());
  122. assertFalse("Second header should not contain a component",
  123. grid.getHeaderCell(0, 1).isElementPresent(LabelElement.class));
  124. assertEquals("Other Components", grid.getHeaderCell(0, 1).getText());
  125. }
  126. @Test
  127. public void testSelectRowByClickingLabel() {
  128. openTestURL();
  129. GridElement grid = $(GridElement.class).first();
  130. assertFalse("Row should not be initially selected",
  131. grid.getRow(0).isSelected());
  132. grid.getCell(0, 0).$(LabelElement.class).first().click(10, 10,
  133. new Keys[0]);
  134. assertTrue("Row should be selected", grid.getRow(0).isSelected());
  135. }
  136. @Test
  137. public void testRowNotSelectedFromHeaderOrFooter() {
  138. openTestURL();
  139. GridElement grid = $(GridElement.class).first();
  140. grid.getCell(4, 0).$(LabelElement.class).first().click(10, 10,
  141. new Keys[0]);
  142. assertTrue("Row 4 should be selected", grid.getRow(4).isSelected());
  143. TextFieldElement headerTextField = grid.getHeaderCell(1, 0)
  144. .$(TextFieldElement.class).first();
  145. headerTextField.sendKeys(Keys.SPACE);
  146. assertFalse("Row 1 should not be selected",
  147. grid.getRow(1).isSelected());
  148. assertTrue("Row 4 should still be selected",
  149. grid.getRow(4).isSelected());
  150. TextFieldElement footerTextField = grid.getFooterCell(0, 0)
  151. .$(TextFieldElement.class).first();
  152. footerTextField.sendKeys(Keys.SPACE);
  153. assertFalse("Row 0 should not be selected",
  154. grid.getRow(0).isSelected());
  155. assertTrue("Row 4 should still be selected",
  156. grid.getRow(4).isSelected());
  157. }
  158. private void assertRowExists(int i, String string) {
  159. GridRowElement row = $(GridElement.class).first().getRow(i);
  160. assertEquals("Label text did not match", string,
  161. row.getCell(0).getText());
  162. row.findElement(
  163. By.id(string.replace(' ', '_').toLowerCase(Locale.ROOT)))
  164. .click();
  165. // IE 11 is slow, need to wait for the notification.
  166. waitUntil(driver -> isElementPresent(NotificationElement.class), 10);
  167. assertTrue("Notification should contain given text: " + string,
  168. $(NotificationElement.class).first().getText()
  169. .contains(string));
  170. $(NotificationElement.class).first().close();
  171. }
  172. private void assertNoButton(int i) {
  173. GridRowElement row = $(GridElement.class).first().getRow(i);
  174. assertFalse("Row " + i + " should not have a button",
  175. row.getCell(2).isElementPresent(ButtonElement.class));
  176. }
  177. }