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.

TableClickAndDragOnIconAndComponentsTest.java 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package com.vaadin.tests.components.table;
  2. import static org.hamcrest.CoreMatchers.is;
  3. import static org.hamcrest.MatcherAssert.assertThat;
  4. import java.util.List;
  5. import org.junit.Test;
  6. import org.openqa.selenium.By;
  7. import org.openqa.selenium.WebElement;
  8. import org.openqa.selenium.interactions.Actions;
  9. import com.vaadin.testbench.elements.TableElement;
  10. import com.vaadin.tests.tb3.MultiBrowserTest;
  11. /**
  12. * Tests that clicking on active fields doesn't change Table selection, nor does
  13. * dragging rows.
  14. *
  15. * @author Vaadin Ltd
  16. */
  17. public class TableClickAndDragOnIconAndComponentsTest extends MultiBrowserTest {
  18. @Override
  19. public void setup() throws Exception {
  20. super.setup();
  21. openTestURL();
  22. }
  23. @Test
  24. public void clickOnTextFieldDoesNotSelectRow() {
  25. selectRow(1);
  26. clickOnTextField(2);
  27. assertThatFocusTextFieldHasText("foo 2foo");
  28. assertThat(getSelectedRowTextValue(), is(1));
  29. }
  30. @Test
  31. public void clickOnReadOnlyTextFieldSelectsRow() {
  32. selectRow(1);
  33. clickOnReadOnlyTextField(2);
  34. assertThat(getSelectedRowTextValue(), is(2));
  35. }
  36. @Test
  37. public void clickOnLabelSelectsRow() {
  38. selectRow(1);
  39. clickOnLabel(2);
  40. assertThat(getSelectedRowTextValue(), is(2));
  41. }
  42. @Test
  43. public void clickOnEmbeddedIconSelectsRow() {
  44. selectRow(1);
  45. clickOnEmbeddedIcon(2);
  46. assertThat(getSelectedRowTextValue(), is(2));
  47. }
  48. @Test
  49. public void dragAndDroppingRowDoesNotSelectRow() {
  50. selectRow(1);
  51. moveRow(0, 3);
  52. assertThat(getSelectedRowTextValue(), is(1));
  53. assertThat(getSelectedRowIndex(), is(0));
  54. }
  55. @Test
  56. public void dragAndDroppingSelectedRowStaysSelected() {
  57. selectRow(1);
  58. moveRow(1, 4);
  59. assertThat(getSelectedRowTextValue(), is(1));
  60. assertThat(getSelectedRowIndex(), is(4));
  61. }
  62. private void assertThatFocusTextFieldHasText(String text) {
  63. List<WebElement> focused = getTable()
  64. .findElements(By.className("v-textfield-focus"));
  65. assertThat(focused.get(0).getAttribute("value"), is(text));
  66. }
  67. private int getSelectedRowTextValue() {
  68. WebElement selectedRow = getSelectedRow();
  69. // i.e. 'red 1foo'
  70. String text = getText(selectedRow, 2);
  71. return Integer.parseInt(text.substring(4, 5));
  72. }
  73. private String getText(WebElement row, int column) {
  74. List<WebElement> cellContents = getCellContents(row);
  75. return cellContents.get(column).getText();
  76. }
  77. private List<WebElement> getCellContents(WebElement row) {
  78. return row.findElements(By.className("v-table-cell-content"));
  79. }
  80. private WebElement getSelectedRow() {
  81. return getTable().findElement(By.className("v-selected"));
  82. }
  83. private void clickOnTextField(int row) {
  84. WebElement textField = getTextField(row, 0);
  85. textField.click();
  86. }
  87. private void clickOnReadOnlyTextField(int row) {
  88. WebElement textField = getTextField(row, 1);
  89. textField.click();
  90. }
  91. private WebElement getTextField(int row, int index) {
  92. return getElement(row, index, "v-textfield");
  93. }
  94. private WebElement getElement(int row, String className) {
  95. return getElement(row, 0, className);
  96. }
  97. private WebElement getElement(int row, int index, String className) {
  98. return getRows().get(row).findElements(By.className(className))
  99. .get(index);
  100. }
  101. private List<WebElement> getRows() {
  102. return getTable().findElement(By.className("v-table-body"))
  103. .findElements(By.tagName("tr"));
  104. }
  105. private void selectRow(int row) {
  106. TableElement table = getTable();
  107. table.getCell(row, 2).click();
  108. }
  109. private TableElement getTable() {
  110. return $(TableElement.class).first();
  111. }
  112. private void clickOnLabel(int row) {
  113. WebElement label = getElement(row, "v-label");
  114. label.click();
  115. }
  116. private void clickOnEmbeddedIcon(int row) {
  117. WebElement embeddedIcon = getElement(row, "v-embedded");
  118. embeddedIcon.click();
  119. }
  120. private void moveRow(int from, int to) {
  121. List<WebElement> rows = getRows();
  122. List<WebElement> cellContents = getCellContents(rows.get(from));
  123. new Actions(getDriver()).moveToElement(cellContents.get(2))
  124. .clickAndHold().moveToElement(rows.get(to)).release().perform();
  125. }
  126. private int getSelectedRowIndex() {
  127. List<WebElement> rows = getRows();
  128. // Unfortunately rows.getIndexOf(getSelectedRow()) doesn't work.
  129. for (WebElement r : rows) {
  130. if (r.getAttribute("class").contains("v-selected")) {
  131. return rows.indexOf(r);
  132. }
  133. }
  134. return -1;
  135. }
  136. }