Skip to content

Commit b0dbd31

Browse files
raynigonrnorth
andauthored
Convert Docs for Webdriver Containers (#2927)
Co-authored-by: Richard North <[email protected]>
1 parent 1ad7ffa commit b0dbd31

File tree

5 files changed

+86
-57
lines changed

5 files changed

+86
-57
lines changed

docs/modules/webdriver_containers.md

Lines changed: 23 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -22,70 +22,54 @@ every test.
2222
## Example
2323

2424
The following field in your JUnit UI test class will prepare a container running Chrome:
25-
```java
26-
@Rule
27-
public BrowserWebDriverContainer chrome =
28-
new BrowserWebDriverContainer()
29-
.withCapabilities(new ChromeOptions());
30-
```
25+
<!--codeinclude-->
26+
[Chrome](../../modules/selenium/src/test/java/org/testcontainers/junit/ChromeWebDriverContainerTest.java) inside_block:junitRule
27+
<!--/codeinclude-->
28+
3129
3230
Now, instead of instantiating an instance of WebDriver directly, use the following to obtain an instance inside your
3331
test methods:
34-
```java
35-
RemoteWebDriver driver = chrome.getWebDriver();
36-
```
32+
<!--codeinclude-->
33+
[RemoteWebDriver](../../modules/selenium/src/test/java/org/testcontainers/junit/LocalServerWebDriverContainerTest.java) inside_block:getWebDriver
34+
<!--/codeinclude-->
3735

3836
You can then use this driver instance like a regular WebDriver.
3937

4038
Note that, if you want to test a **web application running on the host machine** (the machine the JUnit tests are
4139
running on - which is quite likely), you'll need to replace any references to `localhost` with an IP address that the
4240
Docker container can reach. Use the `getTestHostIpAddress()` method, e.g.:
43-
```java
44-
driver.get("http://" + chrome.getTestHostIpAddress() + ":8080/");
45-
```
41+
<!--codeinclude-->
42+
[Open Web Page](../../modules/selenium/src/test/java/org/testcontainers/junit/LocalServerWebDriverContainerTest.java) inside_block:getPage
43+
<!--/codeinclude-->
44+
4645

4746
## Options
4847

4948
### Other browsers
5049

5150
At the moment, Chrome and Firefox are supported. To switch, simply change the first parameter to the rule constructor:
52-
```java
53-
new BrowserWebDriverContainer()
54-
.withCapabilities(new ChromeOptions());
55-
```
56-
57-
or
58-
```java
59-
new BrowserWebDriverContainer()
60-
.withCapabilities(new FirefoxOptions());
61-
```
51+
<!--codeinclude-->
52+
[Chrome](../../modules/selenium/src/test/java/org/testcontainers/junit/ChromeWebDriverContainerTest.java) inside_block:junitRule
53+
[Firefox](../../modules/selenium/src/test/java/org/testcontainers/junit/FirefoxWebDriverContainerTest.java) inside_block:junitRule
54+
<!--/codeinclude-->
6255

6356
### Recording videos
6457

6558
By default, no videos will be recorded. However, you can instruct Testcontainers to capture videos for all tests or
6659
just for failing tests.
6760

68-
To do this, simply add extra parameters to the rule constructor:
69-
```java
70-
new BrowserWebDriverContainer()
71-
.withCapabilities(new ChromeOptions())
72-
.withRecordingMode(VncRecordingMode.RECORD_ALL, new File("./target/"))
73-
```
61+
<!--codeinclude-->
62+
[Record all Tests](../../modules/selenium/src/test/java/org/testcontainers/junit/ChromeRecordingWebDriverContainerTest.java) inside_block:recordAll
63+
[Record failing Tests](../../modules/selenium/src/test/java/org/testcontainers/junit/ChromeRecordingWebDriverContainerTest.java) inside_block:recordFailing
64+
<!--/codeinclude-->
7465

75-
or if you only want videos for test failures:
76-
```java
77-
new BrowserWebDriverContainer()
78-
.withCapabilities(new ChromeOptions())
79-
.withRecordingMode(VncRecordingMode.RECORD_FAILING, new File("./target/"))
80-
```
8166
Note that the seconds parameter to `withRecordingMode` should be a directory where recordings can be saved.
8267

8368
If you would like to customise the file name of the recording, or provide a different directory at runtime based on the description of the test and/or its success or failure, you may provide a custom recording file factory as follows:
84-
```java
85-
new BrowserWebDriverContainer()
86-
//...
87-
.withRecordingFileFactory(new CustomRecordingFileFactory())
88-
```
69+
<!--codeinclude-->
70+
[CustomRecordingFileFactory](../../modules/selenium/src/test/java/org/testcontainers/junit/ChromeRecordingWebDriverContainerTest.java) inside_block:withRecordingFileFactory
71+
<!--/codeinclude-->
72+
8973

9074
Note the factory must implement `org.testcontainers.containers.RecordingFileFactory`.
9175

modules/selenium/src/test/java/org/testcontainers/junit/ChromeRecordingWebDriverContainerTest.java

Lines changed: 55 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,12 @@
1212
import org.testcontainers.containers.DefaultRecordingFileFactory;
1313
import org.testcontainers.lifecycle.TestDescription;
1414

15+
import java.io.File;
1516
import java.util.Optional;
16-
import static org.junit.Assert.assertTrue;
17+
18+
import static org.junit.Assert.assertEquals;
1719
import static org.testcontainers.containers.BrowserWebDriverContainer.VncRecordingMode.RECORD_ALL;
20+
import static org.testcontainers.containers.BrowserWebDriverContainer.VncRecordingMode.RECORD_FAILING;
1821

1922
@RunWith(Enclosed.class)
2023
public class ChromeRecordingWebDriverContainerTest extends BaseWebDriverContainerTest {
@@ -26,10 +29,14 @@ public static class ChromeThatRecordsAllTests {
2629

2730
@Test
2831
public void recordingTestThatShouldBeRecordedAndRetained() {
32+
File target = vncRecordingDirectory.getRoot();
2933
try (
34+
// recordAll {
35+
// To do this, simply add extra parameters to the rule constructor:
3036
BrowserWebDriverContainer chrome = new BrowserWebDriverContainer()
3137
.withCapabilities(new ChromeOptions())
32-
.withRecordingMode(RECORD_ALL, vncRecordingDirectory.getRoot())
38+
.withRecordingMode(RECORD_ALL, target)
39+
// }
3340
.withRecordingFileFactory(new DefaultRecordingFileFactory())
3441
) {
3542
chrome.start();
@@ -48,36 +55,66 @@ public String getFilesystemFriendlyName() {
4855
}, Optional.empty());
4956

5057
String[] files = vncRecordingDirectory.getRoot().list(new PatternFilenameFilter("PASSED-.*\\.flv"));
51-
assertTrue("Recorded file not found", files.length == 1);
58+
assertEquals("Recorded file not found", 1, files.length);
5259
}
5360
}
5461
}
5562

5663
public static class ChromeThatRecordsFailingTests {
5764

5865
@Rule
59-
public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer()
60-
.withCapabilities(new ChromeOptions());
66+
public TemporaryFolder vncRecordingDirectory = new TemporaryFolder();
6167

6268
@Test
6369
public void recordingTestThatShouldBeRecordedButNotPersisted() {
64-
doSimpleExplore(chrome);
70+
try (
71+
// withRecordingFileFactory {
72+
BrowserWebDriverContainer chrome = new BrowserWebDriverContainer()
73+
// }
74+
.withCapabilities(new ChromeOptions())
75+
// withRecordingFileFactory {
76+
.withRecordingFileFactory(new CustomRecordingFileFactory())
77+
// }
78+
) {
79+
chrome.start();
80+
81+
doSimpleExplore(chrome);
82+
}
6583
}
6684

6785
@Test
6886
public void recordingTestThatShouldBeRecordedAndRetained() {
69-
doSimpleExplore(chrome);
70-
chrome.afterTest(new TestDescription() {
71-
@Override
72-
public String getTestId() {
73-
return getFilesystemFriendlyName();
74-
}
75-
76-
@Override
77-
public String getFilesystemFriendlyName() {
78-
return "ChromeThatRecordsFailingTests-recordingTestThatShouldBeRecordedAndRetained";
79-
}
80-
}, Optional.of(new RuntimeException("Force writing of video file.")));
87+
File target = vncRecordingDirectory.getRoot();
88+
try (
89+
// recordFailing {
90+
// or if you only want videos for test failures:
91+
BrowserWebDriverContainer chrome = new BrowserWebDriverContainer()
92+
.withCapabilities(new ChromeOptions())
93+
.withRecordingMode(RECORD_FAILING, target)
94+
// }
95+
.withRecordingFileFactory(new DefaultRecordingFileFactory())
96+
) {
97+
chrome.start();
98+
99+
doSimpleExplore(chrome);
100+
chrome.afterTest(new TestDescription() {
101+
@Override
102+
public String getTestId() {
103+
return getFilesystemFriendlyName();
104+
}
105+
106+
@Override
107+
public String getFilesystemFriendlyName() {
108+
return "ChromeThatRecordsFailingTests-recordingTestThatShouldBeRecordedAndRetained";
109+
}
110+
}, Optional.of(new RuntimeException("Force writing of video file.")));
111+
112+
String[] files = vncRecordingDirectory.getRoot().list(new PatternFilenameFilter("FAILED-.*\\.flv"));
113+
assertEquals("Recorded file not found", 1, files.length);
114+
}
115+
81116
}
117+
118+
private static class CustomRecordingFileFactory extends DefaultRecordingFileFactory { }
82119
}
83120
}

modules/selenium/src/test/java/org/testcontainers/junit/ChromeWebDriverContainerTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
*/
1212
public class ChromeWebDriverContainerTest extends BaseWebDriverContainerTest {
1313

14+
// junitRule {
1415
@Rule
1516
public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer()
1617
.withCapabilities(new ChromeOptions());
18+
// }
1719

1820
@Before
1921
public void checkBrowserIsIndeedChrome() {

modules/selenium/src/test/java/org/testcontainers/junit/FirefoxWebDriverContainerTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
*/
1212
public class FirefoxWebDriverContainerTest extends BaseWebDriverContainerTest {
1313

14+
// junitRule {
1415
@Rule
1516
public BrowserWebDriverContainer firefox = new BrowserWebDriverContainer()
1617
.withCapabilities(new FirefoxOptions());
18+
// }
1719

1820
@Before
1921
public void checkBrowserIsIndeedFirefox() {

modules/selenium/src/test/java/org/testcontainers/junit/LocalServerWebDriverContainerTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,15 @@ public void setupLocalServer() throws Exception {
4949

5050
@Test
5151
public void testConnection() {
52+
// getWebDriver {
5253
RemoteWebDriver driver = chrome.getWebDriver();
54+
// }
5355

5456
// Construct a URL that the browser container can access
57+
// getPage {
5558
String hostIpAddress = chrome.getTestHostIpAddress();
5659
driver.get("http://" + hostIpAddress + ":" + localPort);
60+
// }
5761

5862
String headingText = driver.findElement(By.cssSelector("h1")).getText().trim();
5963

0 commit comments

Comments
 (0)