diff options
author | Artur Signell <artur@vaadin.com> | 2016-04-16 13:47:26 +0300 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2016-05-02 12:44:00 +0000 |
commit | 034b61de038532aa4f444e3a4740da75459f8dda (patch) | |
tree | 2141785d39990d531af4b1dc29fd0236777512a5 /uitest | |
parent | f6284f7681518838a7076bed3b1049f1c05e0528 (diff) | |
download | vaadin-framework-034b61de038532aa4f444e3a4740da75459f8dda.tar.gz vaadin-framework-034b61de038532aa4f444e3a4740da75459f8dda.zip |
Take body scrolling into account when deciding combobox popup position (#19162)
For standard standalone Vaadin apps, the body scroll is not scrollable. For
these this change should have no effect.
In embedded cases and when running as portlet, the body is scrollable. For
these cases, the popup is now correctly shown below the combo box when
there is space.
Change-Id: Ia183f4f2988e6593634f6e9735fd58abbd4a1da1
Diffstat (limited to 'uitest')
3 files changed, 98 insertions, 0 deletions
diff --git a/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxPopupWhenBodyScrolls.java b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxPopupWhenBodyScrolls.java new file mode 100644 index 0000000000..ed8212b231 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/combobox/ComboBoxPopupWhenBodyScrolls.java @@ -0,0 +1,51 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.combobox; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.ComboBox; +import com.vaadin.ui.Label; + +public class ComboBoxPopupWhenBodyScrolls extends AbstractTestUI { + + @Override + protected void setup(VaadinRequest request) { + getPage().getStyles().add( + "body.v-generated-body { overflow: auto;height:auto;}"); + getPage() + .getStyles() + .add("body.v-generated-body .v-ui.v-scrollable{ overflow: visible;height:auto !important;}"); + ComboBox cb = new ComboBox(); + for (int i = 0; i < 10; i++) { + cb.addItem("Item " + i); + } + + Label spacer = new Label("foo"); + spacer.setHeight("2000px"); + addComponent(spacer); + addComponent(cb); + spacer = new Label("foo"); + spacer.setHeight("2000px"); + addComponent(spacer); + // Chrome requires document.scrollTop (<body>) + // Firefox + IE wants document.documentElement.scrollTop (<html>) + getPage() + .getJavaScript() + .execute( + "document.body.scrollTop=1800;document.documentElement.scrollTop=1800;"); + } +} diff --git a/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxPopupWhenBodyScrollsTest.java b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxPopupWhenBodyScrollsTest.java new file mode 100644 index 0000000000..0b1568b9b1 --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/combobox/ComboBoxPopupWhenBodyScrollsTest.java @@ -0,0 +1,40 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.components.combobox; + +import org.junit.Assert; +import org.junit.Test; +import org.openqa.selenium.WebElement; + +import com.vaadin.tests.tb3.MultiBrowserTest; +import com.vaadin.tests.tb3.newelements.ComboBoxElement; + +public class ComboBoxPopupWhenBodyScrollsTest extends MultiBrowserTest { + + @Test + public void popupBelow() { + openTestURL(); + ComboBoxElement combobox = $(ComboBoxElement.class).first(); + combobox.openPopup(); + WebElement popup = $(ComboBoxElement.class).first() + .getSuggestionPopup(); + + int comboboxTop = combobox.getLocation().getY(); + int popupTop = popup.getLocation().getY(); + Assert.assertTrue("Popup should be below combobox", + popupTop > comboboxTop); + } +} diff --git a/uitest/src/test/java/com/vaadin/tests/tb3/newelements/ComboBoxElement.java b/uitest/src/test/java/com/vaadin/tests/tb3/newelements/ComboBoxElement.java index 6a0f164b13..4a84c2bbc1 100644 --- a/uitest/src/test/java/com/vaadin/tests/tb3/newelements/ComboBoxElement.java +++ b/uitest/src/test/java/com/vaadin/tests/tb3/newelements/ComboBoxElement.java @@ -10,6 +10,9 @@ import com.vaadin.testbench.elementsbase.ServerClass; public class ComboBoxElement extends com.vaadin.testbench.elements.ComboBoxElement { + private static org.openqa.selenium.By bySuggestionPopup = By + .vaadin("#popup"); + public WebElement getInputField() { return findElement(By.vaadin("#textbox")); } @@ -24,6 +27,10 @@ public class ComboBoxElement extends getInputField().clear(); } + public WebElement getSuggestionPopup() { + return findElement(bySuggestionPopup); + } + @Override public void sendKeys(CharSequence... keysToSend) { sendKeys(50, keysToSend); |