View Javadoc
1   package org.itracker.selenium;
2   
3   import com.thoughtworks.selenium.Selenium;
4   import org.apache.log4j.Logger;
5   import org.openqa.selenium.WebDriver;
6   import org.openqa.selenium.chrome.ChromeDriver;
7   import org.openqa.selenium.edge.EdgeDriver;
8   import org.openqa.selenium.firefox.FirefoxDriver;
9   import org.openqa.selenium.htmlunit.HtmlUnitDriver;
10  import org.openqa.selenium.ie.InternetExplorerDriver;
11  import org.openqa.selenium.remote.DesiredCapabilities;
12  import org.openqa.selenium.remote.RemoteWebDriver;
13  import org.openqa.selenium.safari.SafariDriver;
14  
15  import java.io.IOException;
16  import java.io.InputStream;
17  import java.net.URL;
18  import java.util.Properties;
19  
20  /**
21   * @author Andrey Sergievskiy <seas@andreysergievskiy.com>
22   */
23  public class SeleniumManager {
24      private final static String PROPERTY_SELENIUM_BROWSER = "selenium.browser";
25      private final static String PROPERTY_SELENIUM_HOST = "selenium.host";
26      private final static String PROPERTY_SELENIUM_NO_SERVER = "selenium.no.server";
27      private final static String PROPERTY_SELENIUM_PORT = "selenium.port";
28      private final static String PROPERTY_SELENIUM_SMTP_PORT = "selenium.smtp.port";
29      private final static String PROPERTY_APPLICATION_HOST = "application.host";
30      private final static String PROPERTY_APPLICATION_PORT = "application.port";
31      private final static String PROPERTY_APPLICATION_PATH = "application.path";
32  
33  
34      private final static String PROPERTY_SELENIUM_BROWSER_DEFAULT = "firefox";
35      private final static String
36              PROPERTY_SELENIUM_HOST_DEFAULT = "localhost";
37      private final static String
38              PROPERTY_SELENIUM_PORT_DEFAULT = "5555";
39      private final static String
40              PROPERTY_APPLICATION_HOST_DEFAULT = "localhost";
41      private final static String
42              PROPERTY_APPLICATION_PORT_DEFAULT = "8888";
43      private final static String
44              PROPERTY_APPLICATION_PATH_DEFAULT = "itracker";
45      private final static String
46              PROPERTY_SELENIUM_SMTP_PORT_DEFAULT = "2525";
47  
48  
49      private static WebDriver driver = null;
50  
51      private static String seleniumHost = null;
52      private static Integer seleniumPort = null;
53      private static Boolean seleniumNoServer = null;
54      private static String seleniumBrowser = null;
55  
56      private static String applicationHost = null;
57      private static Integer applicationPort = null;
58      private static String applicationPath = null;
59      private static Integer smtpPort = null;
60  
61      private static final Logger log = Logger.getLogger(SeleniumManager.class);
62  
63      static {
64          Runtime.getRuntime().addShutdownHook(new Thread() {
65              @Override
66              public void run() {
67                  if (null != SeleniumManager.driver) {
68                      driver.close();
69                  }
70              }
71          });
72      }
73  
74      static {
75          final InputStream inputStream = SeleniumManager.class
76                  .getResourceAsStream("SeleniumManager.properties");
77          final Properties properties = new Properties();
78          try {
79              properties.load(inputStream);
80          } catch (IOException e) {
81              e.printStackTrace();
82          }
83          seleniumBrowser =
84                  properties.getProperty(PROPERTY_SELENIUM_BROWSER, PROPERTY_SELENIUM_BROWSER_DEFAULT);
85          seleniumNoServer =
86                  Boolean.valueOf(properties.getProperty(PROPERTY_SELENIUM_NO_SERVER, "true"));
87          seleniumHost =
88                  properties.getProperty(PROPERTY_SELENIUM_HOST, PROPERTY_SELENIUM_HOST_DEFAULT);
89          seleniumPort =
90                  Integer.valueOf(properties.getProperty(PROPERTY_SELENIUM_PORT, PROPERTY_SELENIUM_PORT_DEFAULT));
91          applicationHost =
92                  properties.getProperty(PROPERTY_APPLICATION_HOST, PROPERTY_APPLICATION_HOST_DEFAULT);
93          applicationPort =
94                  Integer.valueOf(properties.getProperty(PROPERTY_APPLICATION_PORT, PROPERTY_APPLICATION_PORT_DEFAULT));
95          applicationPath =
96                  properties.getProperty(PROPERTY_APPLICATION_PATH, PROPERTY_APPLICATION_PATH_DEFAULT);
97          smtpPort =
98                  Integer.valueOf(properties.getProperty(PROPERTY_SELENIUM_SMTP_PORT, PROPERTY_SELENIUM_SMTP_PORT_DEFAULT));
99      }
100 
101 
102     public static synchronized WebDriver getWebDriver() throws IOException {
103 
104 
105         if (null == driver) {
106 
107             if (!getSeleniumNoServer()) {
108                 DesiredCapabilities capabilities = DesiredCapabilities.htmlUnitWithJs();
109                 if (getSeleniumBrowser().equals("firefox")) {
110                     capabilities = DesiredCapabilities.firefox();
111                 } else if (getSeleniumBrowser().equals("edge")) {
112                     capabilities = DesiredCapabilities.edge();
113                 } else if (getSeleniumBrowser().equals("ie")) {
114                     capabilities = DesiredCapabilities.internetExplorer();
115                 } else if (getSeleniumBrowser().equals("chrome")) {
116                     capabilities = DesiredCapabilities.chrome();
117                 } else if (getSeleniumBrowser().equals("safari")) {
118                     capabilities = DesiredCapabilities.safari();
119                 }
120                 URL remoteURL = new URL("http://" + getSeleniumHost() + ":" + getSeleniumPort());
121                 capabilities.setJavascriptEnabled(true);
122                 driver = new RemoteWebDriver(remoteURL, capabilities);
123             } else {
124 
125                 if (getSeleniumBrowser().equals("firefox")) {
126                     DesiredCapabilities capabilities = DesiredCapabilities.firefox();
127                     driver = new FirefoxDriver(capabilities);
128                 } else if (getSeleniumBrowser().equals("edge")) {
129                     DesiredCapabilities capabilities = DesiredCapabilities.edge();
130                     driver = new EdgeDriver(capabilities);
131                 } else if (getSeleniumBrowser().equals("ie")) {
132                     DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
133                     driver = new InternetExplorerDriver(capabilities);
134                 } else if (getSeleniumBrowser().equals("chrome")) {
135                     DesiredCapabilities capabilities = DesiredCapabilities.chrome();
136                     driver = new ChromeDriver(capabilities);
137                 } else if (getSeleniumBrowser().equals("safari")) {
138                     DesiredCapabilities capabilities = DesiredCapabilities.safari();
139                     driver = new SafariDriver(capabilities);
140                 } else {
141                     DesiredCapabilities capabilities = DesiredCapabilities.htmlUnitWithJs();
142                     driver = new HtmlUnitDriver(capabilities);
143                 }
144             }
145 
146 
147         }
148 
149         return driver;
150 
151     }
152 
153     /**
154      * This will initialize a new selenium session for this test scope.
155      */
156     protected static void closeSession(WebDriver driver) {
157         if (log.isDebugEnabled()) {
158             log.debug("closeSession: " + driver);
159         }
160         driver.manage().deleteAllCookies();
161     }
162 
163     public static Boolean getSeleniumNoServer() {
164         return seleniumNoServer;
165     }
166 
167     public static String getSeleniumHost() {
168         return seleniumHost;
169     }
170 
171     public static int getSeleniumPort() {
172         return seleniumPort;
173     }
174 
175     public static int getSMTPPort() {
176         return smtpPort;
177     }
178 
179     public static String getSeleniumBrowser() {
180         return seleniumBrowser;
181     }
182 
183     public static String getApplicationHost() {
184         return applicationHost;
185     }
186 
187     public static int getApplicationPort() {
188         return applicationPort;
189     }
190 
191     public static String getApplicationPath() {
192         return applicationPath;
193     }
194 }