We’ve been using PowerShell to write automated tests of the UI on my current project. One of the tasks I took on today was creating a custom cmdlet to enable us to select radio buttons.
I already had an existing assembly of cmdlets to work with, so I just added a new class (SelectRadioButton) to it. Next, I added references to System.Management.Automation and System.Windows.Automation. With these references in place, I could add this attribute to the class:
[Cmdlet(VerbsCommon.Select, "RadioButton", SupportsShouldProcess = true)]
The attribute determines the actual name of the cmdlet you’ll use in scripts (Select-Radiobutton). The cmdlet needs an instance of AutomationElement to operate on, so that’s defined next:
[Parameter(Position = 0, Mandatory = true, HelpMessage = "Element containing a radio button control")]
[ValidateNotNull]
public AutomationElement Element { get; set;}
Finally, I adapted some of the logic for my override of the ProcessRecord from this article on using UI automation. The end result looks something like this:
protected override void ProcessRecord()
{
try
{
if (Element.Current.ControlType.Equals(ControlType.RadioButton))
{
SelectionItemPattern pattern = Element.GetCurrentPattern(SelectionItemPattern.Patern) as SelectionItemPattern;
if (pattern != null) pattern.Select();
}
else
{
//Put something in here for handling something other than a RadioButton
}
}
catch (Exception ex)
{
// You could put some logging here
throw;
}
}
Like this:
Like Loading...