我无法关闭我的 Selenium 实例(C# WebDriver,Gallio)。我觉得我有毛病...

软件测试 硒2
2022-01-19 13:46:47

因此,我通过 Gallio 设置了一些代码,用于在每个测试会话之前启动 selenium 服务器,并在会话完成时将其关闭(所有测试都已运行)。它可以正常启动服务器,但我似乎无法让它停止服务器。我很确定我做错了什么,但我看不出是什么。你能帮助我吗?

我正在使用:
* Selenium Server 2.0b4
* Selenium WebDriver 2.0b4
* Visual Studio 2010 (C#)
* ReSharper
* Gallio

这是我的代码:

[AssemblyFixture]
public class SeleniumSetup : IDisposable
{
    private Process seleniumServer;
    private Boolean disposed;

    [FixtureSetUp]
    public void Setup()
    {
        const string javaFileLocation = @"C:\opt\java\bin\java.exe";
        const string jarFileLocation = @"C:\my\autotests\Selenium\selenium-server.jar";
        var seleniumServer = new Process
            {
                StartInfo =
                    {
                        FileName = javaFileLocation,
                        Arguments = "-jar " + jarFileLocation + " -port 4444 -timeout 90 -browserSideLog -ensureCleanSession -trustAllSSLCertificates -log selenium-server.log",
                        WorkingDirectory =
                            jarFileLocation.Substring(0, jarFileLocation.LastIndexOf("\\")),
                        UseShellExecute = true
                        //WindowStyle = ProcessWindowStyle.Hidden
                    }
            };
        seleniumServer.Start();
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (false == disposed)
        {
            if (disposing)
                DisposeOfSeleniumServer();

            disposed = true;
        }
    }

    [FixtureTearDown]
    private void DisposeOfSeleniumServer()
    {
        if (seleniumServer != null)
        {
            try
            {
                seleniumServer.Kill();
                seleniumServer.WaitForExit(10000);
            }
            finally
            {
                seleniumServer.Dispose();
                seleniumServer = null;
            }
        }
    }
}
1个回答

根据我的经验,以下是关闭服务器的最佳方法。

    /// <summary>
    /// Close the server.
    /// </summary>
    public static void CloseServer()
    {
        string address = ConfigurationManager.AppSettings["RemoteWebDriverAddress"];
        string port = ConfigurationManager.AppSettings["RemoteWebDriverPort"];

        var request = (HttpWebRequest)WebRequest.Create(String.Format("http://{0}:{1}/selenium-server/driver/?cmd=shutDownSeleniumServer", address, port));
        request.GetResponse();
    }

您可以向将关闭服务器的服务器发送一个获取请求,我不确定为什么我在使用其他方法时遇到问题。