]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix broken test for RadioButtonGroup and CheckBoxGroup (#7970)
authorPekka Hyvönen <pekka@vaadin.com>
Tue, 13 Dec 2016 14:13:05 +0000 (16:13 +0200)
committerGitHub <noreply@github.com>
Tue, 13 Dec 2016 14:13:05 +0000 (16:13 +0200)
Selection by clicking options was broken on Chrome 40 on Windows.
Switched the custom element to extend corresponding elements from TestBench API.

uitest-common/src/main/java/com/vaadin/testbench/customelements/CheckBoxGroupElement.java
uitest-common/src/main/java/com/vaadin/testbench/customelements/RadioButtonGroupElement.java
uitest/src/test/java/com/vaadin/tests/components/checkboxgroup/CheckBoxGroupFocusBlurTest.java
uitest/src/test/java/com/vaadin/tests/components/radiobuttongroup/RadioButtonGroupFocusBlurTest.java

index 9b234fa1cdb0c0c57bc3fe23f4114828a8f66f5d..e8a05cb194bba25d72836ef5461f466822b4f373 100644 (file)
@@ -21,31 +21,19 @@ import java.util.List;
 import org.openqa.selenium.WebElement;
 
 import com.vaadin.testbench.By;
-import com.vaadin.testbench.elements.AbstractSelectElement;
-import com.vaadin.testbench.elementsbase.ServerClass;
 
 /**
  * TestBench element supporting CheckBoxGroup
  *
  * @author Vaadin Ltd
  */
-
-@ServerClass("com.vaadin.ui.CheckBoxGroup")
-public class CheckBoxGroupElement extends AbstractSelectElement {
+public class CheckBoxGroupElement
+        extends com.vaadin.testbench.elements.CheckBoxGroupElement {
     private static org.openqa.selenium.By byButtonSpan = By
             .className("v-select-option");
     private static org.openqa.selenium.By byLabel = By.tagName("label");
     private static org.openqa.selenium.By byInput = By.tagName("input");
 
-    public List<String> getOptions() {
-        List<String> optionTexts = new ArrayList<>();
-        List<WebElement> options = findElements(byButtonSpan);
-        for (WebElement option : options) {
-            optionTexts.add(option.findElement(byLabel).getText());
-        }
-        return optionTexts;
-    }
-
     public List<String> getOptionsCssClasses() {
         List<String> optionTexts = new ArrayList<>();
         List<WebElement> options = findElements(byButtonSpan);
@@ -70,26 +58,6 @@ public class CheckBoxGroupElement extends AbstractSelectElement {
         return icons;
     }
 
-    public void selectByText(String text) throws ReadOnlyException {
-        if (isReadOnly()) {
-            throw new ReadOnlyException();
-        }
-        List<WebElement> options = findElements(byButtonSpan);
-        for (int i = 0; i < options.size(); i++) {
-            WebElement option = options.get(i);
-            if (text.equals(option.findElement(byLabel).getText())) {
-                option.findElement(byInput).click();
-
-                // Seems like this is needed because of #19753
-                waitForVaadin();
-
-                // Toggling selection causes the DOM to be rebuilt, so fetch new
-                // items and continue iterating from the same index
-                options = findElements(byButtonSpan);
-            }
-        }
-    }
-
     /**
      * Return list of the selected options in the checkbox group
      *
index f6bb4d93f78f8641300ea8d20e942ac52e9affd7..ce62ddd4bec786dc34bd40557a89462b4dd172eb 100644 (file)
  */
 package com.vaadin.testbench.customelements;
 
-import com.vaadin.testbench.By;
-import com.vaadin.testbench.elements.AbstractSelectElement;
-import com.vaadin.testbench.elementsbase.ServerClass;
-import org.openqa.selenium.WebElement;
-
 import java.util.ArrayList;
 import java.util.List;
 
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.By;
+
 /**
  * TestBench element supporting RadioButtonGroup
  *
  * @author Vaadin Ltd
  */
 
-@ServerClass("com.vaadin.ui.RadioButtonGroup")
-public class RadioButtonGroupElement extends AbstractSelectElement {
+public class RadioButtonGroupElement
+        extends com.vaadin.testbench.elements.RadioButtonGroupElement {
     private static org.openqa.selenium.By byButtonSpan = By
             .className("v-select-option");
-    private static org.openqa.selenium.By byLabel = By.tagName("label");
-    private static org.openqa.selenium.By byInput = By.tagName("input");
-
-    public List<String> getOptions() {
-        List<String> optionTexts = new ArrayList<>();
-        List<WebElement> options = findElements(byButtonSpan);
-        for (WebElement option : options) {
-            optionTexts.add(option.findElement(byLabel).getText());
-        }
-        return optionTexts;
-    }
-
-    public void selectByText(String text) throws ReadOnlyException {
-        if (isReadOnly()) {
-            throw new ReadOnlyException();
-        }
-        List<WebElement> options = findElements(byButtonSpan);
-        for (int i = 0; i < options.size(); i++) {
-            WebElement option = options.get(i);
-            if (text.equals(option.findElement(byLabel).getText())) {
-                option.findElement(byInput).click();
-
-                // Seems like this is needed because of #19753
-                waitForVaadin();
-
-                // Toggling selection causes the DOM to be rebuilt, so fetch new
-                // items and continue iterating from the same index
-                options = findElements(byButtonSpan);
-            }
-        }
-    }
 
     /**
      * Return list of the selected options in the radiobutton group
index e0929eb478b87a802a13521aa54a32a9eb5c8f29..734a80eb2a6351f7f10c5299c0b2b2e7c54c9d46 100644 (file)
@@ -40,12 +40,12 @@ public class CheckBoxGroupFocusBlurTest extends MultiBrowserTest {
 
         List<WebElement> checkBoxes = $(CheckBoxGroupElement.class).first()
                 .findElements(By.tagName("input"));
-        checkBoxes.get(0).click();
+        $(CheckBoxGroupElement.class).first().selectByText("1");
 
         // Focus event is fired
         Assert.assertTrue(logContainsText("1. Focus Event"));
 
-        checkBoxes.get(1).click();
+        $(CheckBoxGroupElement.class).first().selectByText("2");
         // click on the second checkbox doesn't fire anything
         Assert.assertFalse(logContainsText("2."));
 
@@ -71,7 +71,7 @@ public class CheckBoxGroupFocusBlurTest extends MultiBrowserTest {
         // blur event is fired
         Assert.assertTrue(logContainsText("2. Blur Event"));
 
-        checkBoxes.get(3).click();
+        $(CheckBoxGroupElement.class).first().selectByText("4");
         // Focus event is fired
         Assert.assertTrue(logContainsText("3. Focus Event"));
 
index 30ebf6abd7064577de6bb744740eac9625bf6cc4..16889cfbf0ccec4e0937da9ee43a19f6c874c46d 100644 (file)
@@ -38,14 +38,16 @@ public class RadioButtonGroupFocusBlurTest extends MultiBrowserTest {
     public void focusBlurEvents() {
         openTestURL();
 
-        List<WebElement> radioButtons = $(RadioButtonGroupElement.class).first()
+        RadioButtonGroupElement radioButtonGroup = $(
+                RadioButtonGroupElement.class).first();
+        List<WebElement> radioButtons = radioButtonGroup
                 .findElements(By.tagName("input"));
-        radioButtons.get(0).click();
+        radioButtonGroup.selectByText("1");
 
         // Focus event is fired
         Assert.assertTrue(logContainsText("1. Focus Event"));
 
-        radioButtons.get(1).click();
+        radioButtonGroup.selectByText("2");
         // click on the second radio button doesn't fire anything
         Assert.assertFalse(logContainsText("2."));
 
@@ -60,8 +62,7 @@ public class RadioButtonGroupFocusBlurTest extends MultiBrowserTest {
         Assert.assertFalse(logContainsText("2."));
 
         // click to label of a radio button
-        $(RadioButtonGroupElement.class).first()
-                .findElements(By.tagName("label")).get(2).click();
+        radioButtonGroup.findElements(By.tagName("label")).get(2).click();
         // no new events
         Assert.assertFalse(logContainsText("2."));
 
@@ -70,7 +71,7 @@ public class RadioButtonGroupFocusBlurTest extends MultiBrowserTest {
         // blur event is fired
         Assert.assertTrue(logContainsText("2. Blur Event"));
 
-        radioButtons.get(3).click();
+        radioButtonGroup.selectByText("4");
         // Focus event is fired
         Assert.assertTrue(logContainsText("3. Focus Event"));