2828
2929public class DriverFactory extends TestEnvironment {
3030
31- private WebDriver driver ;
32- private static final ThreadLocal <WebDriver > drivers = new ThreadLocal <>();
31+ protected WebDriver driver ;
3332 private static final List <WebDriver > storedDrivers = new ArrayList <>();
34-
35- static {
36- Runtime .getRuntime ().addShutdownHook (new Thread (() -> {
37- storedDrivers .forEach (WebDriver ::close );
38- storedDrivers .forEach (WebDriver ::quit );
39- }));
40- }
33+ private static final ThreadLocal <WebDriver > drivers = new ThreadLocal <>();
4134
4235 public static WebDriver getDriver () {
4336 return drivers .get ();
4437 }
4538
46- public static void addDriver (WebDriver driver ) {
39+ private void addDriver (WebDriver driver ) {
4740 storedDrivers .add (driver );
4841 drivers .set (driver );
4942 }
5043
51- public static void removeDriver () {
52- getDriver ().close ();
53- storedDrivers .remove (drivers .get ());
54- drivers .remove ();
55- }
56-
57- private String getBrowserName () {
44+ private String getRemoteBrowserName () {
5845 String getBrowser = System .getProperty ("browser" );
5946 if (getBrowser == null ) {
6047 getBrowser = System .getenv ("browser" );
@@ -65,7 +52,7 @@ private String getBrowserName() {
6552 return getBrowser ;
6653 }
6754
68- private String getHost () {
55+ public static String getHost () {
6956 String getHost = System .getProperty ("selenium.host" );
7057 if (getHost == null ) {
7158 getHost = System .getenv ("selenium.host" );
@@ -76,7 +63,7 @@ private String getHost() {
7663 return getHost ;
7764 }
7865
79- protected RemoteWebDriver remoteWebDriver (DesiredCapabilities desiredCapabilities , String remoteWebDriverURL ) {
66+ private RemoteWebDriver remoteWebDriver (DesiredCapabilities desiredCapabilities , String remoteWebDriverURL ) {
8067 RemoteWebDriver remoteDriver = null ;
8168 try {
8269 remoteDriver = new RemoteWebDriver (new URL (remoteWebDriverURL ), desiredCapabilities );
@@ -89,78 +76,72 @@ protected RemoteWebDriver remoteWebDriver(DesiredCapabilities desiredCapabilitie
8976 protected void startBrowser () {
9077 printWebDriverManagerVersions (false );
9178 DesiredCapabilities desiredCapabilities ;
92- if (DriverFactory .getDriver () == null ) {
93- switch (getHost ().toLowerCase ()) {
94- case "chrome" :
95- WebDriverManager .chromedriver ().setup ();
96- ChromeOptions chromeOptions = new ChromeOptions ();
97- DriverFactory .addDriver (driver = new ChromeDriver (chromeOptions ));
98- break ;
99- case "firefox" :
100- WebDriverManager .firefoxdriver ().setup ();
101- FirefoxOptions firefoxOptions = new FirefoxOptions ();
102- firefoxOptions .addArguments ("" );
103- DriverFactory .addDriver (driver = new FirefoxDriver (firefoxOptions ));
104- break ;
105- case "opera" :
106- WebDriverManager .operadriver ().arch64 ().browserVersion ("2.45" ).setup ();
107- OperaOptions operaOptions = new OperaOptions ();
108- operaOptions .addArguments ("" );
109- DriverFactory .addDriver (driver = new OperaDriver (operaOptions ));
110- break ;
111- case "edge" :
112- WebDriverManager .edgedriver ().setup ();
113- DriverFactory .addDriver (driver = new EdgeDriver ());
114- break ;
115- case "ie" :
116- WebDriverManager .iedriver ().setup ();
117- DriverFactory .addDriver (driver = new InternetExplorerDriver ());
118- break ;
119- case "safari" :
120- DriverFactory .addDriver (driver = new SafariDriver ());
121- break ;
122- case "browserstack" :
123- desiredCapabilities = new DesiredCapabilities ();
124- desiredCapabilities .setCapability ("os" , "Windows" );
125- desiredCapabilities .setCapability ("os_version" , "10" );
126- desiredCapabilities .setCapability ("resolution" , "1920x1080" );
127- desiredCapabilities .setCapability ("build" , "Automationpractice.com" );
128- desiredCapabilities .setCapability ("project" , "Automationpractice.com" );
129- desiredCapabilities .setCapability ("browserstack.timezone" , "Europe/Warsaw" );
130- if (getBrowserName ().toLowerCase ().equals ("ie" )) {
131- desiredCapabilities .setCapability ("browser" , "IE" );
132- desiredCapabilities .setCapability ("browser_version" , "11.0" );
133- }
134- if (getBrowserName ().toLowerCase ().equals ("firefox" )) {
135- desiredCapabilities .setCapability ("browser" , "Firefox" );
136- desiredCapabilities .setCapability ("browser_version" , "70.0" );
137- } else {
138- desiredCapabilities .setCapability ("browser" , "Chrome" );
139- desiredCapabilities .setCapability ("browser_version" , "78.0" );
140- }
141- //https://automate.browserstack.com/dashboard/v2 <- GET USER_NAME AND ACCESS_TOKEN FROM
142- //https://www.browserstack.com/automate/capabilities <- GENERATE YOUR OWN CAPABILITIES
143- //https://USER_NAME:[email protected] /wd/hub <- HOST_URL (.travis.yml for more information) 144- DriverFactory .addDriver (driver = remoteWebDriver (desiredCapabilities , HOST_URL ));
145- break ;
146- default :
147- throw new IllegalStateException ("This browser isn't supported yet! Sorry..." );
148- }
149- logger .info (String .format ("Chosen executor: \" %S\" " , getHost ()));
150- getDriver ().manage ().timeouts ().implicitlyWait (TIMEOUT , TimeUnit .SECONDS );
151- getDriver ().manage ().timeouts ().pageLoadTimeout (TIMEOUT , TimeUnit .SECONDS );
152- getDriver ().manage ().timeouts ().setScriptTimeout (TIMEOUT , TimeUnit .SECONDS );
153- getDriver ().manage ().deleteAllCookies ();
154- getDriver ().manage ().window ().maximize ();
155- } else {
156- throw new IllegalStateException ("Driver has already been initialized. Quit it before using this method!" );
79+ switch (getHost ().toLowerCase ()) {
80+ case "chrome" :
81+ WebDriverManager .chromedriver ().setup ();
82+ ChromeOptions chromeOptions = new ChromeOptions ();
83+ addDriver (driver = new ChromeDriver (chromeOptions ));
84+ break ;
85+ case "firefox" :
86+ WebDriverManager .firefoxdriver ().setup ();
87+ FirefoxOptions firefoxOptions = new FirefoxOptions ();
88+ firefoxOptions .addArguments ("" );
89+ addDriver (driver = new FirefoxDriver (firefoxOptions ));
90+ break ;
91+ case "opera" :
92+ WebDriverManager .operadriver ().arch64 ().browserVersion ("2.45" ).setup ();
93+ OperaOptions operaOptions = new OperaOptions ();
94+ operaOptions .addArguments ("" );
95+ addDriver (driver = new OperaDriver (operaOptions ));
96+ break ;
97+ case "edge" :
98+ WebDriverManager .edgedriver ().setup ();
99+ addDriver (driver = new EdgeDriver ());
100+ break ;
101+ case "ie" :
102+ WebDriverManager .iedriver ().setup ();
103+ addDriver (driver = new InternetExplorerDriver ());
104+ break ;
105+ case "safari" :
106+ addDriver (driver = new SafariDriver ());
107+ break ;
108+ case "browserstack" :
109+ desiredCapabilities = new DesiredCapabilities ();
110+ desiredCapabilities .setCapability ("os" , "Windows" );
111+ desiredCapabilities .setCapability ("os_version" , "10" );
112+ desiredCapabilities .setCapability ("resolution" , "1920x1080" );
113+ desiredCapabilities .setCapability ("build" , "Automationpractice.com" );
114+ desiredCapabilities .setCapability ("project" , "Automationpractice.com" );
115+ desiredCapabilities .setCapability ("browserstack.timezone" , "Europe/Warsaw" );
116+ if (getRemoteBrowserName ().toLowerCase ().equals ("ie" )) {
117+ desiredCapabilities .setCapability ("browser" , "IE" );
118+ desiredCapabilities .setCapability ("browser_version" , "11.0" );
119+ }
120+ if (getRemoteBrowserName ().toLowerCase ().equals ("firefox" )) {
121+ desiredCapabilities .setCapability ("browser" , "Firefox" );
122+ desiredCapabilities .setCapability ("browser_version" , "70.0" );
123+ } else {
124+ desiredCapabilities .setCapability ("browser" , "Chrome" );
125+ desiredCapabilities .setCapability ("browser_version" , "78.0" );
126+ }
127+ //https://automate.browserstack.com/dashboard/v2 <- GET USER_NAME AND ACCESS_TOKEN FROM
128+ //https://www.browserstack.com/automate/capabilities <- GENERATE YOUR OWN CAPABILITIES
129+ //https://USER_NAME:[email protected] /wd/hub <- HOST_URL (.travis.yml for more information) 130+ addDriver (driver = remoteWebDriver (desiredCapabilities , HOST_URL ));
131+ break ;
132+ default :
133+ throw new IllegalStateException ("This browser isn't supported yet! Sorry..." );
157134 }
135+ getDriver ().manage ().timeouts ().implicitlyWait (TIMEOUT , TimeUnit .SECONDS );
136+ getDriver ().manage ().timeouts ().pageLoadTimeout (TIMEOUT , TimeUnit .SECONDS );
137+ getDriver ().manage ().timeouts ().setScriptTimeout (TIMEOUT , TimeUnit .SECONDS );
138+ getDriver ().manage ().deleteAllCookies ();
139+ getDriver ().manage ().window ().maximize ();
158140 }
159141
160142 protected void destroyDriver () {
161- if ( driver != null ) {
143+ for ( WebDriver driver : storedDrivers ) {
162144 driver .quit ();
163- driver = null ;
164145 }
165146 }
166147}
0 commit comments