package org.sky.auto.driver; import java.net.MalformedURLException; import java.net.URL; import org.apache.log4j.Logger; 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.openqa.selenium.safari.SafariDriver; import org.openqa.selenium.support.events.EventFiringWebDriver; import org.sky.auto.base.ConfigParser; import org.sky.auto.driver.event.AutoDriverEventListener; import org.sky.auto.runner.AutoResetThreadLocal; public class AutoDriver implements IDriver{ static Logger logger = Logger.getLogger(AutoDriver.class); private WebDriver driver; private EventFiringWebDriver efdriver; class Firefox implements Runnable{ AutoResetThreadLocal<FirefoxDriver> atl = new AutoResetThreadLocal<FirefoxDriver>(){ protected synchronized FirefoxDriver initialValue() { //setDriver(Browser.NULL); return new FirefoxDriver(); } }; public void run() { // TODO Auto-generated method stub } public FirefoxDriver firefox(){ return atl.get(); } } class IE implements Runnable{ ThreadLocal<InternetExplorerDriver> tl = new ThreadLocal<InternetExplorerDriver>(){ protected InternetExplorerDriver initialValue() { return new InternetExplorerDriver(); }; }; public void run() { } public InternetExplorerDriver ie(){ return tl.get(); } } class Safari implements Runnable{ ThreadLocal<SafariDriver> tl = new ThreadLocal<SafariDriver>(){ protected SafariDriver initialValue() { return new SafariDriver(); }; }; public void run() { } public SafariDriver safari(){ return tl.get(); } } class Chrome implements Runnable{ ThreadLocal<ChromeDriver> tl = new ThreadLocal<ChromeDriver>(){ protected ChromeDriver initialValue() { return new ChromeDriver(); }; }; public void run() { // TODO Auto-generated method stub } public ChromeDriver chrome(){ return tl.get(); } } class HtmlUnit implements Runnable{ ThreadLocal<HtmlUnitDriver> tl = new ThreadLocal<HtmlUnitDriver>(){ protected HtmlUnitDriver initialValue() { return new HtmlUnitDriver(); }; }; public void run() { } public HtmlUnitDriver htmlUnit(){ return tl.get(); } } class RemoteFirefox implements Runnable{ public void run() { // TODO Auto-generated method stub } ThreadLocal<RemoteWebDriver> tl = new ThreadLocal<RemoteWebDriver>(){ protected RemoteWebDriver initialValue() { try { return new RemoteWebDriver(new URL(ConfigParser.getFirefoxNode()), DesiredCapabilities.firefox()); } catch (MalformedURLException e) { logger.error("实例化url出错,检查一下url格式是否正确,格式为:http://192.168.1.1:4444"); e.printStackTrace(); } return null; } }; public RemoteWebDriver remoteFirefox(){ return tl.get(); } } class RemoteIE implements Runnable{ public void run() { // TODO Auto-generated method stub } ThreadLocal<RemoteWebDriver> tl = new ThreadLocal<RemoteWebDriver>(){ protected RemoteWebDriver initialValue() { try { return new RemoteWebDriver(new URL(ConfigParser.getIENode()), DesiredCapabilities.internetExplorer()); } catch (MalformedURLException e) { logger.error("实例化url出错,检查一下url格式是否正确,格式为:http://192.168.1.1:4444"); e.printStackTrace(); } return null; } }; public RemoteWebDriver remoteIE(){ return tl.get(); } } class RemoteChrome implements Runnable{ public void run() { // TODO Auto-generated method stub } ThreadLocal<RemoteWebDriver> tl = new ThreadLocal<RemoteWebDriver>(){ protected RemoteWebDriver initialValue() { try { return new RemoteWebDriver(new URL(ConfigParser.getChromeNode()), DesiredCapabilities.chrome()); } catch (MalformedURLException e) { logger.error("实例化url出错,检查一下url格式是否正确,格式为:http://192.168.1.1:4444"); e.printStackTrace(); } return null; } }; public RemoteWebDriver remoteChrome(){ return tl.get(); } } class RemoteSafari implements Runnable{ public void run() { // TODO Auto-generated method stub } ThreadLocal<RemoteWebDriver> tl = new ThreadLocal<RemoteWebDriver>(){ protected RemoteWebDriver initialValue() { try { return new RemoteWebDriver(new URL(ConfigParser.getSafariNode()), DesiredCapabilities.safari()); } catch (MalformedURLException e) { logger.error("实例化url出错,检查一下url格式是否正确,格式为:http://192.168.1.1:4444"); e.printStackTrace(); } return null; } }; public RemoteWebDriver remoteSafari(){ return tl.get(); } } class RemoteHtmlUnit implements Runnable{ public void run() { // TODO Auto-generated method stub } ThreadLocal<RemoteWebDriver> tl = new ThreadLocal<RemoteWebDriver>(){ protected RemoteWebDriver initialValue() { try { return new RemoteWebDriver(new URL(ConfigParser.getHtmlUnitNode()), DesiredCapabilities.htmlUnit()); } catch (MalformedURLException e) { logger.error("实例化url出错,检查一下url格式是否正确,格式为:http://192.168.1.1:4444"); e.printStackTrace(); } return null; } }; public RemoteWebDriver remoteHtmlUnit(){ return tl.get(); } } public WebDriver getDriver() { return this.driver; } public void setDriver(WebDriver driver) { this.driver = driver; } public void setDriver(Browser browser){ if(browser.equals(Browser.Firefox)){ Firefox ff = new Firefox(); setDriver(ff.firefox()); }else if(browser.equals(Browser.Chrome)){ Chrome c = new Chrome(); setDriver(c.chrome()); }else if(browser.equals(Browser.IE)){ IE ie = new IE(); setDriver(ie.ie()); }else if(browser.equals(Browser.Safari)){ Safari s = new Safari(); setDriver(s.safari()); }else if(browser.equals(Browser.RemoteChrome)){ RemoteChrome rc = new RemoteChrome(); setDriver(rc.remoteChrome()); }else if(browser.equals(Browser.RemoteFirefox)){ RemoteFirefox rf = new RemoteFirefox(); setDriver(rf.remoteFirefox()); }else if(browser.equals(Browser.RemoteIE)){ RemoteIE ri = new RemoteIE(); setDriver(ri.remoteIE()); }else if(browser.equals(Browser.RemoteHtmlUnit)){ RemoteHtmlUnit rh = new RemoteHtmlUnit(); setDriver(rh.remoteHtmlUnit()); }else if(browser.equals(Browser.RemoteSafari)){ RemoteSafari rs = new RemoteSafari(); setDriver(rs.remoteSafari()); }else if(browser.equals(Browser.HtmlUnit)){ HtmlUnit hu = new HtmlUnit(); setDriver(hu.htmlUnit()); }else if(browser.equals(Browser.NULL)){ this.driver=null; }else{ logger.error("请输入正确的浏览器模式,否则无法正确的运行程序!"); } } public void setDriver(String browser){ if(browser.equals(Browser.Firefox.toString().toLowerCase())){ Firefox ff = new Firefox(); setDriver(ff.firefox()); }else if(browser.equals(Browser.Chrome.toString().toLowerCase())){ Chrome c = new Chrome(); setDriver(c.chrome()); }else if(browser.equals(Browser.IE.toString().toLowerCase())){ IE ie = new IE(); setDriver(ie.ie()); }else if(browser.equals(Browser.Safari.toString().toLowerCase())){ Safari s = new Safari(); setDriver(s.safari()); }else if(browser.equals(Browser.RemoteChrome.toString().toLowerCase())){ RemoteChrome rc = new RemoteChrome(); setDriver(rc.remoteChrome()); }else if(browser.equals(Browser.RemoteFirefox.toString().toLowerCase())){ RemoteFirefox rf = new RemoteFirefox(); setDriver(rf.remoteFirefox()); }else if(browser.equals(Browser.RemoteIE.toString().toLowerCase())){ RemoteIE ri = new RemoteIE(); setDriver(ri.remoteIE()); }else if(browser.equals(Browser.RemoteHtmlUnit.toString().toLowerCase())){ RemoteHtmlUnit rh = new RemoteHtmlUnit(); setDriver(rh.remoteHtmlUnit()); }else if(browser.equals(Browser.RemoteSafari.toString().toLowerCase())){ RemoteSafari rs = new RemoteSafari(); setDriver(rs.remoteSafari()); }else if(browser.equals(Browser.HtmlUnit.toString().toLowerCase())){ HtmlUnit hu = new HtmlUnit(); setDriver(hu.htmlUnit()); }else if(browser.equals(Browser.NULL)){ this.driver=null; }else{ logger.error("请输入正确的浏览器模式,否则无法正确的运行程序!"); } } public WebDriver getWebDriver() { // TODO Auto-generated method stub return driver; } public WebDriver register(AutoDriverEventListener ade){ driver = new EventFiringWebDriver(getWebDriver()).register(ade); return driver; } public EventFiringWebDriver getEfdriver() { return efdriver; } public void setEfdriver(EventFiringWebDriver efdriver) { this.efdriver = efdriver; } public WebDriver unregister(AutoDriverEventListener ade){ driver = new EventFiringWebDriver(getWebDriver()).unregister(ade); return driver; } }