Как получить все идентификаторы автоматизации приложения WPF в файле?

При автоматизации приложения WPF (с использованием автоматизации пользовательского интерфейса; VSTS 2010) мы вручную добавляли все идентификаторы автоматизации в файл ресурсов, а затем получали к ним доступ один за другим. Учитывая, что приложение может расширяться в любое время, добавление этих идентификаторов вручную может стать утомительным.

Итак, есть ли какой-либо инструмент, который может создать это для нас? то есть получить все идентификаторы в иерархическом формате и сохранить их в файле (xml или csv), а затем мы могли бы анализировать их при необходимости.

Я надеялся на такой инструмент, как UISpy, который не только может отслеживать все элементы, но и экспортировать их.

Существуют ли такие инструменты? Или есть какой-то альтернативный подход?

Любая ценная обратная связь высоко ценится.

Спасибо!


person Srees    schedule 19.11.2012    source источник


Ответы (3)


Мне нравится это:

public static class AutomationIds
{
    public static readonly string MyDataGridId= Create();

    private static string Create([CallerMemberName] string name = null)
    {
        return name;
    }
}

<DataGrid AutomationProperties.AutomationId="{x:Static local:AutomationIds.MyDataGridId}"
          ... />

Потом в тестах

var dataGrid = window.Get<ListView>(AutomationIds.MyDataGridId);
person Johan Larsson    schedule 23.12.2015

Назначьте идентификаторы автоматизации непосредственно в XAML, а затем проанализируйте файлы XAML, поскольку они в конце концов являются XML...

person m0sa♦    schedule 19.11.2012
comment
m0sa.. спасибо за ответ.. Но дело в том, что у нас есть несколько файлов XAML, и как мы можем получить идентификаторы автоматизации в иерархическом формате? - person Srees; 20.11.2012

Давайте посмотрим... Во-первых, я думаю, что ваши данные не являются иерархическими - только потому, что элемент управления может быть динамически назначен дочерним элементом другого.

Если мы изменим проблему на подмножество: «Как мы можем получить иерархическое представление элементов управления в момент времени t?» тогда мы можем ответить на это с помощью MS UIA и, скажем, с помощью простого RawViewWalker (простой поиск в ширину на ходунке, начиная с вашего главного окна, - конечно, пока приложение работает, чтобы UIA мог достичь и запросить Это).

Но это подмножество не удовлетворит ваш первоначальный вопрос, потому что вы, вероятно, увидите часть всей своей коллекции пользовательского интерфейса (поскольку некоторые из них будут скрыты/не активированы в момент времени t).

Таким образом, становится очень сложно использовать инструмент на основе UIA (например, uispy), потому что тогда вам придется устанавливать представление приложения в разные состояния, чтобы получить доступ ко всем элементам управления в вашем приложении в разное время t1, t2...

Я бы предложил одновременно проанализировать все ваши XML-файлы и построить полное дерево «статической» карты управления приложения, которое, как мне кажется, будет ближе всего к тому, о чем вы просите.

Учитывая, что это старый вопрос, я сомневаюсь, что это имеет значение, но просто хотел провести здесь различия.

person AlbusMPiroglu    schedule 13.05.2016