package com.vaadin.tests.components.absolutelayout;
import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.tests.tb3.MultiBrowserTest;
import org.junit.Assert;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import java.util.Optional;
/**
* Tests for component positioning after width changes from defined to relative
* and relative to defined
*/
public class AbsoluteLayoutResizeComponentsTest extends MultiBrowserTest {
@Test
public void testFullWithComponentWithRightAlignmentShouldMoveRightWhenSettingAbsoluteWidth() {
openTestURL();
String componentId = "expanding-panel";
Optional<WebElement> panelWrapper = getComponentWrapper(componentId);
Assert.assertTrue("No wrapper element found for expanding panel [ID: "
+ componentId + "]", panelWrapper.isPresent());
String left = panelWrapper.get().getCssValue("left");
Assert.assertEquals(
"Component wrapper was missing left:0; from its css positioning",
"0px", left);
WebElement panelComponent = findElement(By.id(componentId));
Assert.assertEquals("Panel is not on the left side of the screen", 0,
panelComponent.getLocation().getX());
// Click button to change component size
$(ButtonElement.class).id(componentId + "-button").click();
// Not testing "left" here as testing for AUTO doesn't work in chrome
// version 40 which calculates the actual left value, testing width
// instead of the wrapper instead
String width = panelWrapper.get().getCssValue("width");
Assert.assertEquals("Width was more that it should have been.", "250px",
width);
Assert.assertNotEquals("Panel is still on the left side of the screen",
0, panelComponent.getLocation().getX());
}
@Test
public void testDefinedWidthComponentShouldExpandToFullWidth() {
openTestURL();
String componentId = "small-panel";
Optional<WebElement> panelWrapper = getComponentWrapper(componentId);
Assert.assertTrue(
"No wrapper element found for panel [ID: " + componentId + "]",
panelWrapper.isPresent());
String width = panelWrapper.get().getCssValue("width");
Assert.assertEquals("Width was more that it should have been.", "250px",
width);
WebElement panelComponent = findElement(By.id(componentId));
Assert.assertNotEquals(
"Panel is positioned to the left side of the screen", 0,
panelComponent.getLocation().getX());
// Click button to change component size
$(ButtonElement.class).id(componentId + "-button").click();
String left = panelWrapper.get().getCssValue("left");
Assert.assertEquals(
"Component wrapper was missing left:0; from its css positioning",
"0px", left);
width = panelWrapper.get().getCssValue("width");
Assert.assertNotEquals("Width hasn't changed from the initial value.",
"250px", width);
Assert.assertEquals("Panel is not on the left side of the screen", 0,
panelComponent.getLocation().getX());
}
@Test
public void testDefinedWidthAbsoluteLayoutToFullWidthShouldBeFullWidth() {
openTestURL();
String componentId = "absolute-expanding";
Optional<WebElement> panelWrapper = getComponentWrapper(componentId);
Assert.assertTrue("No wrapper element found for AbsoluteLayout [ID: "
+ componentId + "].", panelWrapper.isPresent());
String width = panelWrapper.get().getCssValue("width");
Assert.assertEquals("Width was more that it should have been.", "250px",
width);
WebElement panelComponent = findElement(By.id(componentId));
Assert.assertNotEquals(
"Panel is positioned to the left side of the screen", 0,
panelComponent.getLocation().getX());
// Click button to change component size
$(ButtonElement.class).id(componentId + "-button").click();
String left = panelWrapper.get().getCssValue("left");
Assert.assertEquals(
"Component wrapper was missing left:0; from its css positioning",
"0px", left);
width = panelWrapper.get().getCssValue("width");
Assert.assertNotEquals("Width hasn't changed from the initial value.",
"250px", width);
Assert.assertEquals("Panel is not on the left side of the screen", 0,
panelComponent.getLocation().getX());
}
/**
* Search for the AbsoluteLayout wrapper element that contains component for
* componentId
*
* @param componentId
* Id of component contained in Wrapper component
* @return WrapperComponent or null
*/
private Optional<WebElement> getComponentWrapper(String componentId) {
WebElement panelWrapper = null;
for (WebElement wrapper : findElements(
By.className("v-absolutelayout-wrapper"))) {
// Check if this wrapper contains element with the wanted id.
if (!wrapper.findElements(By.id(componentId)).isEmpty()) {
panelWrapper = wrapper;
break;
}
}
return Optional.ofNullable(panelWrapper);
}
}