FindFirst всегда возвращает нулевой AutomationElement
Я пытаюсь протестировать некоторые пользовательские элементы управления с помощью пользовательского интерфейса Automated Framework. Один из моих элементов управления имеет базовый класс TextBox, а другой наследует от Control. Я могу найти свой первый элемент управления с помощью своих тестов, однако независимо от того, какую комбинацию я использую TreeScope и условия свойств, я не могу найти свой второй пользовательский элемент управления в окне.
Я объявляю пользовательский элемент управления в XAML следующим образом:
<Grid>
<test:CustomTextBox Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="customTextBox1" VerticalAlignment="Top" Width="120" />
<test:CustomUserControl Height="25" HorizontalAlignment="Left" Margin="12,62,0,0" Name="customUserControl1" VerticalAlignment="Top" Width="119" />
</Grid>
У меня есть образец теста, как показано ниже.
[Test]
public void TestUsingValuePattern()
{
// Getting RootElement...
AutomationElement rootElement = AutomationElement.RootElement;
Assert.IsNotNull(rootElement);
// Searching for Test Window...
AutomationElement windowElement = rootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "TestWindow"));
Assert.IsNotNull(windowElement);
// Searching for Custom TextBox control...
AutomationElement customElement1 = windowElement.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, "customTextBox1"));
Assert.IsNotNull(customElement1);
// Searching for Custom User control
AutomationElement customElement2 = windowElement.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, "customUserControl1"));
Assert.IsNotNull(customElement2);
}
Второе утверждение всегда возвращает нуль, поэтому я даже не могу запустить тесты на нем. Любые предложения здесь о том, что я мог бы сделать, чтобы исправить эту проблему?
2 ответа
Похоже, вам может потребоваться установить свойство AutomationId в XAML, чтобы оно отображалось - это не похоже на то, что свойство Name отображается как AutomationId.
Вы также можете использовать инструмент проверки, чтобы убедиться, что элементы действительно отображаются в дереве автоматизации и имеют AutomationId или другие ожидаемые вами свойства.
Смотрите проверку ниже, вам нужно использовать AutomationId для каждого элемента управления, чтобы получить элемент, использующий его.
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b0892b5c-3850-4518-8063-d4eb5a8d9781/