Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2709740

Browse files
bonigarciadiemol
andauthored
Run Java test examples in CI (SeleniumHQ#1081)
* [java] Update setup for Java examples * [java] Update/fix Java examples * Include workflow to run Java tests on CI * [java] Include explicit wait in CDP remote test * [java] Use the Internet instead of Google in CDP test to avoid ElementNotInteractable * [java] Remove non cross-platform logic in Java tests * Rename job name in the workflow for runing the test examples * [java] Include extra logic for reduced browser screen (e.g. Windows in CI) * [java] Remove unnecessary logger Co-authored-by: Diego Molina <[email protected]>
1 parent 0bda200 commit 2709740

File tree

10 files changed

+161
-75
lines changed

10 files changed

+161
-75
lines changed

.github/workflows/run-examples.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: Run test examples
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- trunk
7+
push:
8+
branches:
9+
- trunk
10+
11+
env:
12+
DISPLAY: :99
13+
14+
jobs:
15+
test_examples:
16+
runs-on: ${{ matrix.os }}
17+
strategy:
18+
matrix:
19+
os: [ ubuntu-latest, windows-latest, macos-latest ]
20+
java: [ 8 ]
21+
steps:
22+
- name: Checkout GitHub repo
23+
uses: actions/checkout@v2
24+
- name: Set up Java
25+
uses: actions/setup-java@v2
26+
with:
27+
distribution: 'temurin'
28+
java-version: ${{ matrix.java }}
29+
- name: Start Xvfb
30+
run: Xvfb :99 &
31+
- name: Run tests
32+
run: |
33+
cd examples/java
34+
mvn -B test
35+

.gitignore

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
public/
33
node_modules
44
.DS_Store
5-
resources/
65
website_and_docs/.hugo_build.lock
76

8-
**/target/*
7+
**/target/*
8+
.classpath
9+
.project
10+
.settings
11+
.gitignore

examples/java/pom.xml

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,43 +6,72 @@
66

77
<groupId>dev.selenium</groupId>
88
<artifactId>selenium-examples</artifactId>
9-
<version>1.0-SNAPSHOT</version>
9+
<version>1.0.0</version>
10+
11+
<properties>
12+
<selenium.version>4.3.0</selenium.version>
13+
<slf4j.version>1.7.36</slf4j.version>
14+
<logback.version>1.2.11</logback.version>
15+
16+
<junit5.version>5.8.2</junit5.version>
17+
<wdm.version>5.2.1</wdm.version>
18+
19+
<maven-surefire-plugin.version>3.0.0-M7</maven-surefire-plugin.version>
20+
21+
<java.version>8</java.version>
22+
<maven.compiler.target>${java.version}</maven.compiler.target>
23+
<maven.compiler.source>${java.version}</maven.compiler.source>
24+
25+
<project.encondig>UTF-8</project.encondig>
26+
<project.build.sourceEncoding>${project.encondig}</project.build.sourceEncoding>
27+
<project.reporting.outputEncoding>${project.encondig}</project.reporting.outputEncoding>
28+
</properties>
1029

1130
<dependencies>
1231
<dependency>
1332
<groupId>org.seleniumhq.selenium</groupId>
1433
<artifactId>selenium-java</artifactId>
15-
<version>4.3.0</version>
34+
<version>${selenium.version}</version>
35+
</dependency>
36+
<dependency>
37+
<groupId>org.seleniumhq.selenium</groupId>
38+
<artifactId>selenium-grid</artifactId>
39+
<version>${selenium.version}</version>
40+
</dependency>
41+
<dependency>
42+
<groupId>org.slf4j</groupId>
43+
<artifactId>slf4j-api</artifactId>
44+
<version>${slf4j.version}</version>
1645
</dependency>
46+
<dependency>
47+
<groupId>ch.qos.logback</groupId>
48+
<artifactId>logback-classic</artifactId>
49+
<version>${logback.version}</version>
50+
</dependency>
51+
1752
<dependency>
1853
<groupId>org.junit.jupiter</groupId>
1954
<artifactId>junit-jupiter-engine</artifactId>
20-
<version>5.8.2</version>
55+
<version>${junit5.version}</version>
2156
<scope>test</scope>
2257
</dependency>
2358
<dependency>
2459
<groupId>io.github.bonigarcia</groupId>
2560
<artifactId>webdrivermanager</artifactId>
26-
<version>5.2.0</version>
61+
<version>${wdm.version}</version>
2762
<scope>test</scope>
2863
</dependency>
2964
</dependencies>
3065

31-
<properties>
32-
<maven.compiler.source>8</maven.compiler.source>
33-
<maven.compiler.target>8</maven.compiler.target>
34-
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
35-
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
36-
</properties>
37-
3866
<build>
3967
<plugins>
4068
<plugin>
4169
<groupId>org.apache.maven.plugins</groupId>
4270
<artifactId>maven-surefire-plugin</artifactId>
43-
<version>2.22.2</version>
71+
<version>${maven-surefire-plugin.version}</version>
4472
<configuration>
4573
<includes>
74+
<include>**/*Test.java</include>
4675
<include>**/*Example.java</include>
4776
</includes>
4877
</configuration>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<configuration>
3+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
4+
<encoder>
5+
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36}.%M\(%line\) - %msg%n</pattern>
6+
</encoder>
7+
</appender>
8+
9+
<logger name="io.github.bonigarcia" level="DEBUG" />
10+
<logger name="io" level="WARN" />
11+
12+
<root level="INFO">
13+
<appender-ref ref="STDOUT" />
14+
</root>
15+
16+
</configuration>

examples/java/src/test/java/dev/selenium/actions_api/ActionsTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,13 @@ public void releasesAll() {
4040
Actions actions = new Actions(driver);
4141
actions.clickAndHold(clickable)
4242
.keyDown(Keys.SHIFT)
43-
.keyDown(Keys.ALT)
4443
.sendKeys("a")
4544
.perform();
4645

4746
((RemoteWebDriver) driver).resetInputState();
4847

4948
actions.sendKeys("a").perform();
50-
Assertions.assertEquals("Å", String.valueOf(clickable.getAttribute("value").charAt(0)));
49+
Assertions.assertEquals("A", String.valueOf(clickable.getAttribute("value").charAt(0)));
5150
Assertions.assertEquals("a", String.valueOf(clickable.getAttribute("value").charAt(1)));
5251
}
5352
}

examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,15 @@ public void hovers() {
113113
@Test
114114
public void moveByOffsetFromElement() {
115115
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
116+
driver.manage().window().fullscreen();
116117

117118
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
118119
new Actions(driver)
119-
.moveToElement(tracker, 8, 11)
120+
.moveToElement(tracker, 8, 0)
120121
.perform();
121122

122123
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
123124
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
124-
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 100 - 11) < 2);
125125
}
126126

127127
@Test

examples/java/src/test/java/dev/selenium/augmenter/CdpRemoteWebDriverTest.java

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,14 @@
33
import static org.openqa.selenium.devtools.events.CdpEventTypes.domMutation;
44
import static org.openqa.selenium.remote.http.Contents.utf8String;
55

6-
import com.google.common.net.MediaType;
6+
import java.net.MalformedURLException;
7+
import java.net.URL;
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
import java.util.concurrent.CompletableFuture;
11+
import java.util.concurrent.CountDownLatch;
12+
import java.util.concurrent.TimeUnit;
13+
import java.util.concurrent.atomic.AtomicReference;
714

815
import org.junit.jupiter.api.AfterEach;
916
import org.junit.jupiter.api.Assertions;
@@ -23,27 +30,24 @@
2330
import org.openqa.selenium.devtools.NetworkInterceptor;
2431
import org.openqa.selenium.devtools.events.DomMutationEvent;
2532
import org.openqa.selenium.devtools.v85.log.Log;
33+
import org.openqa.selenium.grid.Main;
2634
import org.openqa.selenium.logging.EventType;
2735
import org.openqa.selenium.logging.HasLogEvents;
36+
import org.openqa.selenium.net.PortProber;
2837
import org.openqa.selenium.remote.Augmenter;
2938
import org.openqa.selenium.remote.RemoteWebDriver;
3039
import org.openqa.selenium.remote.http.HttpResponse;
3140
import org.openqa.selenium.remote.http.Route;
3241

33-
import io.github.bonigarcia.wdm.WebDriverManager;
42+
import com.google.common.net.MediaType;
3443

35-
import java.net.MalformedURLException;
36-
import java.net.URL;
37-
import java.util.ArrayList;
38-
import java.util.List;
39-
import java.util.concurrent.CountDownLatch;
40-
import java.util.concurrent.TimeUnit;
41-
import java.util.concurrent.atomic.AtomicReference;
42-
import java.util.function.Consumer;
44+
import io.github.bonigarcia.wdm.WebDriverManager;
4345

4446
public class CdpRemoteWebDriverTest {
4547

46-
private static WebDriver driver;
48+
private static URL gridUrl;
49+
50+
private WebDriver driver;
4751

4852
@BeforeAll
4953
static void setDriver() {
@@ -52,10 +56,11 @@ static void setDriver() {
5256

5357
@BeforeEach
5458
public void setup() throws MalformedURLException {
55-
// Download the latest Grid jar from https://www.selenium.dev/downloads/
56-
// Run the Grid jar in any one of the modes by referring to https://www.selenium.dev/documentation/grid/getting_started/
57-
// By Default Grid runs on "http://localhost:4444".
58-
URL gridUrl = new URL("http://localhost:4444");
59+
int port = PortProber.findFreePort();
60+
WebDriverManager.chromedriver().setup();
61+
Main.main(new String[] { "standalone", "--port", String.valueOf(port) });
62+
63+
gridUrl = new URL(String.format("http://localhost:%d/", port));
5964
ChromeOptions options = new ChromeOptions();
6065
driver = new RemoteWebDriver(gridUrl, options);
6166
}
@@ -173,27 +178,28 @@ public void testConsoleLogListener() throws InterruptedException {
173178
Assertions.assertTrue(latch.await(10, TimeUnit.SECONDS));
174179
}
175180

176-
177181
@Test
178-
public void testJsExceptionListener() {
182+
public void testJsExceptionListener() throws Exception {
179183
driver = new Augmenter().augment(driver);
180184
DevTools devTools = ((HasDevTools) driver).getDevTools();
181185
devTools.createSession();
182186

183187
List<JavascriptException> jsExceptionsList = new ArrayList<>();
184-
Consumer<JavascriptException> addEntry = jsExceptionsList::add;
185-
devTools.getDomains().events().addJavascriptExceptionListener(addEntry);
188+
devTools.getDomains().events().addJavascriptExceptionListener(jsExceptionsList::add);
189+
CompletableFuture<JavascriptException> futureJsExc = new CompletableFuture<>();
190+
devTools.getDomains().events().addJavascriptExceptionListener(futureJsExc::complete);
186191

187-
driver.get("https://www.google.com");
188-
WebElement element = driver.findElement(By.linkText("Sign in"));
192+
driver.get("https://the-internet.herokuapp.com/add_remove_elements/");
193+
194+
WebElement element = driver.findElement(By.tagName("button"));
189195

190196
((JavascriptExecutor) driver)
191197
.executeScript("arguments[0].setAttribute(arguments[1], arguments[2]);",
192198
element, "onclick", "throw new Error('Hello, world!')");
193199
element.click();
194200

201+
futureJsExc.get(5, TimeUnit.SECONDS);
195202
Assertions.assertEquals(1, jsExceptionsList.size());
196-
197203
}
198204

199205
@Test
@@ -203,17 +209,18 @@ public void testNetworkInterceptor() {
203209
devTools.createSession();
204210

205211
// Intercept and change response if the request uri contains "google"
206-
NetworkInterceptor interceptor = new NetworkInterceptor(
212+
try (NetworkInterceptor interceptor = new NetworkInterceptor(
207213
driver,
208214
Route.matching(req -> req.getUri().contains("google"))
209215
.to(() -> req -> new HttpResponse()
210216
.setStatus(200)
211217
.addHeader("Content-Type", MediaType.HTML_UTF_8.toString())
212-
.setContent(utf8String("Creamy, delicious cheese!"))));
218+
.setContent(utf8String("Creamy, delicious cheese!"))))) {
213219

214-
driver.get("https://google.com");
220+
driver.get("https://google.com");
215221

216-
String source = driver.getPageSource();
217-
Assertions.assertTrue(source.contains("delicious cheese!"));
222+
String source = driver.getPageSource();
223+
Assertions.assertTrue(source.contains("delicious cheese!"));
224+
}
218225
}
219226
}
Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,41 @@
11
package dev.selenium.getting_started;
22

3-
import org.junit.jupiter.api.Assertions;
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import org.junit.jupiter.api.AfterEach;
6+
import org.junit.jupiter.api.BeforeAll;
7+
import org.junit.jupiter.api.BeforeEach;
48
import org.junit.jupiter.api.Test;
5-
import org.openqa.selenium.By;
69
import org.openqa.selenium.WebDriver;
7-
import org.openqa.selenium.WebElement;
810
import org.openqa.selenium.chrome.ChromeDriver;
911

10-
import java.time.Duration;
12+
import io.github.bonigarcia.wdm.WebDriverManager;
1113

1214
public class FirstScriptTest {
15+
1316
public WebDriver driver;
1417

15-
@Test
16-
public void eightComponents() {
18+
@BeforeAll
19+
public static void setDriver() {
20+
WebDriverManager.chromedriver().setup();
21+
}
22+
23+
@BeforeEach
24+
public void setup() {
1725
driver = new ChromeDriver();
26+
}
27+
28+
@AfterEach
29+
public void quit() {
30+
driver.quit();
31+
}
1832

33+
@Test
34+
public void test() {
1935
driver.get("https://google.com");
2036

2137
String title = driver.getTitle();
22-
Assertions.assertEquals("Google", title);
23-
24-
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));
25-
26-
WebElement searchBox = driver.findElement(By.name("q"));
27-
WebElement searchButton = driver.findElement(By.name("btnK"));
28-
29-
searchBox.sendKeys("Selenium");
30-
searchButton.click();
31-
32-
searchBox = driver.findElement(By.name("q"));
33-
String value = searchBox.getAttribute("value");
34-
Assertions.assertEquals("Selenium", value);
35-
36-
driver.quit();
38+
assertEquals("Google", title);
3739
}
40+
3841
}

examples/java/src/test/java/dev/selenium/getting_started/InstallDriversTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package dev.selenium.getting_started;
22

3-
import io.github.bonigarcia.wdm.WebDriverManager;
4-
import org.junit.jupiter.api.AfterEach;
53
import org.junit.jupiter.api.Disabled;
64
import org.junit.jupiter.api.Test;
75
import org.openqa.selenium.WebDriver;
86
import org.openqa.selenium.chrome.ChromeDriver;
97
import org.openqa.selenium.edge.EdgeDriver;
108
import org.openqa.selenium.firefox.FirefoxDriver;
119
import org.openqa.selenium.ie.InternetExplorerDriver;
12-
import org.openqa.selenium.safari.SafariDriver;
10+
11+
import io.github.bonigarcia.wdm.WebDriverManager;
1312

1413
public class InstallDriversTest {
1514
@Test

0 commit comments

Comments
 (0)