Skip to content

Commit bbee03e

Browse files
committed
extend explanation of browser per test with additional code examples
1 parent 70ce085 commit bbee03e

File tree

4 files changed

+153
-9
lines changed

4 files changed

+153
-9
lines changed

website_and_docs/content/documentation/test_practices/encouraged/fresh_browser_per_test.en.md

+5-6
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,27 @@ known state with a new user profile, by default.
1818
A new browser per test can be achieved by using a test framework's "before each test" hook or fixture. This also implies using the "after each test" hook to close the browser.
1919

2020
```java
21-
# Using a class variable
21+
// Using a class variable
2222
public abstract class BaseTest {
2323
protected WebDriver driver;
2424
...
2525

26-
# Before each test hook
26+
// Before each test hook
2727
public void setupTest() {
2828
driver = new FirefoxDriver();
2929
...
3030
}
3131

32-
# After each test hook
32+
// After each test hook
3333
public void teardownTest() {
3434
...
3535
driver.quit();
3636
}
3737
}
3838
```
3939

40-
Using python fixtures
41-
4240
```python
41+
# Using python fixtures
4342
@pytest.fixture(autouse=True, scope='function')
4443
def driver(self, request, page: Page):
4544
# Create the driver
@@ -64,7 +63,7 @@ A static WebDriver will cause multiple issues both with parallel test execution
6463
public abstract class BaseTest {
6564
protected ThreadLocal<WebDriver> driver;
6665
...
67-
# Before each test hook
66+
// Before each test hook
6867
public void setupTest() {
6968
BaseTest.driver = ThreadLocal.withInitial(()->new FirefoxDriver());
7069
...

website_and_docs/content/documentation/test_practices/encouraged/fresh_browser_per_test.ja.md

+50-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,55 @@ aliases: [
1515
Firefoxの場合、既知のプロファイルでWebDriverを起動します。
1616
Most browser drivers like GeckoDriver and ChromeDriver will start with a clean
1717
known state with a new user profile, by default.
18+
19+
```java
20+
// Using a class variable
21+
public abstract class BaseTest {
22+
protected WebDriver driver;
23+
...
24+
25+
// Before each test hook
26+
public void setupTest() {
27+
driver = new FirefoxDriver();
28+
...
29+
}
30+
31+
// After each test hook
32+
public void teardownTest() {
33+
...
34+
driver.quit();
35+
}
36+
}
37+
```
38+
39+
```python
40+
# Using python fixtures
41+
@pytest.fixture(autouse=True, scope='function')
42+
def driver(self, request, page: Page):
43+
# Create the driver
44+
driver = webdriver.Firefox()
45+
46+
# Return control to the test
47+
yield self.driver
48+
49+
# Test ends driver quits
50+
driver.quit()
51+
```
52+
1853
```java
19-
WebDriver driver = new FirefoxDriver();
54+
# Using a static variable
55+
56+
# This forces the ThreadLocal<WebDriver> variable to call driver.get() every time the driver wants to be used.
57+
58+
# In general static variables in non-thread safe code can have unintended consequences and increase the maintanance effort in the code base.
59+
60+
public abstract class BaseTest {
61+
protected ThreadLocal<WebDriver> driver;
62+
...
63+
// Before each test hook
64+
public void setupTest() {
65+
BaseTest.driver = ThreadLocal.withInitial(()->new FirefoxDriver());
66+
...
67+
}
68+
}
2069
```

website_and_docs/content/documentation/test_practices/encouraged/fresh_browser_per_test.pt-br.md

+49-1
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,53 @@ pelo menos inicie um novo WebDriver para cada teste.
1515
Most browser drivers like GeckoDriver and ChromeDriver will start with a clean
1616
known state with a new user profile, by default.
1717
```java
18-
WebDriver driver = new FirefoxDriver();
18+
// Using a class variable
19+
public abstract class BaseTest {
20+
protected WebDriver driver;
21+
...
22+
23+
// Before each test hook
24+
public void setupTest() {
25+
driver = new FirefoxDriver();
26+
...
27+
}
28+
29+
// After each test hook
30+
public void teardownTest() {
31+
...
32+
driver.quit();
33+
}
34+
}
35+
```
36+
37+
```python
38+
# Using python fixtures
39+
@pytest.fixture(autouse=True, scope='function')
40+
def driver(self, request, page: Page):
41+
# Create the driver
42+
driver = webdriver.Firefox()
43+
44+
# Return control to the test
45+
yield self.driver
46+
47+
# Test ends driver quits
48+
driver.quit()
49+
```
50+
51+
```java
52+
# Using a static variable
53+
54+
# This forces the ThreadLocal<WebDriver> variable to call driver.get() every time the driver wants to be used.
55+
56+
# In general static variables in non-thread safe code can have unintended consequences and increase the maintanance effort in the code base.
57+
58+
public abstract class BaseTest {
59+
protected ThreadLocal<WebDriver> driver;
60+
...
61+
// Before each test hook
62+
public void setupTest() {
63+
BaseTest.driver = ThreadLocal.withInitial(()->new FirefoxDriver());
64+
...
65+
}
66+
}
1967
```

website_and_docs/content/documentation/test_practices/encouraged/fresh_browser_per_test.zh-cn.md

+49-1
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,53 @@ aliases: [
1515
对于Firefox, 请使用您已知的配置文件去启动WebDriver.
1616
大多数浏览器驱动器,像GeckoDriver和ChromeDriver那样,默认都会以干净的已知状态和一个新的用户配置文件开始。
1717
```java
18-
WebDriver driver = new FirefoxDriver();
18+
// Using a class variable
19+
public abstract class BaseTest {
20+
protected WebDriver driver;
21+
...
22+
23+
// Before each test hook
24+
public void setupTest() {
25+
driver = new FirefoxDriver();
26+
...
27+
}
28+
29+
// After each test hook
30+
public void teardownTest() {
31+
...
32+
driver.quit();
33+
}
34+
}
35+
```
36+
37+
```python
38+
# Using python fixtures
39+
@pytest.fixture(autouse=True, scope='function')
40+
def driver(self, request, page: Page):
41+
# Create the driver
42+
driver = webdriver.Firefox()
43+
44+
# Return control to the test
45+
yield self.driver
46+
47+
# Test ends driver quits
48+
driver.quit()
49+
```
50+
51+
```java
52+
# Using a static variable
53+
54+
# This forces the ThreadLocal<WebDriver> variable to call driver.get() every time the driver wants to be used.
55+
56+
# In general static variables in non-thread safe code can have unintended consequences and increase the maintanance effort in the code base.
57+
58+
public abstract class BaseTest {
59+
protected ThreadLocal<WebDriver> driver;
60+
...
61+
// Before each test hook
62+
public void setupTest() {
63+
BaseTest.driver = ThreadLocal.withInitial(()->new FirefoxDriver());
64+
...
65+
}
66+
}
1967
```

0 commit comments

Comments
 (0)