Модификатор bind в ParentIndent#
Определение селектора и устройство его строк приведены в статье "Настройка селекторов".
Модификатор bind: помогает найти элемент после расположенного перед ним текста или контейнера. Подписью элемента называется текст рядом с ним. Например, рядом со списком форматов в окне сохранения Блокнота находится подпись "Тип файла:".
Каждая строка селектора продолжает поиск от элемента, найденного предыдущей строкой. Колонка "ParentIndent" задает подъем по дереву интерфейса к родительскому элементу. Префикс bind: указывает, что после подъема поиск продолжается за ветвью, из которой он начался.
На схеме общий родитель обозначен именем класса PreviewBackground. Исходная точка — текст "Тип файла:". Стрелка ↑ 1 ведет к общему родителю, а следующая стрелка — к расположенному после подписи списку.
Схема дерева окна "Сохранение": один уровень подъема от текста "Тип файла:" и поиск следующего списка.
Число задает количество уровней подъема:
1— подъем на один уровень без привязки. Поиск начинается с первого подходящего дочернего элемента.bind:1— подъем на один уровень с продолжением поиска после исходного элемента.bind:2— подъем на два уровня с продолжением поиска после родительской ветви исходного элемента.bind:n, гдеn— положительное целое число, — подъем на указанное количество уровней. Дляbind:3поиск продолжается после ветви на уровне третьего предка. Число выбирается по реальному дереву интерфейса.
Пустая ячейка в колонке "ParentIndent" не задает подъем. На скриншоте выделены заголовок колонки и пустая ячейка начальной строки селектора.

Sherpa Designer, таблица селектора: пустая ячейка в колонке "ParentIndent".
Для привязки к следующей ветви используется положительное число после bind:. Значения bind:, bind:0 и bind:-1 не задают положительное количество уровней. Префикс записывается строчными латинскими буквами без пробелов перед числом.
Открытие окна "Сохранение" в Блокноте#
Для проверки селекторов необходимо подготовить окно сохранения стандартного Блокнота. Проект и документ создаются на компьютере вручную. Скачивать файлы не требуется.
Используется классический Блокнот Windows 10 с русским интерфейсом. Важно учитывать:
- В другой версии Блокнота дерево элементов может отличаться. В таком случае требуется заново записать селектор и проверить уровни подъема.
- При другом языке интерфейса изменятся названия элементов. Необходимо заменить их в строках селектора.
- Для проверки требуется одно открытое окно Блокнота. При нескольких окнах селектор может выбрать другое окно.
Sherpa Designer и Блокнот запускаются с обычными правами одного Пользователя.
Для подготовки документа необходимо выполнить следующие действия:
Открыть меню Windows "Пуск", ввести
Блокноти запустить найденное приложение. В новом документе ввести текстЗаявка 1042. Ответственный: Анна Смирнова..
Блокнот: текст нового документа.
В меню "Файл" выбрать пункт "Сохранить как...", чтобы открыть окно выбора имени и формата документа.

Блокнот, меню "Файл": пункт "Сохранить как...".
В поле "Имя файла" указать
Заявка 1042.txt. В списке "Тип файла" оставить "Текстовые документы (*.txt)", в списке "Кодировка" —UTF-8. Папка сохранения не участвует в селекторе.
Пример: окно "Сохранение" подготовлено для документа "Заявка 1042.txt" в формате TXT с кодировкой UTF-8. На скриншоте выбрана папка "Отчеты". Оставьте окно открытым на время проверки селекторов. На кнопку "Сохранить" нажимать не требуется: диаграмма только читает текст элементов.

Блокнот, всплывающее окно "Сохранение": имя документа и выбранный тип файла.
Создание проекта в Sherpa Designer#
Для проверки поиска необходимо создать пустой проект, в котором будет собрана диаграмма чтения текста.
На вкладке "Разработка" в группе "Файл" необходимо раскрыть список под кнопкой "Создать" и выбрать пункт "Новый проект".

Sherpa Designer, вкладка "Разработка": пункт "Новый проект" в списке кнопки "Создать".
Пример: в окне "Создать новый проект" укажите "Селекторы Блокнота" в поле "Имя проекта". В поле "Расположение" выберите папку для учебного проекта на своем компьютере. Оставьте чекбокс "Создать каталог с названием проекта" выбранным и установите флаг "Пустого проекта". Нажмите на кнопку "Создать".
Sherpa Designer, всплывающее окно "Создать новый проект": имя и выбор пустого проекта.
Откроется диаграмма "Главная" с блоком "Старт". Файл созданного проекта сохраняется в выбранной папке под именем Селекторы Блокнота.sherpa.
Настройка диаграммы чтения текста#
Для вывода найденного значения на панель "Лог" необходимо добавить блоки чтения и записи результата.
На вкладке "Блоки" в поле поиска необходимо ввести "Получить текст". Затем перетащить найденный блок из группы "Автоматизация приложений" на диаграмму под блок "Старт". Блок с таким же названием из группы "Автоматизация браузеров" для Блокнота не используется.

Sherpa Designer, вкладка "Блоки": блок "Получить текст" в группе "Автоматизация приложений".
Через поиск блоков необходимо добавить "Лог" и "Конец" из группы "Основные блоки". Соединить блоки в порядке "Старт" → "Получить текст" → "Лог" → "Конец". Для соединения требуется перетащить нижний выход одного блока к верхнему входу следующего.

Sherpa Designer, диаграмма "Главная": последовательность блоков чтения и вывода результата.
Для блока "Получить текст" используются следующие свойства:
- "Селектор" — путь к элементу Блокнота. Его заполнение приведено в подразделе "Поиск списка "Тип файла" без привязки".
- "Тип значения" —
Textдля чтения имени файла и типа документа. В примере поиска кнопки используетсяNameдля чтения ее названия. - "Результат" в группе "Выход" — переменная
$Result, в которую записывается прочитанный текст.

Sherpa Designer, панель свойств блока "Получить текст": переменная в свойстве "Результат".
Остальные свойства блока остаются со значениями по умолчанию. В частности, переменная $ProcessID в свойстве "ID процесса" до запуска не заполняется: приложение определяется по селектору. Описание остальных параметров доступно в справочнике блока "Получить текст".
Пример: выберите блок "Лог" и укажите $Result в свойстве "Значение". Блок выведет текст, полученный предыдущим действием. Настройки отправки в Оркестратор и создания скриншотов для этой проверки не используются.

Sherpa Designer, панель свойств блока "Лог": вывод переменной $Result.
Поиск списка "Тип файла" без привязки#
Для определения формата сохраняемого документа нужен список "Тип файла". Поле "Имя файла" задает название документа и не решает эту задачу. Оба элемента имеют класс AppControlHost, поэтому одного названия класса недостаточно.
Для открытия редактора необходимо выбрать блок "Получить текст" и нажать кнопку
в свойстве "Селектор" на панели свойств.

Sherpa Designer, панель свойств блока "Получить текст": кнопка открытия селектора.
Чтобы заполнить строки без ручного ввода каждой ячейки, необходимо скопировать следующий XML целиком и нажать на кнопку "Вставить из буфера обмена" в окне "Селектор - Редактировать селектор":
<Selector>
<Process Name="notepad" Descendant="0" />
<UIElement Name="*Блокнот" ClassName="Notepad" />
<UIElement Name="Сохранение" ClassName="#32770" />
<UIElement ClassName="DUIViewWndClassName" />
<UIElement Name="Тип файла:" ClassName="CIDLabel" />
<UIElement ClassName="AppControlHost" ParentIndent="1" />
</Selector>
Поиск выполняется по строкам селектора:
Строка
Processнаходит приложениеnotepad. Значение0в колонке "Descendant" ограничивает поиск перечисленными уровнями.
Sherpa Designer, таблица селектора: приложение notepad и значение Descendant.
Следующая строка находит окно Блокнота по классу
Notepadи имени*Блокнот. Символ*допускает любое имя документа перед названием приложения.
Sherpa Designer, таблица селектора: окно Блокнота.
Строка с именем "Сохранение" и классом
#32770находит открытое окно сохранения документа.
Sherpa Designer, таблица селектора: окно "Сохранение".
Строка с классом
DUIViewWndClassNameнаходит область содержимого окна, в которой расположены имя и тип файла.
Sherpa Designer, таблица селектора: область содержимого окна сохранения.
Строка с именем "Тип файла:" и классом
CIDLabelнаходит текст рядом со списком форматов.
Sherpa Designer, таблица селектора: текст "Тип файла:".
Последняя строка с
ParentIndent = 1поднимает поиск к общему родителю. Поиск классаAppControlHostначинается с первого подходящего элемента и находит поле "Имя файла", расположенное перед списком форматов.
Sherpa Designer, таблица селектора: поиск AppControlHost без привязки.
Колонка "Index" остается пустой. Остальные незаполненные ячейки также необходимо оставить пустыми.
Пример: нажмите на кнопку "Проверить". Зеленая отметка подтверждает, что элемент найден, но не его соответствие задаче. В данном случае найдено поле "Имя файла" вместо списка "Тип файла".

Sherpa Designer, окно "Селектор - Редактировать селектор": проверка ParentIndent = 1.
Для проверки прочитанного значения необходимо нажать на кнопку "OK", затем на кнопку "Сохранить" в группе "Файл" и нажать F5. Диаграмма "Главная" выполнится из Sherpa Designer. На панели "Лог" появится "Заявка 1042.txt" — имя документа вместо его формата.

Sherpa Designer, панель "Лог": имя файла при ParentIndent = 1.
Поиск списка "Тип файла" через bind:1#
Для чтения формата документа необходимо продолжить поиск после текста "Тип файла:", пропустив расположенное перед ним поле имени.
В редакторе селектора требуется изменить только последнюю строку: заменить 1 на bind:1 в колонке "ParentIndent". Остальные строки и пустая колонка "Index" сохраняются.
Поиск с привязкой выполняется следующим образом:
Исходный элемент — текст "Тип файла:", найденный строкой с классом
CIDLabel.
Блокнот, всплывающее окно "Сохранение": текст "Тип файла:" перед списком форматов.
Значение
bind:1поднимает поиск на один уровень к общему родителю текста и списка. Привязка сохраняет положение исходного текста и продолжает поиск после него.
Sherpa Designer, фрагмент редактора селектора: bind:1 в последней строке.
После текста находится список "Тип файла" с классом
AppControlHost. Он становится результатом поиска вместо поля "Имя файла".
Блокнот, всплывающее окно "Сохранение": найденный список "Тип файла".
Пример: нажмите на кнопку "Проверить", затем на кнопку "Подсветить" и убедитесь, что выделен список форматов. Для получения его значения нажмите на кнопку "OK", сохраните диаграмму и нажмите F5. При типе значения Text на панели "Лог" отображается "Текстовые документы (*.txt)".

Sherpa Designer, панель "Лог": тип файла при bind:1.
Без префикса bind: в тех же условиях поиск возвращает имя документа, как показано в подразделе "Поиск списка "Тип файла" без привязки".
Поиск кнопки "Сохранить" через bind:2#
Для проверки элемента, который завершает сохранение документа, необходимо найти кнопку "Сохранить". Отправной точкой служит текстовый элемент внутри списка "Кодировка". Между этим текстом и общим родителем кнопки находятся два уровня дерева.
Схема дерева окна "Сохранение": два уровня подъема от текстового элемента списка "Кодировка" к кнопке "Сохранить".
Первые три строки селектора сохраняются: приложение, окно Блокнота и окно "Сохранение". Три строки, начиная с DUIViewWndClassName, необходимо заменить строками поиска списка кодировок, вложенного текста и кнопки.
Строка ComboBox нужна, чтобы найти список кодировок непосредственно в окне сохранения. Строка Text задает вложенный исходный элемент, а последняя строка выводит поиск за пределы списка к кнопке. Если оставить прежние строки, селектор продолжит искать список "Тип файла" и не найдет кнопку сохранения.
Измененный селектор целиком:
<Selector>
<Process Name="notepad" Descendant="0" />
<UIElement Name="*Блокнот" ClassName="Notepad" />
<UIElement Name="Сохранение" ClassName="#32770" />
<UIElement Name="Кодировка:" ClassName="ComboBox" />
<UIElement ControlType="Text" />
<UIElement ClassName="Button" ParentIndent="bind:2" />
</Selector>
Для проверки необходимо вставить XML целиком через кнопку "Вставить из буфера обмена" и нажать на кнопку "Проверить". Пустые ячейки, включая колонку "Index", не заполняются. Селектор с bind:2 успешно находит кнопку.

Sherpa Designer, фрагмент редактора селектора: успешная проверка кнопки с bind:2.
Дерево найденного элемента открывается кнопкой "Открыть в Sherpa Explorer" в редакторе селектора. Для просмотра дочерних элементов требуется дважды нажать на второй узел "Кодировка:" в ветке "Сохранение". Этот узел имеет класс ComboBox. Поиск проходит следующие шаги:
Строка с классом
ComboBoxи именем "Кодировка:" находит список кодировок.
Sherpa Designer, таблица селектора: список "Кодировка".
Строка с
ControlType = Textнаходит дочерний текстовый элемент с именем "Кодировка:" в дереве списка. Именно от этого элемента начинается подъем. ЗначениеUTF-8, выбранное в списке, не является именем этого узла.
Sherpa Explorer, фрагмент дерева окна "Сохранение": дочерний текстовый элемент "Кодировка:".
Первый подъем ведет от вложенного текста к списку "Кодировка". На этом уровне кнопки "Сохранить" еще нет.

Sherpa Explorer, фрагмент дерева окна "Сохранение": список "Кодировка:" после первого подъема.
Второй подъем ведет к окну "Сохранение" — общему родителю списка и кнопки. Привязка продолжает поиск после ветви списка кодировок.

Sherpa Explorer, фрагмент дерева: окно "Сохранение" после второго подъема.
Строка с классом
Buttonнаходит расположенную после списка кнопку "Сохранить".
Блокнот, всплывающее окно "Сохранение": найденная кнопка "Сохранить".
После просмотра дерева необходимо закрыть Sherpa Explorer сочетанием Alt+F4 и вернуться к редактору селектора. При замене bind:2 на bind:1 поиск остается внутри списка "Кодировка". Проверка не находит кнопку с классом Button, поэтому одного уровня недостаточно.

Sherpa Designer, фрагмент редактора селектора: неуспешная проверка кнопки с bind:1.
Для чтения названия кнопки необходимо вернуть bind:2, нажать на кнопки "Проверить", "Подсветить" и "OK". Затем в свойствах блока "Получить текст" выбрать Name в списке "Тип значения". Значение Text, использованное для полей документа, не возвращает название этой кнопки.

Sherpa Designer, панель свойств блока "Получить текст": тип значения Name для названия кнопки.
Пример: сохраните диаграмму и нажмите F5. На панели "Лог" появится "Сохранить". Кнопка найдена, но не нажата. Документ остается в открытом окне сохранения.

Sherpa Designer, панель "Лог": название кнопки при bind:2.
Привязка не гарантирует правильный поиск при любых изменениях интерфейса. Если изменятся порядок элементов или число вложенных контейнеров, необходимо заново проверить селектор кнопками "Проверить" и "Подсветить". Число уровней выбирается по дереву интерфейса, а не по расстоянию между полями на экране.