]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix wrapping div getting focused in CheckBoxGroup and RadioButtonGroup (#11021)
authorTeemu Suo-Anttila <tsuoanttila@users.noreply.github.com>
Tue, 3 Jul 2018 11:16:51 +0000 (14:16 +0300)
committerIlia Motornyi <elmot@vaadin.com>
Tue, 3 Jul 2018 11:16:51 +0000 (14:16 +0300)
Fixes #9731

client/src/main/java/com/vaadin/client/widgets/ChildFocusAwareFlowPanel.java
uitest/src/test/java/com/vaadin/tests/components/checkboxgroup/CheckBoxGroupFocusTest.java
uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupFocusTest.java

index 244fb5e604fe6168731df201bb10e57e48eaadaa..87350345dea141b9e997c62c5dc61b5d94867323 100644 (file)
@@ -90,6 +90,8 @@ public class ChildFocusAwareFlowPanel extends FocusableFlowPanel
     public ChildFocusAwareFlowPanel() {
         eventBus = new HandlerManager(this);
         getElement().getStyle().setOutlineStyle(OutlineStyle.NONE);
+        // The panel itself should not be focused.
+        getElement().setTabIndex(-1);
         super.addFocusHandler(handler);
         super.addBlurHandler(handler);
     }
index ad9b600a32188cbfb49c9ddabab118b484106a93..742b55210a2b329a3d6f1039d116db97357e9a03 100644 (file)
@@ -1,8 +1,12 @@
 package com.vaadin.tests.components.checkboxgroup;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import org.junit.Assert;
 import org.junit.Test;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.interactions.Actions;
 
 import com.vaadin.testbench.elements.ButtonElement;
 import com.vaadin.testbench.elements.CheckBoxGroupElement;
@@ -27,4 +31,15 @@ public class CheckBoxGroupFocusTest extends FocusTest {
         assertTrue(isFocusInsideElement(checkBoxGroup));
     }
 
+    @Test
+    public void focusDoesNotGoIntoWrapperElement() {
+        openTestURL();
+        new Actions(getDriver()).sendKeys(Keys.TAB, Keys.TAB, Keys.TAB)
+                .perform();
+        assertTrue("Focus not in the second check box group.",
+                isFocusInsideElement($(CheckBoxGroupElement.class).last()));
+        assertEquals("Focus should not be in the wrapping div.", "input",
+                getFocusedElement().getTagName());
+    }
+
 }
index ca5e3565d03d367352553204cb76d2db19ff8ac2..27970740d3827087c34e7929c92469d9aa79d823 100644 (file)
@@ -1,10 +1,15 @@
 package com.vaadin.tests.components.radiobuttongroup;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import org.junit.Assert;
 import org.junit.Test;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.interactions.Actions;
 
 import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.CheckBoxGroupElement;
 import com.vaadin.testbench.elements.RadioButtonGroupElement;
 import com.vaadin.tests.components.FocusTest;
 
@@ -27,4 +32,13 @@ public class RadioButtonGroupFocusTest extends FocusTest {
         assertTrue(isFocusInsideElement(radioButtonGroup2));
     }
 
+    @Test
+    public void focusDoesNotGoIntoWrapperElement() {
+        openTestURL();
+        new Actions(getDriver()).sendKeys(Keys.TAB).perform();
+        assertTrue("Focus not in the second radio button group.",
+                isFocusInsideElement($(RadioButtonGroupElement.class).last()));
+        assertEquals("Focus should not be in the wrapping div.", "input",
+                getFocusedElement().getTagName());
+    }
 }