У нас есть несколько автоматических тестов пользовательского интерфейса для нашего приложения WPF (.NET 4);эти тесты используют API пользовательского интерфейса API.
Мы вызываем AutomationElement.FindFirst , чтобы найти целевой элемент, а затем взаимодействовать с ним.
Пример(псевдокод):
var nameEquals = new PropertyCondition(AutomationElement.NameProperty, "OurAppWindow");
var appWindow = DesktopWindow.FindFirst(TreeScope.Children, nameEquals);
// this succeeds
var idEquals = new PropertyCondition(AutomationElement.AutomationIdProperty, "ControlId");
var someItem = appWindow.FindFirst(TreeScope.Descendants, idEquals);
// this suceeds sometimes, and fails sometimes!
Проблема заключается в том, что appWindow.FindFirst
иногда завершается ошибкой и возвращает ноль, даже если элемент присутствует.Я написал вспомогательную функцию, которая обходит дерево автоматизации пользовательского интерфейса вручную и распечатывает его, и во всех случаях присутствует элемент с правильным идентификатором.
Похоже, это связано с тем, сколько других элементов такжеотображается в окне.Если других элементов нет, то это всегда успешно, но когда рядом с ним отображается много других сложных элементов пользовательского интерфейса, поиск не выполняется.
Похоже, что мы достигли какого-то внутреннего ограничения на количество элементов,Я не могу найти ни одного задокументированного предела элемента, упомянутого ни для одного из API автоматизации - есть ли способ обойти это?Я думаю, что мне, возможно, придется написать свою собственную реализацию FindFirst
, которая сама обрабатывает дерево вручную ... Насколько я могу сказать, это должно работать, потому что моя утилита для работы с деревом-принтером делает именно это, и это нормально., но кажется, что это было бы ненужным и медленным: - (
Любая помощь будет принята с благодарностью