Useful WatiN Extension Methods
- by Steve Wilkes
I've been doing a fair amount of UI testing using WatiN recently – here’s some extension methods I've found useful. This checks if a WatiN TextField is actually a hidden field. WatiN makes no distinction between text and hidden inputs, so this can come in handy if you render an input sometimes as hidden and sometimes as a visible text field. Note that this doesn't check if an input is visible (I've got another extension method for that in a moment), it checks if it’s hidden. public static bool IsHiddenField(this TextField textField)
{
if (textField == null || !textField.Exists)
{
return false;
}
var textFieldType = textField.GetAttributeValue("type");
return (textFieldType != null) && textFieldType.ToLowerInvariant() == "hidden";
}
The next method quickly sets the value of a text field to a given string. By default WatiN types the text you give it into a text field one character at a time which can be necessary if you have behaviour you want to test which is triggered by individual key presses, but which most of time is just painfully slow; this method dumps the text in in one go. Note that if it's not a hidden field then it gives it focus first; this helps trigger validation once the value has been set and focus moves elsewhere.
public static void SetText(this TextField textField, string value)
{
if ((textField == null) || !textField.Exists)
{
return;
}
if (!textField.IsHiddenField())
{
textField.Focus();
}
textField.Value = value;
}
Finally, here's a method which checks if an Element is currently visible. It does so by walking up the DOM and checking for a Style.Display of 'none' on any element between the one on which the method is invoked, and any of its ancestors.
public static bool IsElementVisible(this Element element)
{
if ((element == null) || !element.Exists)
{
return false;
}
while ((element != null) && element.Exists)
{
if (element.Style.Display.ToLowerInvariant().Contains("none"))
{
return false;
}
element = element.Parent;
}
return true;
}
Hope they come in handy