2017-01-22 6 views
1

Для моего приложения WPF я работаю над автоматизированным тестом UI с использованием TestStack.White.
Я использую элементы управления DoubleUpDown из инструментария xceed wpf в моем приложении.
Как я могу получить доступ к элементу управления DoubleUpDown в своих автоматизированных тестах пользовательского интерфейса?Как автоматизировать xceed updown controls

ответ

2

Используя UIA Verify, вы можете увидеть, что контроль DoubleUpDown рассматриваются как три управления без какой-либо информации об иерархии и следующих AutomationIds:

  • AutoSelectTextBox
  • Part_IncreaseButton
  • Part_DecreaseButton

Итак, вы можете автоматизировать их как обычные элементы управления, но если в одном окне есть несколько элементов управления DoubleUpDown, возникает проблема, потому что все элементы управления будут иметь одинаковые AutomationIds.

Вот пример приложения с двумя первым текстовым полем как элементы управления DoubleUpDown, а третий - как пользовательский, предназначенный для автоматизации.

Test Application Screen

... 
<Label Content="Label for DoubleUpDown1" Grid.Row="0" Grid.Column="0" 
        FontSize="15" Background="Aqua"/> 

<xctk:DoubleUpDown Name="test1" Grid.Row="0" Grid.Column="1" 
        FormatString="F3" Value="1564.6749586" Increment=".001" Maximum="200000.599" 
        AutomationProperties.AutomationId="006" AutomationProperties.Name="NormalDoubleUpDown1" /> 

<Label Content="Label for DoubleUpDown2" Grid.Row="1" Grid.Column="0" 
        FontSize="15" Background="Aqua"/> 

<xctk:DoubleUpDown Name="test2" Grid.Row="1" Grid.Column="1" 
        FormatString="F3" Value="1564.6749586" Increment=".001" Maximum="300000.751" 
        AutomationProperties.AutomationId="007" AutomationProperties.Name="NormalDoubleUpDown2" /> 

<Label Content="Label for MyDoubleUpDown" Grid.Row="2" Grid.Column="0" FontSize="15" Background="Aqua" /> 

<local:MyDoubleUpDown x:Name="test3" Grid.Row="2" Grid.Column="1"        
        FormatString="F3" Value="1564.7749586" Increment=".001" Maximum="200000.599" 
        AutomationProperties.AutomationId="008" AutomationProperties.Name="My Custom DoubleUpDown" /> 
... 

В МАУ Убедитесь, обычные средства управления DoubleUpDown появляется с теми же AutomationIds. Пользовательский интерфейс отображается с реальной иерархией и может быть использован AutomationId, который был установлен в XAML (здесь).

UIA Verifiy Screen


Обычай управления MyDoubleUpDown, простой подкласс Xceed один, но с одноранговым элементом автоматизации.

public class MyDoubleUpDown : Xceed.Wpf.Toolkit.DoubleUpDown 
{ 
    protected override AutomationPeer OnCreateAutomationPeer() 
    { 
     return new MyDoubleUpDownAutomationPeer(this); 
    } 
} 

public class MyDoubleUpDownAutomationPeer : FrameworkElementAutomationPeer 
{ 
    public MyDoubleUpDownAutomationPeer(MyDoubleUpDown owner) 
     : base(owner) 
    { 
    } 
} 

Это способ по умолчанию для автоматизации уникального элемента управления DoubleUpDown в окне.

// link to the application and retrieve the main window 
Application application = Application.Attach("WpfTestApplication1"); 
var windows = application.GetWindows(); 
var window = windows.FirstOrDefault(); 

// get the child components 
TextBox theEdit = window.Get<TextBox>("AutoSelectTextBox"); 
Button increaseButton = window.Get<Button>("PART_IncreaseButton"); 
Button decreaseButton = window.Get<Button>("PART_DecreaseButton"); 

// define the value 
theEdit.SetValue("600"); 

// increase and decrease the value 
increaseButton.Click(); 
increaseButton.Click(); 
increaseButton.Click(); 
decreaseButton.Click(); 

И это код для автоматизации пользовательского элемента управления на основе Xceed.

// retrieve the custom control 
IUIItem theCustomControl = window.Get(SearchCriteria.ByAutomationId("008")); 

// get the childs items     
if(theCustomControl is CustomUIItem) 
{ 
    // retrieve the custom control container 
    IUIItemContainer foundCustomControl = (theCustomControl as CustomUIItem).AsContainer(); 

    // get the child components 
    TextBox theEdit3 = foundCustomControl.Get<TextBox>("AutoSelectTextBox"); 
    Button increaseButton3 = foundCustomControl.Get<Button>("PART_IncreaseButton"); 
    Button decreaseButton3 = foundCustomControl.Get<Button>("PART_DecreaseButton"); 

    // perform actions... 
    theEdit3.SetValue("800"); 
    increaseButton3.Click(); 
    increaseButton3.Click(); 
} 
+0

я получил ошибку синтаксиса для строки 'IUIItemContainer foundCustomControl = (theCustomControl в CustomUIItem) .AsContainer()' 'говоря AsContainer' не доступен. – Bishoy

+1

Обязательно используйте последнюю версию TestStack.White, метод AsContainer() был внутренним в более старой версии. – DLDR

Смежные вопросы