123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- package com.vaadin.tests.components.table;
-
- import static org.hamcrest.CoreMatchers.is;
- import static org.hamcrest.MatcherAssert.assertThat;
-
- import java.util.List;
-
- import org.junit.Test;
- import org.openqa.selenium.By;
- import org.openqa.selenium.WebElement;
- import org.openqa.selenium.interactions.Actions;
-
- import com.vaadin.testbench.elements.TableElement;
- import com.vaadin.tests.tb3.MultiBrowserTest;
-
- /**
- * Tests that clicking on active fields doesn't change Table selection, nor does
- * dragging rows.
- *
- * @author Vaadin Ltd
- */
- public class TableClickAndDragOnIconAndComponentsTest extends MultiBrowserTest {
-
- @Override
- public void setup() throws Exception {
- super.setup();
-
- openTestURL();
- }
-
- @Test
- public void clickOnTextFieldDoesNotSelectRow() {
- selectRow(1);
-
- clickOnTextField(2);
- assertThatFocusTextFieldHasText("foo 2foo");
-
- assertThat(getSelectedRowTextValue(), is(1));
- }
-
- @Test
- public void clickOnReadOnlyTextFieldSelectsRow() {
- selectRow(1);
-
- clickOnReadOnlyTextField(2);
-
- assertThat(getSelectedRowTextValue(), is(2));
- }
-
- @Test
- public void clickOnLabelSelectsRow() {
- selectRow(1);
-
- clickOnLabel(2);
-
- assertThat(getSelectedRowTextValue(), is(2));
- }
-
- @Test
- public void clickOnEmbeddedIconSelectsRow() {
- selectRow(1);
-
- clickOnEmbeddedIcon(2);
-
- assertThat(getSelectedRowTextValue(), is(2));
- }
-
- @Test
- public void dragAndDroppingRowDoesNotSelectRow() {
- selectRow(1);
-
- moveRow(0, 3);
-
- assertThat(getSelectedRowTextValue(), is(1));
- assertThat(getSelectedRowIndex(), is(0));
- }
-
- @Test
- public void dragAndDroppingSelectedRowStaysSelected() {
- selectRow(1);
-
- moveRow(1, 4);
-
- assertThat(getSelectedRowTextValue(), is(1));
- assertThat(getSelectedRowIndex(), is(4));
- }
-
- private void assertThatFocusTextFieldHasText(String text) {
- List<WebElement> focused = getTable()
- .findElements(By.className("v-textfield-focus"));
-
- assertThat(focused.get(0).getAttribute("value"), is(text));
- }
-
- private int getSelectedRowTextValue() {
- WebElement selectedRow = getSelectedRow();
-
- // i.e. 'red 1foo'
- String text = getText(selectedRow, 2);
-
- return Integer.parseInt(text.substring(4, 5));
- }
-
- private String getText(WebElement row, int column) {
- List<WebElement> cellContents = getCellContents(row);
-
- return cellContents.get(column).getText();
- }
-
- private List<WebElement> getCellContents(WebElement row) {
- return row.findElements(By.className("v-table-cell-content"));
- }
-
- private WebElement getSelectedRow() {
- return getTable().findElement(By.className("v-selected"));
- }
-
- private void clickOnTextField(int row) {
- WebElement textField = getTextField(row, 0);
-
- textField.click();
- }
-
- private void clickOnReadOnlyTextField(int row) {
- WebElement textField = getTextField(row, 1);
-
- textField.click();
- }
-
- private WebElement getTextField(int row, int index) {
- return getElement(row, index, "v-textfield");
- }
-
- private WebElement getElement(int row, String className) {
- return getElement(row, 0, className);
- }
-
- private WebElement getElement(int row, int index, String className) {
- return getRows().get(row).findElements(By.className(className))
- .get(index);
- }
-
- private List<WebElement> getRows() {
- return getTable().findElement(By.className("v-table-body"))
- .findElements(By.tagName("tr"));
- }
-
- private void selectRow(int row) {
- TableElement table = getTable();
-
- table.getCell(row, 2).click();
- }
-
- private TableElement getTable() {
- return $(TableElement.class).first();
- }
-
- private void clickOnLabel(int row) {
- WebElement label = getElement(row, "v-label");
- label.click();
- }
-
- private void clickOnEmbeddedIcon(int row) {
- WebElement embeddedIcon = getElement(row, "v-embedded");
- embeddedIcon.click();
- }
-
- private void moveRow(int from, int to) {
- List<WebElement> rows = getRows();
- List<WebElement> cellContents = getCellContents(rows.get(from));
-
- new Actions(getDriver()).moveToElement(cellContents.get(2))
- .clickAndHold().moveToElement(rows.get(to)).release().perform();
- }
-
- private int getSelectedRowIndex() {
- List<WebElement> rows = getRows();
-
- // Unfortunately rows.getIndexOf(getSelectedRow()) doesn't work.
- for (WebElement r : rows) {
- if (r.getAttribute("class").contains("v-selected")) {
- return rows.indexOf(r);
- }
- }
-
- return -1;
- }
- }
|