/*
*Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
*WSO2 Inc. licenses this file to you under the Apache License,
*Version 2.0 (the "License"); you may not use this file except
*in compliance with the License.
*You may obtain a copy of the License at
*
*http://www.apache.org/licenses/LICENSE-2.0
*
*Unless required by applicable law or agreed to in writing,
*software distributed under the License is distributed on an
*"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
*KIND, either express or implied. See the License for the
*specific language governing permissions and limitations
*under the License.
*/
package org.wso2.carbon.automation.extensions.selenium;
import com.opera.core.systems.OperaDriver;
import com.saucelabs.selenium.client.factory.SeleniumFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.wso2.carbon.automation.engine.context.AutomationContext;
import org.wso2.carbon.automation.extensions.ExtensionConstants;
import org.wso2.carbon.automation.extensions.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
public class BrowserManager {
private static final Log log = LogFactory.getLog(BrowserManager.class);
private static AutomationContext automationContext;
public static WebDriver driver;
public static WebDriver getWebDriver() throws MalformedURLException, XPathExpressionException {
automationContext = new AutomationContext();
String driverSelection = automationContext.getConfigurationNodeList(
String.format(XPathConstants.SELENIUM_BROWSER_TYPE)).item(0).
getFirstChild().getNodeValue();
if (automationContext.getConfigurationNode(String.format(XPathConstants.SELENIUM_REMOTE_WEB_DRIVER_URL))
.getAttributes().item(0).getNodeValue().equals("false")) {
if (System.getenv().containsKey("SELENIUM_PLATFORM")) {
log.info("Test runs on Sauce Labs environment...");
log.info("Operating System : " + System.getenv().get("SELENIUM_PLATFORM") +
" On Browser " + System.getenv().get("SELENIUM_BROWSER") + " version " +
System.getenv().get("SELENIUM_VERSION"));
driver = SeleniumFactory.createWebDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
return driver;
} else {
log.info("Test runs on " + driverSelection + " browser...");
getDriver(driverSelection);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
return driver;
}
} else {
log.info("Test runs on remote browser");
if (System.getenv().containsKey("JOB_URL")) {
log.info("Test runs on Sauce Labs environment...");
log.info("Operating System : " + System.getenv().get("SELENIUM_PLATFORM") +
" On Browser " + System.getenv().get("SELENIUM_BROWSER") + " version " +
System.getenv().get("SELENIUM_VERSION"));
driver = SeleniumFactory.createWebDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
return driver;
} else {
getRemoteWebDriver();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
return driver;
}
}
}
private static void getDriver(String driverSelection) throws XPathExpressionException {
if (driverSelection.equalsIgnoreCase(ExtensionConstants.FIREFOX_BROWSER)) {
driver = new FirefoxDriver();
} else if (driverSelection.equalsIgnoreCase(ExtensionConstants.CHROME_BROWSER)) {
System.setProperty("webdriver.chrome.driver",
automationContext.getConfigurationValue
(String.format(XPathConstants.CHROME_WEB_DRIVER_URL)));
driver = new ChromeDriver();
} else if (driverSelection.equalsIgnoreCase(ExtensionConstants.IE_BROWSER)) {
driver = new InternetExplorerDriver();
} else if (driverSelection.equalsIgnoreCase(ExtensionConstants.HTML_UNIT_DRIVER)) {
driver = new HtmlUnitDriver(true);
} else {
driver = new OperaDriver();
}
}
private static void getRemoteWebDriver()
throws MalformedURLException, XPathExpressionException {
URL url;
String browserName = automationContext.getConfigurationNodeList(
String.format(XPathConstants.SELENIUM_BROWSER_TYPE)).item(0).
getFirstChild().getNodeValue();
String remoteWebDriverURL =
automationContext.getConfigurationValue
(String.format(XPathConstants.SELENIUM_REMOTE_WEB_DRIVER_URL));
if (log.isDebugEnabled()) {
log.debug("Browser selection " + browserName);
log.debug("Remote WebDriverURL " + remoteWebDriverURL);
}
try {
url = new URL(remoteWebDriverURL);
} catch (MalformedURLException e) {
log.error("Malformed URL " + e);
throw new MalformedURLException("Malformed URL " + e);
}
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setJavascriptEnabled(true);
capabilities.setBrowserName(browserName);
driver = new RemoteWebDriver(url, capabilities);
}
}