0

とを使用してWebサイトをテストしていSpecflowますWebDriver。スペックフローのイベントを使用して、ドライバーを開始および終了しています。でドライバーを起動し、[BeforeFeature]で終了し[AfterFeature]ます。

静的な共通クラスを使用してドライバーを保持し、それを操作するメソッドがあります。

この問題は、ある機能ですべてのテストが実行され、次の機能が実行を開始した後に発生します。次のエラーが発生します。

Driver.Close()[AfterFeature]を実行すると、次のエラーが発生します。

    -> error: Unexpected error. System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:7055
   at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
   --- End of inner exception stack trace ---
   at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   at System.Net.HttpWebRequest.GetRequestStream()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute) in c:\Projects\WebDriver\trunk\dotnet\src\WebDriver\Remote\HttpCommandExecutor.cs:line 91
   at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(Command commandToExecute) in c:\Projects\WebDriver\trunk\dotnet\src\WebDriver\Firefox\Internal\ExtensionConnection.cs:line 128
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(DriverCommand driverCommandToExecute, Dictionary`2 parameters) in c:\Projects\WebDriver\trunk\dotnet\src\WebDriver\Remote\RemoteWebDriver.cs:line 795

Driver.Quit()を実行すると、次のエラーが発生します。

-> error: Cannot deserialize JSON object into type 'System.String'. Line 1, position 35.

ドライバーを閉じたり終了したりしないと、すべての機能は問題なく実行されますが、FirefoxWindowsがたくさん開かれます。

私のコードは次のとおりです。

[Binding]
public class Events
{
    [BeforeFeature]
    public static void BeforeFeature()
    {
        Common.CreateDriver();
    }

    [AfterFeature]
    public static void AfterFeature()
    {
        Common.QuitDriver();
    }
}

と...

public static class Common
{
    public static IWebDriver Driver { get; set; }        

    public static void CreateDriver(){            
        Driver = new FirefoxDriver();
        Driver.Manage().Timeouts().ImplicitlyWait(new TimeSpan(0, 0, 5));        
    }

    public static void CloseDriver()
    {
        Driver.Close();
    }

    public static void QuitDriver()
    {
        Driver.Quit();
    }
}
4

1 に答える 1

1

問題が何であるかがわかりました。今後の参考のためにここに置いておきます。

問題は、すべての PageObjects の父である BaseWebObject の Driver を読み取る方法にありました。

私はこれを持っていました:

    public class BaseWebObject
{        
    protected static IWebDriver Driver = Common.Driver;

}   

Driver は静的コンストラクターで一度だけ読み取られるため、これは失敗します。

それを機能させるには、インスタンス化時にドライバーを読み取る必要があるため、インスタンス コンストラクターでは次のようになります。

    public class BaseWebObject
{        
    protected static IWebDriver Driver;

    public BaseWebObject()
    {
        Driver = Common.Driver;
    }    
}
于 2012-04-11T16:33:31.907 に答える