/*
* Copyright 2002-2007 the original author or authors.
*
* Licensed 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.suren.autotest.web.framework.selenium;
import static org.suren.autotest.web.framework.settings.DriverConstants.DRIVER_CHROME;
import static org.suren.autotest.web.framework.settings.DriverConstants.DRIVER_FIREFOX;
import static org.suren.autotest.web.framework.settings.DriverConstants.DRIVER_IE;
import static org.suren.autotest.web.framework.settings.DriverConstants.DRIVER_OPERA;
import static org.suren.autotest.web.framework.settings.DriverConstants.DRIVER_PHANTOM_JS;
import static org.suren.autotest.web.framework.settings.DriverConstants.DRIVER_SAFARI;
import java.io.File;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.suren.autotest.web.framework.settings.DriverConstants;
import org.suren.autotest.web.framework.util.BrowserUtil;
/**
* 浏览器配置
* @author suren
* @date 2017年5月16日 下午9:18:03
*/
public class CapabilityConfig
{
private static final Logger logger = LoggerFactory.getLogger(CapabilityConfig.class);
private Map<String, DesiredCapabilities> engineCapMap;
private Properties enginePro; //引擎参数集合
/**
* @param engineCapMap 用于保存浏览器配置的返回结果
* @param enginePro 引擎配置集合
*/
public CapabilityConfig(Map<String, DesiredCapabilities> engineCapMap,
Properties enginePro)
{
this.engineCapMap = engineCapMap;
this.enginePro = enginePro;
}
/**
* 加载所有支持浏览器的配置
*/
public void config()
{
firefox();
chrome();
ie();
{
String proFile = System.getProperty("firefox.profile", null);
FirefoxProfile profile = new FirefoxProfile(proFile != null ? new File(proFile) : null);
fireFoxPreSet(profile);
}
{
DesiredCapabilities capability = DesiredCapabilities.safari();
engineCapMap.put(DRIVER_SAFARI, capability);
}
{
DesiredCapabilities capability = DesiredCapabilities.operaBlink();
engineCapMap.put(DRIVER_OPERA, capability);
}
{
DesiredCapabilities capability = DesiredCapabilities.phantomjs();
engineCapMap.put(DRIVER_PHANTOM_JS, capability);
}
}
/**
* 火狐浏览器配置
*/
private void firefox()
{
DesiredCapabilities capability = DesiredCapabilities.firefox();
capability.setCapability("marionette", true);
engineCapMap.put(DRIVER_FIREFOX, capability);
}
/**
* 谷歌浏览器
* chrome://version/
*/
private void chrome()
{
DesiredCapabilities capability = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
Iterator<Object> chromeKeys = enginePro.keySet().iterator();
Proxy proxy = new Proxy();
while(chromeKeys.hasNext())
{
String key = chromeKeys.next().toString();
if(!key.startsWith("chrome"))
{
continue;
}
if(key.startsWith("chrome.args"))
{
String arg = key.replace("chrome.args.", "") + "=" + enginePro.getProperty(key);
if(arg.endsWith("="))
{
arg = arg.substring(0, arg.length() - 1);
}
options.addArguments(arg);
logger.info(String.format("chrome arguments : [%s]", arg));
}
else if(key.startsWith("chrome.cap.proxy.http"))
{
String val = enginePro.getProperty(key);
proxy.setHttpProxy(val);
}
else if(key.startsWith("chrome.cap.proxy.ftp"))
{
String val = enginePro.getProperty(key);
proxy.setFtpProxy(val);
}
else if(key.startsWith("chrome.cap.proxy.socks"))
{
String val = enginePro.getProperty(key);
proxy.setSocksProxy(val);
}
else if(key.startsWith("chrome.cap.proxy.socks.username"))
{
String val = enginePro.getProperty(key);
proxy.setSocksUsername(val);
}
else if(key.startsWith("chrome.cap.proxy.socks.password"))
{
String val = enginePro.getProperty(key);
proxy.setSocksPassword(val);
}
else if(key.startsWith("chrome.binary"))
{
options.setBinary(enginePro.getProperty(key));
}
}
if("true".equals(enginePro.getProperty("chrome.cap.proxy.enable")))
{
capability.setCapability("proxy", proxy);
}
capability.setCapability(ChromeOptions.CAPABILITY, options);
engineCapMap.put(DRIVER_CHROME, capability);
}
/**
* ie浏览器
*/
private void ie()
{
String initialUrl = enginePro.getProperty(DriverConstants.INITIAL_URL,
"http://surenpi.com");
DesiredCapabilities capability = DesiredCapabilities.internetExplorer();
capability.setCapability(
InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
capability.setCapability(InternetExplorerDriver.INITIAL_BROWSER_URL, initialUrl);
capability.setCapability(InternetExplorerDriver.REQUIRE_WINDOW_FOCUS, false);
engineCapMap.put(DRIVER_IE, capability);
}
/**
* 设定firefox首选项
* @param profile
*/
private void fireFoxPreSet(FirefoxProfile profile)
{
BrowserUtil browserUtil = new BrowserUtil();
Map<String, Boolean> boolMap = browserUtil.getFirefoxPreBoolMap();
Iterator<String> boolIt = boolMap.keySet().iterator();
while(boolIt.hasNext())
{
String key = boolIt.next();
profile.setPreference(key, boolMap.get(key));
}
Map<String, Integer> intMap = browserUtil.getFirefoxPreIntMap();
Iterator<String> intIt = intMap.keySet().iterator();
while(intIt.hasNext())
{
String key = intIt.next();
profile.setPreference(key, intMap.get(key));
}
Map<String, Integer> strMap = browserUtil.getFirefoxPreIntMap();
Iterator<String> strIt = intMap.keySet().iterator();
while(strIt.hasNext())
{
String key = strIt.next();
profile.setPreference(key, strMap.get(key));
}
}
}