2016-04-19 5 views
1

Мы унаследовали большое унаследованное приложение 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(); 

Application menu with inspect.exe

В "inspect.exe" он показывает, что родитель имеет детей:

Inspect.exe on menu

И это с помощью "UI Automation Verify": enter image description here

ОБНОВЛЕНИЕ:

Я попытался, взяв детей родителя, но он возвращает мне список с нуля пунктов:

 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: Извините за зеленые прямоугольники, клиент не хочет ничего показывать из приложения.

ответ

0

нет хорошего ответа (пока), но я работал над одной и той же проблемой и изучал ее последние две недели; мы не можем найти идентификаторы автоматизации элементов DevExpress с помощью наших кодированных тестов пользовательского интерфейса, и когда мы делаем его редко надежно. 16.1 не является работоспособным решением до тех пор, пока не будет обновлен пакет ideablade для winGrids. Есть много людей, имеющих эту же проблему. Опубликовать больше, когда я вернусь на свой компьютер, и не стесняйтесь dm me. В нашем случае способ создания элементов DevExpress (в 13.1) во время выполнения приводит к тому, что массивные количества идентификаторов автоматизации вызывают ошибку переполнения стека.

Кодированный пользовательский интерфейс - это то, что, как утверждается, является единственным рабочим UI-тестом для него (если вы используете Enterprise VS), но плохо просматриваете белый цвет. слово предупреждения - потому что эти идентификаторы автоматизации продолжают генерировать «на лету», вы столкнетесь с проблемой переполнения стека, чем дольше ваш тест, или чем больше данных вы пытаетесь получить, а вызовом метода find по методу - это то, что вызвало для нас. Я обновляю, когда вернусь к работе! Удачи :-)

+0

Это был вопрос, который я задал пару месяцев назад. И, как вы сказали, единственным жизнеспособным решением было использование рамки «Coded UI» с Visual Studio Enterprise, а также покупка подписки DevExpress Universal, которая не учитывает интеграцию с кодированным интерфейсом. Очень жаль, что нет жизнеспособного решения с белым каркасом, который является бесплатным. Я думаю, что DevExpress сделал это специально, чтобы выжать больше денег из своих подписчиков –