Skip to content

Commit d929b1c

Browse files
authored
Merge pull request #30 from vania-pooh/master
Added non-standard Aerokube APIs support (fixes #10)
2 parents e01f920 + 8229533 commit d929b1c

File tree

9 files changed

+101
-47
lines changed

9 files changed

+101
-47
lines changed

pom.xml

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
<maven.compiler.source>11</maven.compiler.source>
1717
<maven.compiler.target>11</maven.compiler.target>
1818
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
19-
<swagger.version>1.6.2</swagger.version>
20-
<openapi-spec.version>1.0.13</openapi-spec.version>
19+
<swagger.version>1.6.4</swagger.version>
20+
<openapi-spec.version>1.0.14</openapi-spec.version>
2121
<openapi-plugin.version>5.1.0</openapi-plugin.version>
22-
<jackson.version>2.12.5</jackson.version>
23-
<junit-jupiter.version>5.8.1</junit-jupiter.version>
22+
<jackson.version>2.13.1</jackson.version>
23+
<junit-jupiter.version>5.8.2</junit-jupiter.version>
2424
<hamcrest.version>2.2</hamcrest.version>
25-
<testcontainers.version>1.16.0</testcontainers.version>
25+
<testcontainers.version>1.16.2</testcontainers.version>
2626
<slf4j-log4j12.version>1.7.32</slf4j-log4j12.version>
2727
<surefire-plugin.version>2.22.2</surefire-plugin.version>
2828
<source-plugin.version>3.2.1</source-plugin.version>
@@ -45,7 +45,7 @@
4545
<dependency>
4646
<groupId>org.openapitools</groupId>
4747
<artifactId>jackson-databind-nullable</artifactId>
48-
<version>0.2.1</version>
48+
<version>0.2.2</version>
4949
</dependency>
5050
<dependency>
5151
<groupId>javax.ws.rs</groupId>

src/main/java/com/aerokube/lightning/extensions/Firefox.java renamed to src/main/java/com/aerokube/lightning/extensions/FirefoxCommands.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
import java.nio.file.Path;
1414
import java.util.Base64;
1515

16-
public class Firefox extends WebDriverExtension {
16+
public class FirefoxCommands extends WebDriverExtension {
1717

1818
private final MozillaApi mozillaApi;
1919

20-
public Firefox(WebDriver webDriver) {
20+
public FirefoxCommands(WebDriver webDriver) {
2121
super(webDriver);
2222
mozillaApi = api(MozillaApi.class);
2323
}
@@ -31,14 +31,14 @@ public String installAddon(@Nonnull Path addon) {
3131
}
3232

3333
@Nonnull
34-
public Firefox uninstallAddon(@Nonnull String id) {
34+
public FirefoxCommands uninstallAddon(@Nonnull String id) {
3535
AddonUninstallRequest addonUninstallRequest = new AddonUninstallRequest().id(id);
3636
execute(() -> mozillaApi.uninstallAddon(getSessionId(), addonUninstallRequest));
3737
return this;
3838
}
3939

4040
@Nonnull
41-
public Firefox context(@Nonnull FirefoxContext context) {
41+
public FirefoxCommands context(@Nonnull FirefoxContext context) {
4242
ContextRequest contextRequest = new ContextRequest().context(context);
4343
execute(() -> mozillaApi.setContext(getSessionId(), contextRequest));
4444
return this;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.aerokube.lightning.extensions;
2+
3+
import com.aerokube.lightning.WebDriver;
4+
import com.aerokube.lightning.WebDriverExtension;
5+
import com.aerokube.lightning.api.AerokubeApi;
6+
import com.aerokube.lightning.model.StringResponse;
7+
8+
import javax.annotation.Nonnull;
9+
import java.util.Base64;
10+
import java.util.List;
11+
12+
public class MoonCommands extends WebDriverExtension {
13+
14+
private final AerokubeApi aerokubeApi;
15+
16+
public MoonCommands(WebDriver webDriver) {
17+
super(webDriver);
18+
aerokubeApi = api(AerokubeApi.class);
19+
}
20+
21+
@Nonnull
22+
public MoonCommands updateClipboard(@Nonnull byte[] content) {
23+
execute(() -> {
24+
String encodedContent = Base64.getEncoder().encodeToString(content);
25+
aerokubeApi.updateClipboard(getSessionId(), new StringResponse().value(encodedContent));
26+
return null;
27+
});
28+
return this;
29+
}
30+
31+
@Nonnull
32+
public byte[] getClipboard() {
33+
return execute(() -> {
34+
String encodedBytes = aerokubeApi.getClipboard(getSessionId()).getValue();
35+
return Base64.getDecoder().decode(encodedBytes);
36+
});
37+
}
38+
39+
@Nonnull
40+
public List<String> listFiles() {
41+
return execute(() -> aerokubeApi.listRemoteFiles(getSessionId(), true).getValue());
42+
}
43+
44+
@Nonnull
45+
public byte[] downloadFile(@Nonnull String file) {
46+
return execute(() -> {
47+
String encodedBytes = aerokubeApi.downloadRemoteFile(getSessionId(), file).getValue();
48+
return Base64.getDecoder().decode(encodedBytes);
49+
});
50+
}
51+
52+
@Nonnull
53+
public MoonCommands deleteFile(@Nonnull String file) {
54+
execute(() -> {
55+
aerokubeApi.deleteRemoteFile(getSessionId(), file);
56+
return null;
57+
});
58+
return this;
59+
}
60+
61+
}

src/test/java/com/aerokube/lightning/BaseTest.java

+13-5
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,32 @@
1010
import java.util.function.Supplier;
1111

1212
import static com.aerokube.lightning.Image.CHROME;
13+
import static com.aerokube.lightning.Image.FIREFOX;
1314

1415
@Testcontainers
1516
public class BaseTest {
1617

1718
@Container
18-
protected final GenericContainer<?> browserContainer = new GenericContainer<>(DockerImageName.parse(getImage().getRef()))
19-
.withPrivilegedMode(true)
20-
.withExposedPorts(4444)
21-
.waitingFor(new HttpWaitStrategy().forPort(4444).forPath("/status"));
19+
protected final GenericContainer<?> browserContainer = getBrowserContainer();
2220

2321
protected WebDriver driver;
2422

23+
protected GenericContainer<?> getBrowserContainer() {
24+
return new GenericContainer<>(DockerImageName.parse(getImage().getRef()))
25+
.withPrivilegedMode(true)
26+
.withExposedPorts(4444)
27+
.withSharedMemorySize(268435456L)
28+
.waitingFor(new HttpWaitStrategy().forPort(4444).forPath("/status"));
29+
}
30+
2531
protected Image getImage() {
2632
return CHROME;
2733
}
2834

2935
protected String getUri(int port) {
30-
return String.format("http://localhost:%s/", port);
36+
return FIREFOX.equals(getImage()) ?
37+
String.format("http://localhost:%s/wd/hub", port) :
38+
String.format("http://localhost:%s/", port);
3139
}
3240

3341
// Yes, we know about @SetUp and @TearDown, but it's easier to pass different capabilities like this

src/test/java/com/aerokube/lightning/EdgeCapabilitiesTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ protected Image getImage() {
2020
void testBasicCapabilities() {
2121
test(
2222
() -> Capabilities.create()
23-
.edge().binary("/usr/bin/microsoft-edge-beta")
23+
.edge().binary("/usr/bin/microsoft-edge")
2424
.args("no-sandbox"),
2525
driver -> driver.navigation().navigate("https://example.com")
2626
);

src/test/java/com/aerokube/lightning/FirefoxCapabilitiesTest.java

-5
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,6 @@ protected Image getImage() {
2020
return FIREFOX;
2121
}
2222

23-
@Override
24-
protected String getUri(int port) {
25-
return String.format("http://localhost:%s/wd/hub", port);
26-
}
27-
2823
@Test
2924
void testBasicCapabilities() {
3025
test(

src/test/java/com/aerokube/lightning/Image.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.aerokube.lightning;
22

33
public enum Image {
4-
CHROME("browsers/chrome:94.0"),
5-
EDGE("browsers/edge:95.0"),
6-
FIREFOX("browsers/firefox:93.0"),
7-
OPERA("browsers/opera:80.0"),
8-
SAFARI("browsers/safari:14.0");
4+
CHROME("browsers/chrome:97.0"),
5+
EDGE("browsers/edge:97.0"),
6+
FIREFOX("browsers/firefox:96.0"),
7+
OPERA("browsers/opera:82.0"),
8+
SAFARI("browsers/safari:15.0");
99

1010
private final String ref;
1111

src/test/java/com/aerokube/lightning/extensions/FirefoxTest.java renamed to src/test/java/com/aerokube/lightning/extensions/FirefoxCommandsTest.java

+8-12
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,16 @@
1111
import static com.aerokube.lightning.model.FirefoxContext.CHROME;
1212
import static com.aerokube.lightning.model.FirefoxContext.CONTENT;
1313
import static org.hamcrest.MatcherAssert.assertThat;
14-
import static org.hamcrest.Matchers.*;
14+
import static org.hamcrest.Matchers.equalTo;
15+
import static org.hamcrest.Matchers.greaterThan;
1516

16-
public class FirefoxTest extends BaseTest {
17+
public class FirefoxCommandsTest extends BaseTest {
1718

1819
@Override
1920
protected Image getImage() {
2021
return FIREFOX;
2122
}
2223

23-
@Override
24-
protected String getUri(int port) {
25-
return String.format("http://localhost:%s/wd/hub", port);
26-
}
27-
2824
@Test
2925
void testLoadUnloadExtension() {
3026
Path extensionPath = Paths.get("src", "test", "resources", "test.xpi");
@@ -36,13 +32,13 @@ void testLoadUnloadExtension() {
3632
.elements().findFirst(By.tagName("body"));
3733
assertThat(body.getCssProperty("background-color"), equalTo("rgb(240, 240, 242)"));
3834

39-
String addonId = driver.extension(Firefox.class).installAddon(extensionPath);
35+
String addonId = driver.extension(FirefoxCommands.class).installAddon(extensionPath);
4036
body = driver
4137
.navigation().refresh()
4238
.elements().findFirst(By.tagName("body"));
4339
assertThat(body.getCssProperty("background-color"), equalTo("rgb(0, 0, 0)"));
4440

45-
driver.extension(Firefox.class).uninstallAddon(addonId);
41+
driver.extension(FirefoxCommands.class).uninstallAddon(addonId);
4642
body = driver
4743
.navigation().refresh()
4844
.elements().findFirst(By.tagName("body"));
@@ -56,10 +52,10 @@ void testContext() {
5652
test(
5753
() -> Capabilities.create().firefox(),
5854
driver -> {
59-
FirefoxContext context = driver.extension(Firefox.class).context();
55+
FirefoxContext context = driver.extension(FirefoxCommands.class).context();
6056
assertThat(context, equalTo(CONTENT));
6157

62-
FirefoxContext switchedContext = driver.extension(Firefox.class).context(CHROME)
58+
FirefoxContext switchedContext = driver.extension(FirefoxCommands.class).context(CHROME)
6359
.context();
6460
assertThat(switchedContext, equalTo(CHROME));
6561
}
@@ -73,7 +69,7 @@ void testPageScreenshot() {
7369
driver -> {
7470
driver.navigation()
7571
.navigate("https://example.com");
76-
byte[] screenshot = driver.extension(Firefox.class).fullScreenshot();
72+
byte[] screenshot = driver.extension(FirefoxCommands.class).fullScreenshot();
7773
assertThat(screenshot.length, greaterThan(0));
7874
}
7975
);

src/test/java/com/aerokube/lightning/extensions/SelenoidTest.java

+3-9
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
package com.aerokube.lightning.extensions;
22

3-
import com.aerokube.lightning.*;
3+
import com.aerokube.lightning.BaseTest;
4+
import com.aerokube.lightning.Capabilities;
5+
import com.aerokube.lightning.Image;
46
import org.junit.jupiter.api.Disabled;
57
import org.junit.jupiter.api.Test;
68

7-
import java.nio.file.Files;
89
import java.nio.file.Path;
910
import java.nio.file.Paths;
10-
import java.time.Duration;
1111

1212
import static com.aerokube.lightning.Image.FIREFOX;
1313
import static org.hamcrest.MatcherAssert.assertThat;
1414
import static org.hamcrest.Matchers.*;
15-
import static org.hamcrest.Matchers.emptyString;
1615

1716
@Disabled("need to debug session startup in Firefox images when selenoid:options is passed")
1817
public class SelenoidTest extends BaseTest {
@@ -22,11 +21,6 @@ protected Image getImage() {
2221
return FIREFOX;
2322
}
2423

25-
@Override
26-
protected String getUri(int port) {
27-
return String.format("http://localhost:%s/wd/hub", port);
28-
}
29-
3024
@Test
3125
void testRootCertificationAuthority() {
3226
Path certPath = Paths.get("src", "test", "resources", "self-signed-root-ca.crt");

0 commit comments

Comments
 (0)