Skip to content

Commit 3417717

Browse files
authored
Convert TestBrowser to use fixtures (#1506)
1 parent f98ad20 commit 3417717

File tree

5 files changed

+209
-142
lines changed

5 files changed

+209
-142
lines changed

playwright/src/test/java/com/microsoft/playwright/TestBrowser.java

Lines changed: 0 additions & 141 deletions
This file was deleted.
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
package com.microsoft.playwright;
2+
3+
import com.google.gson.JsonElement;
4+
import com.google.gson.JsonObject;
5+
import com.microsoft.playwright.junit.UsePlaywright;
6+
import org.junit.jupiter.api.Test;
7+
import org.junit.jupiter.api.condition.EnabledIf;
8+
9+
import java.util.concurrent.atomic.AtomicReference;
10+
import java.util.regex.Pattern;
11+
12+
import static com.microsoft.playwright.Utils.getBrowserTypeFromEnv;
13+
import static org.junit.jupiter.api.Assertions.*;
14+
15+
@UsePlaywright(TestOptionsFactories.BasicOptionsFactory.class)
16+
public class TestBrowser1 {
17+
18+
@Test
19+
void shouldCreateNewPage(Browser browser) {
20+
Page page1 = browser.newPage();
21+
assertEquals(1, browser.contexts().size());
22+
23+
Page page2 = browser.newPage();
24+
assertEquals(2, browser.contexts().size());
25+
26+
page1.close();
27+
assertEquals(1, browser.contexts().size());
28+
29+
page2.close();
30+
assertEquals(0, browser.contexts().size());
31+
}
32+
33+
@Test
34+
void shouldThrowUponSecondCreateNewPage(Browser browser) {
35+
Page page = browser.newPage();
36+
PlaywrightException e = assertThrows(PlaywrightException.class, () -> page.context().newPage());
37+
assertTrue(e.getMessage().contains("Please use browser.newContext()"));
38+
page.close();
39+
}
40+
41+
@Test
42+
void versionShouldWork(Browser browser) {
43+
switch (browser.browserType().name()) {
44+
case "chromium":
45+
assertTrue(Pattern.matches("^\\d+\\.\\d+\\.\\d+\\.\\d+$", browser.version()));
46+
break;
47+
case "webkit":
48+
assertTrue(Pattern.matches("^\\d+\\.\\d+", browser.version()));
49+
break;
50+
case "firefox":
51+
// It can be 85.0b1 in Firefox.
52+
assertTrue(Pattern.matches("^\\d+\\.\\d+.*", browser.version()));
53+
break;
54+
default:
55+
fail("Unknown browser");
56+
}
57+
}
58+
59+
@Test
60+
void shouldReturnBrowserType(Playwright playwright, Browser browser) {
61+
assertEquals(getBrowserTypeFromEnv(playwright), browser.browserType());
62+
}
63+
64+
@Test
65+
@EnabledIf(value = "com.microsoft.playwright.TestOptionsFactories#isChromium",
66+
disabledReason = "Chrome Devtools Protocol supported by chromium only")
67+
void shouldWorkWithNewBrowserCDPSession(Browser browser) {
68+
CDPSession session = browser.newBrowserCDPSession();
69+
70+
JsonElement response = session.send("Browser.getVersion");
71+
assertNotNull(response.getAsJsonObject().get("userAgent").toString());
72+
73+
AtomicReference<Boolean> gotEvent = new AtomicReference<>(false);
74+
75+
session.on("Target.targetCreated", jsonElement -> {
76+
gotEvent.set(true);
77+
});
78+
79+
JsonObject params = new JsonObject();
80+
params.addProperty("discover", true);
81+
session.send("Target.setDiscoverTargets", params);
82+
83+
Page page = browser.newPage();
84+
assertTrue(gotEvent.get());
85+
page.close();
86+
87+
session.detach();
88+
}
89+
90+
@Test
91+
void shouldPropagateCloseReasonToPendingActions(Browser browser) {
92+
BrowserContext context = browser.newContext();
93+
PlaywrightException e = assertThrows(PlaywrightException.class, () -> context.waitForPage(() -> {
94+
browser.close(new Browser.CloseOptions().setReason("The reason."));
95+
}));
96+
assertTrue(e.getMessage().contains("The reason."), e.getMessage());
97+
}
98+
99+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.microsoft.playwright;
2+
3+
import com.microsoft.playwright.junit.Options;
4+
import com.microsoft.playwright.junit.OptionsFactory;
5+
import com.microsoft.playwright.junit.UsePlaywright;
6+
import com.microsoft.playwright.options.BrowserChannel;
7+
import org.junit.jupiter.api.Assumptions;
8+
import org.junit.jupiter.api.Test;
9+
10+
import static com.microsoft.playwright.TestBrowser2.ChannelOptionsFactory.getBrowserChannelEnumFromEnv;
11+
import static com.microsoft.playwright.TestOptionsFactories.createLaunchOptions;
12+
import static com.microsoft.playwright.TestOptionsFactories.getBrowserChannelFromEnv;
13+
import static org.junit.jupiter.api.Assertions.assertNotNull;
14+
15+
@UsePlaywright(TestBrowser2.ChannelOptionsFactory.class)
16+
public class TestBrowser2 {
17+
18+
public static class ChannelOptionsFactory implements OptionsFactory {
19+
@Override
20+
public Options getOptions() {
21+
BrowserChannel channel = getBrowserChannelEnumFromEnv();
22+
23+
BrowserType.LaunchOptions launchOptions = createLaunchOptions();
24+
launchOptions.channel = channel;
25+
return new Options().setLaunchOptions(launchOptions);
26+
}
27+
28+
public static BrowserChannel getBrowserChannelEnumFromEnv() {
29+
String channel = getBrowserChannelFromEnv();
30+
if (channel == null) {
31+
return null;
32+
}
33+
switch (channel) {
34+
case "chrome":
35+
return BrowserChannel.CHROME;
36+
case "chrome-beta":
37+
return BrowserChannel.CHROME_BETA;
38+
case "chrome-dev":
39+
return BrowserChannel.CHROME_DEV;
40+
case "chrome-canary":
41+
return BrowserChannel.CHROME_CANARY;
42+
case "msedge":
43+
return BrowserChannel.MSEDGE;
44+
case "msedge-beta":
45+
return BrowserChannel.MSEDGE_BETA;
46+
case "msedge-dev":
47+
return BrowserChannel.MSEDGE_DEV;
48+
case "msedge-canary":
49+
return BrowserChannel.MSEDGE_CANARY;
50+
default:
51+
throw new IllegalArgumentException("Unknown BROWSER_CHANNEL " + channel);
52+
}
53+
}
54+
}
55+
56+
@Test
57+
void shouldSupportDeprecatedChannelEnum(Playwright playwright) {
58+
BrowserChannel channel = getBrowserChannelEnumFromEnv();
59+
Assumptions.assumeTrue(channel != null);
60+
BrowserType.LaunchOptions options = createLaunchOptions();
61+
options.setChannel(channel);
62+
BrowserType browserType = Utils.getBrowserTypeFromEnv(playwright);
63+
Browser browser = browserType.launch(options);
64+
assertNotNull(browser);
65+
browser.close();
66+
}
67+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.microsoft.playwright;
2+
3+
import com.microsoft.playwright.junit.Options;
4+
import com.microsoft.playwright.junit.OptionsFactory;
5+
6+
public class TestOptionsFactories {
7+
8+
public static class BasicOptionsFactory implements OptionsFactory {
9+
@Override
10+
public Options getOptions() {
11+
return new Options().setBrowserName(getBrowserName());
12+
}
13+
}
14+
15+
public static String getBrowserChannelFromEnv() {
16+
return System.getenv("BROWSER_CHANNEL");
17+
}
18+
19+
public static BrowserType.LaunchOptions createLaunchOptions() {
20+
BrowserType.LaunchOptions options;
21+
options = new BrowserType.LaunchOptions();
22+
options.headless = !getHeadful();
23+
return options;
24+
}
25+
26+
private static boolean getHeadful() {
27+
String headfulEnv = System.getenv("HEADFUL");
28+
return headfulEnv != null && !"0".equals(headfulEnv) && !"false".equals(headfulEnv);
29+
}
30+
31+
private static String getBrowserName() {
32+
String browserName = System.getenv("BROWSER");
33+
if (browserName == null) {
34+
browserName = "chromium";
35+
}
36+
return browserName;
37+
}
38+
39+
public static boolean isChromium() {
40+
return getBrowserName().equals("chromium");
41+
}
42+
}

playwright/src/test/java/com/microsoft/playwright/Utils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ static String getBrowserNameFromEnv() {
182182
return browserName;
183183
}
184184

185-
static BrowserType getBrowserTypeFromEnv(Playwright playwright) {
185+
public static BrowserType getBrowserTypeFromEnv(Playwright playwright) {
186186
String browserName = getBrowserNameFromEnv();
187187
switch (browserName) {
188188
case "webkit":

0 commit comments

Comments
 (0)