Configuring the Web Application
When you initialise Seleno, by calling the Run
method on your SelenoHost
instance, you are able to configure Seleno by calling actions on the IAppConfigurator
interface.
Run(Action<IAppConfigurator> configure)
This section will look at the methods available for configuring the web application that you are testing.
Project Location
Seleno needs to know where the web application you are testing is located. To do this, it uses the concept of a web server to define the location of the web application.
Seleno provides two web server implementations:
- IisExpressWebServer: Will host an ASP.Net MVC/WebForms application, located in a folder on the same machine, in an IIS Express process. It requires IIS Express to be installed. This is the default web server.
- InternetWebServer: Will point Seleno to a URL on the internet or your intranet.
IisExpressWebServer
If your web application is a project in the same solution as your Seleno project, then you can simply initialise Seleno with the name of the folder and the port for IIS Express to host it. If the folder cannot be found in the solution then a DirectoryNotFoundException
is thrown.
Instance.Run("TestStack.Seleno.Samples.Movies", 19456);
This method will use the ProjectLocation
class to create a WebApplication
with a valid folder and port number. If you want more control over the creation of the WebApplication
then you can use the ProjectToTest
configuration method to pass in a WebApplication
you construct yourself.
var location = ProjectLocation.FromFolder("TestStack.Seleno.Samples.Movies");
Instance.Run(configure => configure
.ProjectToTest(new WebApplication(location, 19456)));
This would be useful if the web application was not in a sub-folder of the solution. In that case, you could just create the location using the ProjectLocation.FromPath("some path")
method and passing in the full path to the folder containing the web application.
InternetWebServer
If your web application is available via a URL, then you do not need to host it in IIS Express. Instead, you just configure Seleno to use an InternetWebServer
, passing in the URL.
Instance.Run(configure => configure
.WithWebServer(new InternetWebServer("www.google.co.uk")));
You tell Seleno to use a custom web server, by calling the WithWebServer
method of the configuration.
Custom Web Server
If you wanted to create a custom web server, then you would need to implement the IWebServer
interface, specifying a BaseUrl
.
public interface IWebServer : ILifecycleTask
{
string BaseUrl { get; }
}
The IWebServer
interface itself implements the ILifecycleTask
, so in addition you would also have to implement its Start
and Stop
methods for starting and stopping the web server.
public interface ILifecycleTask
{
void Start();
void Stop();
}
Setting Environment Variables for the Web Application
When you create a process to host your ASP.Net web application you are able to pass in environment variables as key/value pairs. Your application code can then check for these variables and choose different configuration behaviour depending on the value of the variable.
Seleno provides the WithEnvironmentValue
method on the configurator. This allows you to pass in a key/value pair, or just the key. You need to call the method for each environment variable that you want to add.
Instance.Run(configure => configure
.WithEnvironmentVariable("FunctionalTests")
.WithEnvironmentVariable("ConnectionString", "DefaultConnectionString"));
You can read more about this topic in the following blog posts:
- Changing RunTime Behavior Of Application Under Test (Mehdi Khalili)
- Black-Box Testing ASP.Net: Configuring Application Under Test (Michael Whelan)
Configuring Strongly Typed Navigation for ASP.Net MVC Applications
Seleno is able to generate URLs from controller actions for MVC applications using the application's route table. This removes the brittleness of URLs from your tests as they will always be in sync with those that the application is using.
To tell Seleno what routes to use, just pass an Action<RouteCollection>
to the WithRouteConfig
method. For example, if your MVC application defines its routes in a RouteConfig
class, with a RegisterRoutes
method:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
...
}
then you could call WithRouteConfig
and pass in the RegisterRoutes
method:
Instance.Run(configure => configure
.WithRouteConfig(RouteConfig.RegisterRoutes)
HTML Control Naming
Seleno lets you specify the naming strategy that it uses to identify control names. Seleno provies two HTML control ID generators
- DefaultControlIdGenerator: Creates a sanitized ID with a valid HTML identfier, using the specified property name.
- MvcControlIdGenerator: Uses the same algorithm ASP.NET MVC uses to generate control IDs.
You can specify the naming strategy that Seleno uses with the UsingControlIdGenerator method:
Instance.Run(configure => configure
.UsingControlIdGenerator(new MvcControlIdGenerator()));
Updated less than a minute ago