mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-20 04:35:32 +00:00
Bug 4693: Always creating a new WebDriver per test case
This commit is contained in:
+21
-13
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
+3
-6
@@ -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;
|
||||
}
|
||||
|
||||
+1
-1
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user