一般我們會在[TestInitalize]和[TestCleanup]方法中創建和關閉Selenium對象。但是,如果在[TestInitalize]中直接寫創建Selenium對象的語句,那麽在VS中運行多個TestMethod時,就會在一組測試之間反復多次的啟動和停止Selenium Server,這是相當耗費時間的。
盡管有[ClassInitalize]和[ClassCleanup]標簽,但是這個Microsoft.VisualStudio.TestTools.UnitTesting框架規定了:[ClassInitalize]和[ClassCleanup]標記的方法必須是靜態方法,而[TestMethod]方法卻必須是非靜態的;那麽,Selenium對象到底應該是靜態還是非靜態呢?
So,我們不能直接在測試類中創建Selenium對象,不管是ClassInitalize還是TestInitalize,都不太好。解決辦法是提供公共類,在[TestInitalize]和[ClassCleanup]中調用。
Selenium公共類
public class MySelenium
{
private static ISelenium selenium = null;
private static MyLog log;
public static ISelenium getSelenium() {
if (selenium == null) {
selenium = new DefaultSelenium("localhost", 4444, "*iexplore", "http://ws-gisgtssts-03:8001/");
selenium.Start();
}
return selenium;
}
public static void stopSelenium() {
try
{
selenium.Stop();
}
catch (Exception ex) {
log.addlogWithException("login", "", ex.Message);
}
}
}
調用公共類
[TestInitialize]
public void SetupTest()
{
selenium = MySelenium.getSelenium();
selenium.Open("/Account/ChangePassword");
}
[ClassCleanup]
public static void TeardownTest()
{
MySelenium.stopSelenium();
}