2013-07-16 77 views
1

我使用硒webdriver进行测试,并希望有机会选择运行每一组测试的浏览器。我用一个工厂来实现这一点,但出于某种原因,我似乎无法让它工作。以下是我有java工厂模式问题

class WebDriverFactory { 

private WebDriver driver; 
private String baseUrl; 
private StringBuffer verificationErrors = new StringBuffer(); 

private WebDriverFactory() { 
} 

public static void setChromePath() { 
// Set file path here 
} 

public static void setIEPath() { 
// Set file path here 
} 

public static WebDriver getWebDriver(String type) { 

System.out.println("choose a browser:"); 
Scanner scan = new Scanner(System.in); 
scan.next(); 

if (type.equalsIgnoreCase("chrome")) { 
    return createChrome(); 
} else if (type.equalsIgnoreCase("firefox")) { 
    return createFirefox(); 
} else if (type.equalsIgnoreCase("IE")) { 
    return createInternetExplorer(); 
} else { 
    return null; 
} 


} 

private static WebDriver createChrome() { 

System.setProperty("webdriver.chrome.driver", "C:/Program Files   

(x86)/Google/Chrome/Application/chromedriver_win32_2.1/chromedriver.exe"); 
DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
ChromeOptions chromeOptions = new ChromeOptions(); 
capabilities.setCapability("chrome.binary",  

"C:/AppData/Local/Google/Chrome/Application/chrome.exe"); 
WebDriver driver = new ChromeDriver(capabilities); 
return driver; 
} 

private static WebDriver createFirefox() { 

WebDriver driver = new FirefoxDriver(); 
return driver; 
} 

private static WebDriver createInternetExplorer() { 

File file = new File("C:/Utils/IEDriverServer_Win32_2.33.0/IEDriverServer.exe"); 
System.setProperty("webdriver.ie.driver", file.getAbsolutePath()); 
WebDriver driver = new InternetExplorerDriver(); 
return driver; 
} 
} 

而在测试类我:

String type = null; 
WebDriverFactory.getWebDriver(type); 

当我输入一个字符串扫描仪似乎并没有做任何事情,并且浏览器无法打开?任何人都可以帮我吗?

我现在有这个测试类:

System.out.println("choose a browser:"); 
Scanner scan = new Scanner(System.in); 
String type = scan.next(); 
WebDriverFactory.getWebDriver(type); 
+0

调用getWebDriver(null)应该让你NPE?比较 – Jayan

+0

可以把恒定的字符串先放入,但是在我用我的字符串选择进入后,似乎还没有做任何事情。 – user2177781

回答

0

如杰恩所提到的,你应该有一个NPE因为你传递null到getWebDriver方法。但是,请保留这一点,在您的代码中,您正在使用scan.next()语句读取一个字符串,但是您尚未将读取值分配给变量type

话说,你的说法应该是如下:

Scanner scan = new Scanner(System.in); 
type = scan.next(); 

除此之外,我没有看到任何使用经过type变量来getWebDriver方法是什么,你是无论如何,以从输入用户typegetWebDriver方法。

+0

我已经有了吗? – user2177781

+0

那么这是getWebDriver方法的问题吗? – user2177781

0

您应该首先更正方法getWebDriver(type),以便它始终不会返回空值!然后看看你走到哪里。正如Mubin所建议的那样,如果要读取方法内的输入,则可以放弃输入参数type。然而,基于在评论这个答案的讨论这里的方法getWebDriver(type)如何看起来应该像:

public static WebDriver getWebDriver(String type) { 

    if (type.equalsIgnoreCase("chrome")) { 
    return createChrome(); 
    } else if (type.equalsIgnoreCase("firefox")) { 
    return createFirefox(); 
    } else if (type.equalsIgnoreCase("IE")) { 
    return createInternetExplorer(); 
    } else { 
    return null; 
    } 

} 

OP被传递null这个方法在测试执行,也没有指定由Scanner读取值。目前尚不清楚OP的期望。作为杰恩所提到的,我们应该得到一个NullPointerException

+0

好的,谢谢! – user2177781

+0

那么我最初在测试课上有扫描仪,它会更好吗? – user2177781

+0

@ user2177781由于它是一种工厂方法,我认为如果你在测试类读取输入,并将其传递给'getWebDriver(字符串型)'方法是最好的;另外,确保你没有传递null。 – zEro