2012-04-11 7 views
0

Ich teste eine Website mit Specflow und WebDriver. Ich verwende Ereignisse von specflow zum Starten und Beenden des Treibers. Ich starte den Treiber in [BeforeFeature] und beende es in [AfterFeature].SpecFlow WebDriver Fehler beim Schließen oder Beenden des WebDrivers

Ich benutze eine statische Common Class, um den Treiber zu halten und die Methoden zu haben, ihn zu betreiben.

Das Problem tritt auf, nachdem alle Tests für ein Feature ausgeführt wurden und das nächste Feature ausgeführt wird. Ich erhalte die folgenden Fehler .:

Wenn im [AfterFeature] ich einen Driver.Close tun() ich den Fehler:

-> 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 

Wenn ich einen Driver.Quit tun() ich der Fehler:

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

Wenn ich in der Nähe oder den Fahrer nicht beenden, Alle Funktionen ohne Probleme laufen, aber ich bekomme viele geöffnet Firefox Sie Windows.

Mein Code ist:

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

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

Und ...

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(); 
    } 
} 

Antwort

1

gerade herausgefunden, was das Problem war. Ich werde es hier für zukünftige Referenz setzen.

Das Problem lag in der Art, wie ich den Treiber auf meinem BaseWebObject, dem Vater aller PageObjects, gelesen habe.

Ich hatte dies:

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

} 

Dies schlägt fehl, weil der Fahrer im statischen Konstruktor nur einmal gelesen werden.

, damit es funktioniert ich den Fahrer an der Instanziierung Zeit lesen muß, so im Instanzkonstruktors wie so:

public class BaseWebObject 
{   
    protected static IWebDriver Driver; 

    public BaseWebObject() 
    { 
     Driver = Common.Driver; 
    }  
} 
Verwandte Themen