11package uk .co .evoco .webdriver ;
22
3- import io .github .bonigarcia .wdm .WebDriverManager ;
4- import org .openqa .selenium .WebDriver ;
5- import org .openqa .selenium .chrome .ChromeDriver ;
6- import org .openqa .selenium .edge .EdgeDriver ;
7- import org .openqa .selenium .firefox .FirefoxDriver ;
8- import org .openqa .selenium .ie .InternetExplorerDriver ;
9- import org .openqa .selenium .safari .SafariDriver ;
103import org .openqa .selenium .support .events .EventFiringWebDriver ;
11- import uk .co .evoco .webdriver .configuration .WebDriverConfig ;
4+ import uk .co .evoco .webdriver .configuration .TestConfigManager ;
5+ import uk .co .evoco .webdriver .configuration .driver .*;
126
137import java .io .File ;
8+ import java .io .IOException ;
149
1510/**
1611 * This class uses the Builder Pattern to construct its options. Calling .build() will
1712 * result in all of the configuration options being assembled and a valid WebDriver object being
1813 * supplied to the caller
1914 */
2015public class WebDriverBuilder {
21-
22- private WebDriverConfig webDriverConfig ;
16+
2317 private File screenshotDirectory ;
24-
18+
2519 /**
26- * Allows caller to provide a WebDriverConfig object. Returns reference to the class instance of WebDriverBuilder
27- * to maintain the builder pattern.
28- * @param webDriverConfig
29- * @return WebDriverBuilder
20+ *
21+ * @param screenshotDirectory
22+ * @return
3023 */
31- public WebDriverBuilder setConfiguration (WebDriverConfig webDriverConfig ) {
32- this .webDriverConfig = webDriverConfig ;
33- return this ;
34- }
35-
3624 public WebDriverBuilder setResultsDirectory (File screenshotDirectory ) {
3725 this .screenshotDirectory = screenshotDirectory ;
3826 return this ;
@@ -43,39 +31,20 @@ public WebDriverBuilder setResultsDirectory(File screenshotDirectory) {
4331 * construct an EventFiringWebDriver with the correct configuration for the browser type
4432 * @return EventFiringWebDriver
4533 */
46- public EventFiringWebDriver build () {
47- WebDriver webDriver ;
48-
49- switch (this .webDriverConfig .getBrowserType ()) {
34+ public EventFiringWebDriver build () throws IOException {
35+ switch (TestConfigManager .getInstance ().getWebDriverConfig ().getBrowserType ()) {
5036 case CHROME :
51- WebDriverManager .chromedriver ().setup ();
52- webDriver = new ChromeDriver ();
53- break ;
37+ return new ConfiguredChromeDriver (TestConfigManager .getInstance ().getWebDriverConfig ()).getDriver (this .screenshotDirectory );
5438 case FIREFOX :
55- WebDriverManager .firefoxdriver ().setup ();
56- webDriver = new FirefoxDriver ();
57- break ;
39+ return new ConfiguredFirefoxDriver (TestConfigManager .getInstance ().getWebDriverConfig ()).getDriver (this .screenshotDirectory );
5840 case IE :
59- WebDriverManager .iedriver ().setup ();
60- webDriver = new InternetExplorerDriver ();
61- break ;
41+ return new ConfiguredInternetExplorerDriver (TestConfigManager .getInstance ().getWebDriverConfig ()).getDriver (this .screenshotDirectory );
6242 case EDGE :
63- WebDriverManager .edgedriver ().setup ();
64- webDriver = new EdgeDriver ();
65- break ;
43+ return new ConfiguredEdgeDriver (TestConfigManager .getInstance ().getWebDriverConfig ()).getDriver (this .screenshotDirectory );
6644 case SAFARI :
67- webDriver = new SafariDriver ();
68- break ;
45+ return new ConfiguredSafariDriver (TestConfigManager .getInstance ().getWebDriverConfig ()).getDriver (this .screenshotDirectory );
6946 default :
7047 throw new RuntimeException ("WebDriverBuilder has no valid target browser set in WebDriverConfig" );
7148 }
72-
73- EventFiringWebDriver eventFiringWebDriver = new EventFiringWebDriver (webDriver );
74- WebDriverListener eventListener = new WebDriverListener ();
75- eventListener .setWebdriverWaitTimeout (this .webDriverConfig .getWebDriverWaitTimeout ());
76- eventListener .setScreenshotDirectory (this .screenshotDirectory );
77- eventFiringWebDriver .register (eventListener );
78-
79- return eventFiringWebDriver ;
8049 }
8150}
0 commit comments