Модификатор bind в ParentIndent#

Определение селектора и устройство его строк приведены в статье "Настройка селекторов".

Модификатор bind: помогает найти элемент после расположенного перед ним текста или контейнера. Подписью элемента называется текст рядом с ним. Например, рядом со списком форматов в окне сохранения Блокнота находится подпись "Тип файла:".

Каждая строка селектора продолжает поиск от элемента, найденного предыдущей строкой. Колонка "ParentIndent" задает подъем по дереву интерфейса к родительскому элементу. Префикс bind: указывает, что после подъема поиск продолжается за ветвью, из которой он начался.

На схеме общий родитель обозначен именем класса PreviewBackground. Исходная точка — текст "Тип файла:". Стрелка ↑ 1 ведет к общему родителю, а следующая стрелка — к расположенному после подписи списку.

Схема дерева окна "Сохранение": один уровень подъема от текста "Тип файла:" и поиск следующего списка.

Схема дерева окна "Сохранение": один уровень подъема от текста "Тип файла:" и поиск следующего списка.

Число задает количество уровней подъема:

  • 1 — подъем на один уровень без привязки. Поиск начинается с первого подходящего дочернего элемента.
  • bind:1 — подъем на один уровень с продолжением поиска после исходного элемента.
  • bind:2 — подъем на два уровня с продолжением поиска после родительской ветви исходного элемента.
  • bind:n, где n — положительное целое число, — подъем на указанное количество уровней. Для bind:3 поиск продолжается после ветви на уровне третьего предка. Число выбирается по реальному дереву интерфейса.

Пустая ячейка в колонке "ParentIndent" не задает подъем. На скриншоте выделены заголовок колонки и пустая ячейка начальной строки селектора.

Sherpa Designer, таблица селектора: пустая ячейка в колонке "ParentIndent".

Sherpa Designer, таблица селектора: пустая ячейка в колонке "ParentIndent".

Для привязки к следующей ветви используется положительное число после bind:. Значения bind:, bind:0 и bind:-1 не задают положительное количество уровней. Префикс записывается строчными латинскими буквами без пробелов перед числом.

Открытие окна "Сохранение" в Блокноте#

Для проверки селекторов необходимо подготовить окно сохранения стандартного Блокнота. Проект и документ создаются на компьютере вручную. Скачивать файлы не требуется.

Используется классический Блокнот Windows 10 с русским интерфейсом. Важно учитывать:

  • В другой версии Блокнота дерево элементов может отличаться. В таком случае требуется заново записать селектор и проверить уровни подъема.
  • При другом языке интерфейса изменятся названия элементов. Необходимо заменить их в строках селектора.
  • Для проверки требуется одно открытое окно Блокнота. При нескольких окнах селектор может выбрать другое окно.

Sherpa Designer и Блокнот запускаются с обычными правами одного Пользователя.

Для подготовки документа необходимо выполнить следующие действия:

  1. Открыть меню Windows "Пуск", ввести Блокнот и запустить найденное приложение. В новом документе ввести текст Заявка 1042. Ответственный: Анна Смирнова..

    Блокнот: текст нового документа.

    Блокнот: текст нового документа.

  2. В меню "Файл" выбрать пункт "Сохранить как...", чтобы открыть окно выбора имени и формата документа.

    Блокнот, меню "Файл": пункт "Сохранить как...".

    Блокнот, меню "Файл": пункт "Сохранить как...".

  3. В поле "Имя файла" указать Заявка 1042.txt. В списке "Тип файла" оставить "Текстовые документы (*.txt)", в списке "Кодировка" — UTF-8. Папка сохранения не участвует в селекторе.

Пример: окно "Сохранение" подготовлено для документа "Заявка 1042.txt" в формате TXT с кодировкой UTF-8. На скриншоте выбрана папка "Отчеты". Оставьте окно открытым на время проверки селекторов. На кнопку "Сохранить" нажимать не требуется: диаграмма только читает текст элементов.

Блокнот, всплывающее окно "Сохранение": имя документа и выбранный тип файла.

Блокнот, всплывающее окно "Сохранение": имя документа и выбранный тип файла.

Создание проекта в Sherpa Designer#

Для проверки поиска необходимо создать пустой проект, в котором будет собрана диаграмма чтения текста.

На вкладке "Разработка" в группе "Файл" необходимо раскрыть список под кнопкой "Создать" и выбрать пункт "Новый проект".

Sherpa Designer, вкладка "Разработка": пункт "Новый проект" в списке кнопки "Создать".

Sherpa Designer, вкладка "Разработка": пункт "Новый проект" в списке кнопки "Создать".

Пример: в окне "Создать новый проект" укажите "Селекторы Блокнота" в поле "Имя проекта". В поле "Расположение" выберите папку для учебного проекта на своем компьютере. Оставьте чекбокс "Создать каталог с названием проекта" выбранным и установите флаг "Пустого проекта". Нажмите на кнопку "Создать".

Sherpa Designer, всплывающее окно "Создать новый проект": имя и выбор пустого проекта.

Sherpa Designer, всплывающее окно "Создать новый проект": имя и выбор пустого проекта.

Откроется диаграмма "Главная" с блоком "Старт". Файл созданного проекта сохраняется в выбранной папке под именем Селекторы Блокнота.sherpa.

Настройка диаграммы чтения текста#

Для вывода найденного значения на панель "Лог" необходимо добавить блоки чтения и записи результата.

На вкладке "Блоки" в поле поиска необходимо ввести "Получить текст". Затем перетащить найденный блок из группы "Автоматизация приложений" на диаграмму под блок "Старт". Блок с таким же названием из группы "Автоматизация браузеров" для Блокнота не используется.

Sherpa Designer, вкладка "Блоки": блок "Получить текст" в группе "Автоматизация приложений".

Sherpa Designer, вкладка "Блоки": блок "Получить текст" в группе "Автоматизация приложений".

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

Sherpa Designer, диаграмма "Главная": последовательность блоков чтения и вывода результата.

Sherpa Designer, диаграмма "Главная": последовательность блоков чтения и вывода результата.

Для блока "Получить текст" используются следующие свойства:

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

Sherpa Designer, панель свойств блока "Получить текст": переменная в свойстве "Результат".

Sherpa Designer, панель свойств блока "Получить текст": переменная в свойстве "Результат".

Остальные свойства блока остаются со значениями по умолчанию. В частности, переменная $ProcessID в свойстве "ID процесса" до запуска не заполняется: приложение определяется по селектору. Описание остальных параметров доступно в справочнике блока "Получить текст".

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

Sherpa Designer, панель свойств блока "Лог": вывод переменной $Result.

Sherpa Designer, панель свойств блока "Лог": вывод переменной $Result.

Поиск списка "Тип файла" без привязки#

Для определения формата сохраняемого документа нужен список "Тип файла". Поле "Имя файла" задает название документа и не решает эту задачу. Оба элемента имеют класс AppControlHost, поэтому одного названия класса недостаточно.

Для открытия редактора необходимо выбрать блок "Получить текст" и нажать кнопку Открыть редактор селектора в свойстве "Селектор" на панели свойств.

Sherpa Designer, панель свойств блока "Получить текст": кнопка открытия селектора.

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.

    Sherpa Designer, таблица селектора: приложение notepad и значение Descendant.

  • Следующая строка находит окно Блокнота по классу Notepad и имени *Блокнот. Символ * допускает любое имя документа перед названием приложения.

    Sherpa Designer, таблица селектора: окно Блокнота.

    Sherpa Designer, таблица селектора: окно Блокнота.

  • Строка с именем "Сохранение" и классом #32770 находит открытое окно сохранения документа.

    Sherpa Designer, таблица селектора: окно "Сохранение".

    Sherpa Designer, таблица селектора: окно "Сохранение".

  • Строка с классом DUIViewWndClassName находит область содержимого окна, в которой расположены имя и тип файла.

    Sherpa Designer, таблица селектора: область содержимого окна сохранения.

    Sherpa Designer, таблица селектора: область содержимого окна сохранения.

  • Строка с именем "Тип файла:" и классом CIDLabel находит текст рядом со списком форматов.

    Sherpa Designer, таблица селектора: текст "Тип файла:".

    Sherpa Designer, таблица селектора: текст "Тип файла:".

  • Последняя строка с ParentIndent = 1 поднимает поиск к общему родителю. Поиск класса AppControlHost начинается с первого подходящего элемента и находит поле "Имя файла", расположенное перед списком форматов.

    Sherpa Designer, таблица селектора: поиск AppControlHost без привязки.

    Sherpa Designer, таблица селектора: поиск AppControlHost без привязки.

Колонка "Index" остается пустой. Остальные незаполненные ячейки также необходимо оставить пустыми.

Пример: нажмите на кнопку "Проверить". Зеленая отметка подтверждает, что элемент найден, но не его соответствие задаче. В данном случае найдено поле "Имя файла" вместо списка "Тип файла".

Sherpa Designer, окно "Селектор - Редактировать селектор": проверка ParentIndent = 1.

Sherpa Designer, окно "Селектор - Редактировать селектор": проверка ParentIndent = 1.

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

Sherpa Designer, панель "Лог": имя файла при ParentIndent = 1.

Sherpa Designer, панель "Лог": имя файла при ParentIndent = 1.

Поиск списка "Тип файла" через bind:1#

Для чтения формата документа необходимо продолжить поиск после текста "Тип файла:", пропустив расположенное перед ним поле имени.

В редакторе селектора требуется изменить только последнюю строку: заменить 1 на bind:1 в колонке "ParentIndent". Остальные строки и пустая колонка "Index" сохраняются.

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

  • Исходный элемент — текст "Тип файла:", найденный строкой с классом CIDLabel.

    Блокнот, всплывающее окно "Сохранение": текст "Тип файла:" перед списком форматов.

    Блокнот, всплывающее окно "Сохранение": текст "Тип файла:" перед списком форматов.

  • Значение bind:1 поднимает поиск на один уровень к общему родителю текста и списка. Привязка сохраняет положение исходного текста и продолжает поиск после него.

    Sherpa Designer, фрагмент редактора селектора: bind:1 в последней строке.

    Sherpa Designer, фрагмент редактора селектора: bind:1 в последней строке.

  • После текста находится список "Тип файла" с классом AppControlHost. Он становится результатом поиска вместо поля "Имя файла".

    Блокнот, всплывающее окно "Сохранение": найденный список "Тип файла".

    Блокнот, всплывающее окно "Сохранение": найденный список "Тип файла".

Пример: нажмите на кнопку "Проверить", затем на кнопку "Подсветить" и убедитесь, что выделен список форматов. Для получения его значения нажмите на кнопку "OK", сохраните диаграмму и нажмите F5. При типе значения Text на панели "Лог" отображается "Текстовые документы (*.txt)".

Sherpa Designer, панель "Лог": тип файла при bind:1.

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 Designer, фрагмент редактора селектора: успешная проверка кнопки с bind:2.

Дерево найденного элемента открывается кнопкой "Открыть в Sherpa Explorer" в редакторе селектора. Для просмотра дочерних элементов требуется дважды нажать на второй узел "Кодировка:" в ветке "Сохранение". Этот узел имеет класс ComboBox. Поиск проходит следующие шаги:

  • Строка с классом ComboBox и именем "Кодировка:" находит список кодировок.

    Sherpa Designer, таблица селектора: список "Кодировка".

    Sherpa Designer, таблица селектора: список "Кодировка".

  • Строка с ControlType = Text находит дочерний текстовый элемент с именем "Кодировка:" в дереве списка. Именно от этого элемента начинается подъем. Значение UTF-8, выбранное в списке, не является именем этого узла.

    Sherpa Explorer, фрагмент дерева окна "Сохранение": дочерний текстовый элемент "Кодировка:".

    Sherpa Explorer, фрагмент дерева окна "Сохранение": дочерний текстовый элемент "Кодировка:".

  • Первый подъем ведет от вложенного текста к списку "Кодировка". На этом уровне кнопки "Сохранить" еще нет.

    Sherpa Explorer, фрагмент дерева окна "Сохранение": список "Кодировка:" после первого подъема.

    Sherpa Explorer, фрагмент дерева окна "Сохранение": список "Кодировка:" после первого подъема.

  • Второй подъем ведет к окну "Сохранение" — общему родителю списка и кнопки. Привязка продолжает поиск после ветви списка кодировок.

    Sherpa Explorer, фрагмент дерева: окно "Сохранение" после второго подъема.

    Sherpa Explorer, фрагмент дерева: окно "Сохранение" после второго подъема.

  • Строка с классом Button находит расположенную после списка кнопку "Сохранить".

    Блокнот, всплывающее окно "Сохранение": найденная кнопка "Сохранить".

    Блокнот, всплывающее окно "Сохранение": найденная кнопка "Сохранить".

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

Sherpa Designer, фрагмент редактора селектора: неуспешная проверка кнопки с bind:1.

Sherpa Designer, фрагмент редактора селектора: неуспешная проверка кнопки с bind:1.

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

Sherpa Designer, панель свойств блока "Получить текст": тип значения Name для названия кнопки.

Sherpa Designer, панель свойств блока "Получить текст": тип значения Name для названия кнопки.

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

Sherpa Designer, панель "Лог": название кнопки при bind:2.

Sherpa Designer, панель "Лог": название кнопки при bind:2.

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