package com.vaadin.tests.elements.table; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; import com.vaadin.testbench.elements.TableElement; import com.vaadin.testbench.elements.TableHeaderElement; import com.vaadin.testbench.parallel.BrowserUtil; import com.vaadin.tests.tb3.MultiBrowserTest; public class GetRowHeaderTest extends MultiBrowserTest { TableElement table; private static final int COLUMN_INDEX = 0; @Override protected Class<?> getUIClass() { return TableScroll.class; } @Before public void init() { openTestURL(); table = $(TableElement.class).first(); } @Test public void testGetRowHeaderCaption() { TableHeaderElement header = table.getHeaderCell(COLUMN_INDEX); String expected = "property0"; String actual = header.getCaption(); Assert.assertEquals( "TableHeaderElement.getCaption() returns wrong value.", expected, actual); } // Test that clicking on the header sorts the column @Test public void testTableRowHeaderSort() { TableHeaderElement header = table.getHeaderCell(COLUMN_INDEX); // sort in asc order header.click(); table.waitForVaadin(); // sort in desc order header.click(); table.waitForVaadin(); String expected = "col=0 row=99"; String actual = table.getCell(0, COLUMN_INDEX).getText(); Assert.assertEquals( "TableHeaderElement.toggleSort() did not sort column " + COLUMN_INDEX, expected, actual); } @Test public void testTableRowHeaderGetHandle() { TableHeaderElement header = table.getHeaderCell(COLUMN_INDEX); int initialWidth = header.getSize().width; WebElement handle = header.getResizeHandle(); Actions builder = new Actions(getDriver()); /* * To workaround a bug with clicking on small elements(not precise * cursor positioning) in IE we do the following: 1. Extend the resize * handle element (it's initial width is 3) 2. Resize the column. 3. * Resize the handle back to initial value. */ if (BrowserUtil.isIE(getDesiredCapabilities())) { int initHandleWidth = handle.getSize().width; setElementWidth(handle, 20); handle = header.getResizeHandle(); builder.clickAndHold(handle).moveByOffset(-20, 0).release().build() .perform(); setElementWidth(handle, initHandleWidth); } else { builder.clickAndHold(handle).moveByOffset(-20, 0).release().build() .perform(); } header = table.getHeaderCell(COLUMN_INDEX); int widthAfterResize = header.getSize().width; Assert.assertTrue( "The column with index " + COLUMN_INDEX + " was not resized.", initialWidth > widthAfterResize); } @Test(expected = NoSuchElementException.class) public void testGetHeaderCellException() { table.getHeaderCell(-10); } private void setElementWidth(WebElement elem, int width) { JavascriptExecutor js = getCommandExecutor(); String jsScript = "var elem=arguments[0];" + "elem.style.width='" + width + "px';"; js.executeScript(jsScript, elem); } }