Мы унаследовали большое унаследованное приложение WinForms, использующее элементы управления DevExpress
(DevExpress.XtraNavBar.v8.1 и DevExpress.XtraEditors.v8.1)
(я смог обновить до версии 15.1. Это проект Инструмент конвертера, созданный DevExpress, который позволяет вам использовать новейшие элементы управления DevEpress).Как идентифицировать элементы управления WinForms DevExpress с помощью AutomationId?
И есть много давления, чтобы прекратить проводить ручное тестирование и создать набор автоматизации, который будет проверять приложение. Мы исследовали инструменты там, и White framework - лучший инструмент для нашей потребности.
Проблема с элементами управления DevExpress, потому что мы не можем идентифицировать их вообще. Хотя мы можем идентифицировать родителя этих элементов управления.
var application = Application.Launch(@"C:\App\app.exe");
var window = application.GetWindow(SearchCriteria.ByAutomationId("MainMDI"), InitializeOption.NoCache);
var menu = window.Get(SearchCriteria.ByAutomationId("navBarMainMenu")); // this is the parent of those DevExpress controls
// here throws an exeception because cannot find the 'Users' menu item (it is actually other text)
var users = menu.Get(SearchCriteria.ByText("Users"));
users.Click();
В "inspect.exe" он показывает, что родитель имеет детей:
И это с помощью "UI Automation Verify":
ОБНОВЛЕНИЕ:
Я попытался, взяв детей родителя, но он возвращает мне список с нуля пунктов:
var application = Application.Launch(@"C:\App\app.exe");
var window = application.GetWindow(SearchCriteria.ByAutomationId("MainMDI"), InitializeOption.NoCache);
var menu = window.Get(SearchCriteria.ByAutomationId("navBarMainMenu"));
System.Windows.Automation.AutomationElement automationElement = menu.AutomationElement;
AutomationElementCollection automationElementCollection = automationElement.CachedChildren; // the collection is empty
foreach (AutomationElement element in automationElementCollection)
{
string name = element.Current.Name;
if (name == "Users")
{
// try to click on it
}
}
UPDATE 2:
Я модернизировал DevExpress к v15.2 , но я до сих пор не могу найти идентификатор автоматизации.
P.S: Извините за зеленые прямоугольники, клиент не хочет ничего показывать из приложения.
Это был вопрос, который я задал пару месяцев назад. И, как вы сказали, единственным жизнеспособным решением было использование рамки «Coded UI» с Visual Studio Enterprise, а также покупка подписки DevExpress Universal, которая не учитывает интеграцию с кодированным интерфейсом. Очень жаль, что нет жизнеспособного решения с белым каркасом, который является бесплатным. Я думаю, что DevExpress сделал это специально, чтобы выжать больше денег из своих подписчиков –