Take the 2-minute tour ×
Software Quality Assurance & Testing Stack Exchange is a question and answer site for software quality control experts, automation engineers, and software testers. It's 100% free, no registration required.

So, I have some code set up via Gallio, to start the selenium server before each test session, and shut it down when the session finishes (all tests have run). It starts the server fine, but I can't seem to get it to stop the server. I'm pretty sure I've done something wrong, but I can't see what. Can you help me?

I'm using:
* Selenium Server 2.0b4
* Selenium WebDriver 2.0b4
* Visual Studio 2010 (C#)
* ReSharper
* Gallio

Here is my code:

[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;
            }
        }
    }
}
share|improve this question
    
Since I'm still relatively new to Selenium, this may not be a great question, but, is there a reason why you're running Selenium Server with Selenium2? I didn't think that it was required with the new API. Or is this running in the background without me noticing? –  Lyndon Vrooman Jun 14 '11 at 4:17
1  
@Lyndon You still need to run the selenium server to get the Remote Web Driver to work. We tend to use this to allow our test to be run on a another machine rather than the build server. You also need it in .net to run the headless browser (HtmlUnit). –  stuartf Jun 14 '11 at 8:00
    
I love learning something new when I wasn't looking for it. Thanks! –  Lyndon Vrooman Jun 14 '11 at 12:39
add comment

1 Answer 1

up vote 3 down vote accepted

The following was the best way to close the server in my experience.

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

You can send a get request to the server which will close the server, I'm not sure of the top of my head why I was having issues with the other methods.

share|improve this answer
    
Thanks for the suggestion, Stuart. I'll give it a shot this morning. If it works, You get a vote! :) –  Greg Gauthier Jun 14 '11 at 12:47
1  
Ok, this worked perfectly. A couple things I had to make sure I was doing right: 1> "shutDownSeleniumServer" starts with a LOWER-CASE "s". 2> I had to remove the conditional in DisposeOfSeleniumServer(), that was checking to make sure seleniumServer was NOT null. I wonder if there's an attribute I could be looking at instead of just the object itself. Anyway, thanks for the help! –  Greg Gauthier Jun 14 '11 at 16:09
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.