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
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
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 }