2014-06-20 13 views
2

При выполнении кодированного тестов пользовательского интерфейса на приложения WPF, кнопка WPF Мне нужно, можно найти следующим образом:Как получить элементы Viewbox/Canvas/Path для тестирования кодированного интерфейса?

WpfButton button = new WpfButton(mainWindow); 
button.SearchProperties[WpfButton.PropertyNames.AutomationId] = "btn"; 
button.WindowTitles.Add("MainWindow"); 

После инициализации можно успешно выполнять любые проверки и проверки.

Проблемы возникают, когда я пытаюсь проверить состояние элемента ViewBox, содержащего Canvas, который, в свою очередь, содержит Path. Ни один из этих элементов не имеет аналогового типа из пространства имен Microsoft.VisualStudio.TestTools.UITesting.WpfControls. После короткого расследования я обнаружил, что у этих типов также нет переопределенного метода OnCreateAutomationPeer.

Итак, что является самым удобным способом получения Canvas или ViewBox или тестирования Path для UI?

Возможно, я пропустил совместимый тип из пространства имен Microsoft.VisualStudio.TestTools.UITesting.WpfControls, или, может быть, я должен получить нестандартный тип (например, из Canvas) и переопределить метод OnCreateAutomationPeer, а затем создать точку автоматизации для мой класс DerivedCanvas? Я новичок в тестировании кодированного интерфейса, поэтому, если второе решение решает проблему, как это можно реализовать?

+0

Из любопытства, почему вы не используете карту пользовательского интерфейса? По крайней мере, вы можете исследовать сгенерированный код, чтобы узнать, как он попадает к этим элементам. –

+0

@ DanielMann Вы имеете в виду код, созданный утилитой Coded UI Test Builder? К сожалению, он не может «видеть» холст. Если я, например, щелкнуть холст, содержащийся в окне, он будет распознавать только Window. Но для таких элементов, как TextBlock или Button, все будет в порядке. – undermind

ответ

3

Я нашел ответ. Это кажется очень простым. Во-первых, новый AutomatisableCanvas класс должен быть производным от Canvas:

public class AutomatisableCanvas : Canvas 
{ 
    protected override AutomationPeer OnCreateAutomationPeer() 
    { 
     return new CanvasAutomationPeer(this); 
    } 
} 

Во-вторых, новый CanvasAutomationPeer класс должен быть производным от FrameworkElementAutomationPeer:

class CanvasAutomationPeer : FrameworkElementAutomationPeer 
{ 
    public CanvasAutomationPeer(Canvas owner) 
     : base(owner) { } 

    protected override AutomationControlType GetAutomationControlTypeCore() 
    { 
     return AutomationControlType.Custom; 
    } 
} 

А теперь AutomatisableCanvas управления можно просто найти следующим образом:

WpfCustom canvas = new WpfCustom(mainWindow); 
canvas.SearchProperties[WpfCustom.PropertyNames.AutomationId] = "an AutomationId you've specified for an AutomatisableCanvas instance"; 
canvas.WindowTitles.Add("MainWindow"); 
Смежные вопросы