diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index b5abb92..6af49f6 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -21,12 +21,35 @@ on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
-
+ services:
+ hub:
+ image: selenium/hub:4.16.1-20231219
+ ports:
+ - "4442:4442"
+ - "4443:4443"
+ - "4444:4444"
+ firefox:
+ image: selenium/node-firefox:4.16.1-20231219
+ env:
+ SE_EVENT_BUS_HOST: hub
+ SE_EVENT_BUS_PUBLISH_PORT: 4442
+ SE_EVENT_BUS_SUBSCRIBE_PORT: 4443
+ chrome:
+ image: selenium/node-chrome:4.16.1-20231219
+ env:
+ SE_EVENT_BUS_HOST: hub
+ SE_EVENT_BUS_PUBLISH_PORT: 4442
+ SE_EVENT_BUS_SUBSCRIBE_PORT: 4443
steps:
- - uses: actions/checkout@v2
-
- # TODO: cache dependencies (taking into accounts: Maven plugins, snapshots, etc.)
-
- - name: Build with Maven
- run: JAVA_HOME=$JAVA_HOME_8_X64 mvn -V -B -ntp -U -e verify
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Setup JDK 11
+ id: setup-java-11
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'temurin'
+ java-version: '11'
+ cache: 'maven'
+ - name: Build and test with Maven
+ run: mvn -V -B -ntp -U -e verify -Pwebdriver-tests -Dwebdriver.test.host=$(hostname)
diff --git a/gwt-core-gwt2-tests/pom.xml b/gwt-core-gwt2-tests/pom.xml
index 6d9f504..2343bf8 100644
--- a/gwt-core-gwt2-tests/pom.xml
+++ b/gwt-core-gwt2-tests/pom.xml
@@ -76,6 +76,13 @@
gwt-core
test
+
+
+ org.seleniumhq.selenium
+ selenium-remote-driver
+ 4.16.1
+ test
+
@@ -100,4 +107,40 @@
+
+
+
+
+ webdriver-tests
+
+ localhost
+ localhost
+ 4444
+ firefox,chrome
+
+
+
+
+ net.ltgt.gwt.maven
+ gwt-maven-plugin
+
+
+ ${webdriver.test.host}
+
+
+ -runStyle
+ org.gwtproject.junit.RunStyleRemoteWebDriver:http://${webdriver.hub.host}:${webdriver.hub.port}?${webdriver.browsers}
+
+
+
+
+
+
+
diff --git a/gwt-core-gwt2-tests/src/test/java/org/gwtproject/junit/RunStyleAbstractRemoteWebDriver.java b/gwt-core-gwt2-tests/src/test/java/org/gwtproject/junit/RunStyleAbstractRemoteWebDriver.java
new file mode 100644
index 0000000..1a8ebce
--- /dev/null
+++ b/gwt-core-gwt2-tests/src/test/java/org/gwtproject/junit/RunStyleAbstractRemoteWebDriver.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright © 2019 The GWT Project Authors
+ *
+ * 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 org.gwtproject.junit;
+
+import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.junit.JUnitShell;
+import com.google.gwt.junit.RunStyle;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import org.openqa.selenium.remote.DesiredCapabilities;
+import org.openqa.selenium.remote.RemoteWebDriver;
+
+public abstract class RunStyleAbstractRemoteWebDriver extends RunStyle {
+
+ public static class RemoteWebDriverConfiguration {
+ private String remoteWebDriverUrl;
+ private List