package com.vaadin.tests.components.table; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.ui.ExpectedCondition; import com.vaadin.testbench.By; import com.vaadin.testbench.elements.TableElement; import com.vaadin.tests.tb3.MultiBrowserTest; public class ReloadWidgetsTest extends MultiBrowserTest { private int rowHeight = -1; private WebElement wrapper; @Override public void setup() throws Exception { super.setup(); openTestURL(); TableElement table = $(TableElement.class).id("table"); rowHeight = table.getCell(1, 0).getLocation().getY() - table.getCell(0, 0).getLocation().getY(); wrapper = findElement(By.className("v-table-body-wrapper")); } @Test public void testScrollingThenUpdatingContents() throws Exception { // Scroll down to row 44 so that we get the cut-off point where the // problem becomes apparent testBenchElement(wrapper).scroll(44 * rowHeight); waitForScrollToFinish(); // Assert that we have the button widget. Assert.assertTrue( "Button widget was not found after scrolling for the first time", !findElements(By.id("46")).isEmpty()); // Now refresh the container contents WebElement refreshButton = findElement(By.id("refresh")); refreshButton.click(); // Again scroll down to row 44 so we get the cut-off point visible testBenchElement(wrapper).scroll(44 * rowHeight); waitForScrollToFinish(); // Assert that we still get the button Assert.assertTrue( "Button widget was not found after refreshing container items.", !findElements(By.id("46")).isEmpty()); } /** * Waits until the scroll position indicator goes away, signifying that all * the required rows have been fetched. */ private void waitForScrollToFinish() { waitUntil(new ExpectedCondition<Boolean>() { @Override public Boolean apply(WebDriver input) { List<WebElement> elements = findElements( By.className("v-table-scrollposition")); return elements.isEmpty() || !elements.get(0).isDisplayed(); } @Override public String toString() { // Timed out after 10 seconds waiting for ... return "scroll position indicator to vanish"; } }); } }