I am trying to test a WPF application using the UI-Automation framework that MSFT provides. There were a few powershell scripts written that invoked the cmdlets created to manipulate the visual controls of the application.
There is a DropDown within my application that has an entry 'DropDownEntry'. In my cmdlet, I am trying to do something as follows:
AutomationElement getItem = DropDown.FindFirst(TreeScope.Descendants,
new AndCondition(
new PropertyCondition(AutomationElement.ControlTypeProperty,ControlType.ListItem),
new PropertyCondition(AutomationElement.NameProperty, "DropDownEntry",PropertyConditionFlags.IgnoreCase)));
开发者_开发知识库The above given snippet returns 'null' upon execution which essentially means that the above given logic was unable to find my dropdown entry.
Can somebody tell me why this might be happening? I checked the name of my control and the values. Everything seems to be in order. I am not sure why this would be happening. Any help would be much appreciated.
Thanks
Since it is a DropDown control you are automating, it may be that the child items are not available through UIAutomation until the DropDown is dropped down.
You need to get hold of the ExpandCollapse pattern from the DropDown element, then call its Expand method.
I created some extension methods to help with getting hold of patterns. Here's one example
public static class PatternExtensions
{
public static ExpandCollapsePattern GetExpandCollapsePattern(this AutomationElement element)
{
return element.GetPattern<ExpandCollapsePattern>(ExpandCollapsePattern.Pattern);
}
public static T GetPattern<T>(this AutomationElement element, AutomationPattern pattern) where T : class
{
object patternObject = null;
element.TryGetCurrentPattern(pattern, out patternObject);
return patternObject as T;
}
}
Use it like this:
DropDown.GetExpandCollapsePattern().Expand()
Then you can execute your original code to find the child element.
If you're not already, you may want to inspect your application with UISpy to verify the properties.
精彩评论