]> source.dussan.org Git - vaadin-framework.git/commitdiff
Add workarounds for Firefox in context click tests (#8547)
authorHenri Sara <henri.sara@gmail.com>
Mon, 13 Feb 2017 14:48:15 +0000 (16:48 +0200)
committerGitHub <noreply@github.com>
Mon, 13 Feb 2017 14:48:15 +0000 (16:48 +0200)
uitest-common/src/main/java/com/vaadin/tests/tb3/AbstractTB3Test.java
uitest/src/test/java/com/vaadin/tests/components/checkbox/CheckboxContextClickTest.java
uitest/src/test/java/com/vaadin/tests/contextclick/AbstractContextClickTest.java
uitest/src/test/java/com/vaadin/tests/contextclick/GridContextClickTest.java

index 6a82492da5f698d38838e7106a1eca608ffba7f3..0322d76949e716cefc415545154bfcfa43d7dd32 100644 (file)
@@ -1012,6 +1012,17 @@ public abstract class AbstractTB3Test extends ParallelTest {
         }
     }
 
+    protected void contextClickElement(WebElement element) {
+        if (BrowserUtil.isFirefox(getDesiredCapabilities())) {
+            // Workaround for Selenium/TB and Firefox 45 issue
+            getCommandExecutor().executeScript(
+                    "var ev = document.createEvent('HTMLEvents'); ev.initEvent('contextmenu', true, false); arguments[0].dispatchEvent(ev);",
+                    element);
+        } else {
+            new Actions(getDriver()).contextClick(element).perform();
+        }
+    }
+
     protected boolean isLoadingIndicatorVisible() {
         WebElement loadingIndicator = findElement(
                 By.className("v-loading-indicator"));
index 1842d9659bb7c017d615825dfdd05fc05b5cf1d4..0c44732ee46a87eed9374cff59e6c3918fcbbece 100644 (file)
@@ -20,7 +20,6 @@ import java.util.List;
 import org.junit.Assert;
 import org.junit.Test;
 import org.openqa.selenium.WebElement;
-import org.openqa.selenium.interactions.Actions;
 import org.openqa.selenium.remote.DesiredCapabilities;
 
 import com.vaadin.testbench.By;
@@ -42,11 +41,11 @@ public class CheckboxContextClickTest extends MultiBrowserTest {
         WebElement input = checkbox.findElement(By.xpath("input"));
         WebElement label = checkbox.findElement(By.xpath("label"));
 
-        new Actions(getDriver()).contextClick(input).perform();
+        contextClickElement(input);
         Assert.assertEquals("1. checkbox context clicked", getLogRow(0));
         Assert.assertEquals("checked", checkbox.getValue());
 
-        new Actions(getDriver()).contextClick(label).perform();
+        contextClickElement(label);
         Assert.assertEquals("2. checkbox context clicked", getLogRow(0));
         Assert.assertEquals("checked", checkbox.getValue());
     }
index 0eda88863ddec0957eda6cc24baf459a3e5c0596..8497ec8eed041b3bda51f77e75b4b40e5bb22d20 100644 (file)
@@ -31,6 +31,7 @@ import org.openqa.selenium.remote.DesiredCapabilities;
 
 import com.vaadin.testbench.elements.AbstractComponentElement;
 import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.parallel.BrowserUtil;
 import com.vaadin.testbench.parallel.TestCategory;
 import com.vaadin.tests.tb3.MultiBrowserTest;
 
@@ -137,13 +138,26 @@ public abstract class AbstractContextClickTest extends MultiBrowserTest {
      * @param e
      *            web element
      * @param xCoord
-     *            x coordinate
+     *            x coordinate relative to the top-left corner of the element
      * @param yCoord
-     *            y coordinate
+     *            y coordinate relative to the top-left corner of the element
      */
     protected void contextClick(WebElement e, int xCoord, int yCoord) {
-        new Actions(getDriver()).moveToElement(e, xCoord, yCoord).contextClick()
-                .moveByOffset(-5, -5).click().perform();
+        if (BrowserUtil.isFirefox(getDesiredCapabilities())) {
+            // Workaround for Selenium/TB and Firefox 45 issue
+            int x = e.getLocation().getX() + xCoord;
+            int y = e.getLocation().getY() + yCoord;
+            getCommandExecutor().executeScript(
+                    "var ev = document.createEvent('MouseEvents'); ev.initMouseEvent('contextmenu', true, true, document.defaultView, 1, arguments[1], arguments[2], arguments[1], arguments[2], false, false, false, false, 2, null); arguments[0].dispatchEvent(ev);",
+                    e, x, y);
+            // make sure browser context menu does not block the test
+            getCommandExecutor().executeScript(
+                    "var ev = document.createEvent('MouseEvents'); ev.initMouseEvent('click', true, true, document.defaultView, 1, arguments[1]-5, arguments[2]-5, arguments[1]-5, arguments[2]-5, false, false, false, false, 1, null); arguments[0].dispatchEvent(ev);",
+                    e, x, y);
+        } else {
+            new Actions(getDriver()).moveToElement(e, xCoord, yCoord)
+                    .contextClick().moveByOffset(-5, -5).click().perform();
+        }
     }
 
 }
index 024633b499521d6f4b9271651f4abae60b3b399d..2ad0c6a114b3c8b86dfd47a0caeb0dfb72a4aaaa 100644 (file)
@@ -21,8 +21,8 @@ import org.junit.Ignore;
 import org.junit.Test;
 import org.openqa.selenium.WebElement;
 
-import com.vaadin.testbench.elements.GridElement;
 import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.GridElement;
 
 public class GridContextClickTest extends AbstractContextClickTest {