The other day someone on the Team System Testing forum posted a question about Web Test validation rules when using master pages in their ASP.Net application. The problem is that if you use a master page it will change the names of your form fields at runtime. For example if you have a form field named “LName” it will be change to something like “ctl00$ContentPlaceHolder1$LName”. So if you have created a validation rule for “LName” it will now fail as there a field with “LName” is no longer returned.
So how do you handle validation or extraction rules for a web test if the names of your form fields are changed at runtime by the master page. Well you can use one of the two following methods.
Here is an example of a custom validation rule that allows you to enter a form field name and a value to check for. It then checks to see if the name you entered is in any of the field names. So if you enter “LName” as the field name to look for and you use a master pages that changes the name to “ctl00$ContentPlaceHolder1$LName” it will find this field as the code uses the String.Contains Method to check and see if “LName” is contained within the HtmlTag.
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using Microsoft.VisualStudio.TestTools.WebTesting;
using System.Diagnostics;
namespace myRules
{
public class rule2:ValidationRule
private string _name;
private string _value;
public string Name
get {return _name;}
set {_name = value;}
}
public string Value
get { return _value; }
set { _value = value; }
public override string RuleName
get { return "rule2"; }
public override string RuleDescription
get
return "validate rule";
public override void Validate(object sender, ValidationEventArgs e)
if (e.Response.HtmlDocument != null)
//look for input tags
foreach (HtmlTag tag in e.Response.HtmlDocument.GetFilteredHtmlTags(new string[] { "input" }))
for (int i = 0; i < tag.Attributes.Count; i++)
string temp = tag.Attributes[i].Value.ToString();
//Debug.WriteLine("Name " + tag.Attributes[i].Name);
//Debug.WriteLine("Value " + temp);
//check to see if the tag contains the name we are looking for
if (temp.Contains(_name))
//Debug.WriteLine("check " + tag.GetAttributeValueAsString("value"));
//check to see if the value of the tag name we were looking for is what we are expecting
if (tag.GetAttributeValueAsString("value") == _value)
e.IsValid = true;
return;
e.Message = "No input tag contained " + _name + " in it";
e.IsValid = false;
For more information on custom validation rules check out the following links
http://msdn2.microsoft.com/en-us/library/ms182556.aspx
http://blogs.msdn.com/joshch/archive/2005/11/17/494164.aspx
Enjoy and have fun.
Brian