NUnit 安装程序似乎在第一次测试完成后不调用 WebDriver

NUnit Setup seems to not call WebDriver after first test completes

我正在 运行 解决似乎与 webdriver/nunit 有关的问题。

在初始 运行 宁我的第一个测试 [Setup][Teardown] 工作。当系统尝试 运行 我的下一个测试时,它需要 [Setup] 它似乎并没有调用 WebDriver

[SetUp]
//This has to be done for all tests.  It is the setup I say!
public void Setup()
{
    LaunchBrowser();
    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(45));
}

[TearDown]
//This has to be done for all tests.  It is the teardown I say!
public void TearItDown()
{
      driver.Dispose();
}

如果我注释掉 [Teardown],我所有的测试 运行 没问题。

LaunchBrowser()

public static IWebDriver driver = new InternetExplorerDriver();

public string landingPage = "http://www.smartdrive.net";

public void LaunchBrowser() 
{
    driver.Navigate().GoToUrl(landingPage);
}

我已经尝试在上次测试中添加一个 driver.Dispose(); 计算我可以在所有测试结束后关闭会话 运行,但它似乎没有成功。

我收到 [Teardown] 的错误

Result Message: 
OpenQA.Selenium.WebDriverException : 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:51089
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, 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)
at OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(Command commandToExecute)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
Result StackTrace:  
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
at OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value)
at OpenQA.Selenium.By.FindElement(ISearchContext context)
at UnitTestProject1.Browser_Landing.getLandingPlacement() in c:\Users\erikag\Desktop\AutomationTests\VS_NetSeleniumTest\UnitTestProject1\UnitTestProject1\Browser_Landing.cs:line 30
            at UnitTestProject1.ServiceConsoleTest.PlacementChk() in c:\Users\erikag\Desktop\AutomationTests\VS_NetSeleniumTest\UnitTestProject1\UnitTestProject1\TestSuite_LandLog.cs:line 46

我确实在某处读到该问题与 webdriver[Teardown] 之后重新启动时出现问题有关,但我似乎无法弄清楚如何解决这个问题。

您在每个 运行 之后处理驱动程序,但没有在每个 运行 之前实例化。所以驱动程序不会按预期工作。在 LaunchBrowser() 方法中实例化驱动程序并重新 运行 测试

更多信息 Dispose() 重置潜水员,因此该实例对于您发布的代码块不再有效。参见 this

而且,最佳做法可能是使用 Quit 而不是 Dispose,因为 Quit() 会调用 Dispose 并进行更多清理,因此您不必使用Dispose分别。

并且,随着 LaunchBrowser() 方法的改变应如下所示:

public IWebDriver Driver;

public string landingPage = "http://www.smartdrive.net";

public void LaunchBrowser() 
{
    driver = new InternetExplorerDriver();
    driver.Navigate().GoToUrl(landingPage);
}