Bug 4693: Always creating a new WebDriver per test case

This commit is contained in:
Steffen Schaefer
2018-08-03 09:17:09 +02:00
parent 6325c61d0e
commit 285351e694
3 changed files with 25 additions and 20 deletions
@@ -16,9 +16,9 @@ import org.openqa.selenium.WebDriver;
* Riccardo Nimser (D049941)
*/
public class WindowManager {
private final WebDriverWindow defaultWindow;
private WebDriverWindow defaultWindow;
private final Set<WebDriverWindow> allWindows = new HashSet<>();
private final WebDriver driver;
private WebDriver driver;
private final Supplier<WebDriver> webDriverFactory;
@@ -28,15 +28,23 @@ public class WindowManager {
* @param driver
*
*/
public WindowManager(WebDriver driver, Supplier<WebDriver> webDriverFactory) {
this.driver = driver;
defaultWindow = new ManagedWebDriverWindow(this.driver, this.driver.getWindowHandle());
public WindowManager(Supplier<WebDriver> webDriverFactory) {
this.webDriverFactory = webDriverFactory;
setWindowMaximized(this.driver);
}
public WebDriver getDefaultWebDriver() {
if (this.driver == null) {
this.driver = webDriverFactory.get();
this.defaultWindow = new ManagedWebDriverWindow(this.driver, this.driver.getWindowHandle());
setWindowMaximized(this.driver);
}
return this.driver;
}
public void withExtraWindow(BiConsumer<WebDriverWindow, WebDriverWindow> defaultAndExtraWindow) {
// ensures that a default window exists
getDefaultWebDriver();
final WebDriver extraDriver = webDriverFactory.get();
final WebDriverWindow extraWindow = new ManagedWebDriverWindow(extraDriver, extraDriver.getWindowHandle());
@@ -74,12 +82,8 @@ public class WindowManager {
new HashSet<>(this.allWindows).forEach(windowConsumer);
}
public void closeAllExtraWindows() {
forEachOpenedWindow(window -> {
if (window != defaultWindow) {
window.close();
}
});
public void closeAllWindows() {
forEachOpenedWindow(WebDriverWindow::close);
}
private class ManagedWebDriverWindow extends WebDriverWindow {
@@ -90,6 +94,10 @@ public class WindowManager {
@Override
public void close() {
allWindows.remove(this);
if (this == defaultWindow) {
defaultWindow = null;
driver = null;
}
super.close();
}
}
@@ -15,7 +15,6 @@ import com.sap.sailing.selenium.core.WindowManager;
* D049941
*/
public class TestEnvironmentImpl implements TestEnvironment {
private WebDriver driver;
private WindowManager manager;
private String root;
private File screenshotsFolder;
@@ -31,16 +30,15 @@ public class TestEnvironmentImpl implements TestEnvironment {
* The folder where screenshots should be stored.
*/
public TestEnvironmentImpl(Supplier<WebDriver> webDriverFactory, String root, File screenshotsFolder) {
this.driver = webDriverFactory.get();
this.root = root;
this.screenshotsFolder = screenshotsFolder;
this.manager = new WindowManager(driver, webDriverFactory);
this.manager = new WindowManager(webDriverFactory);
}
@Override
public WebDriver getWebDriver() {
return this.driver;
return this.manager.getDefaultWebDriver();
}
@Override
@@ -62,8 +60,7 @@ public class TestEnvironmentImpl implements TestEnvironment {
* <p>Closes the test environment. This quits the web driver, closing every associated window.</p>
*/
public void close() {
this.driver.quit();
this.driver = null;
this.manager.closeAllWindows();
this.root = null;
this.screenshotsFolder = null;
}
@@ -201,7 +201,7 @@ public abstract class AbstractSeleniumTest {
@Override
public void finished(FrameworkMethod method) {
try {
environment.getWindowManager().closeAllExtraWindows();
environment.getWindowManager().closeAllWindows();
} finally {
super.finished(method);
}