Начну эту статью с того, что я работаю QA Automationg и того, что я люблю автоматизировать все рутинные действия. Так вот в последнее время для меня таковым стало написание, редактирование и проверка локаторов к элементам на странице.

Обычно это процесс выглядит так: я пишу xpath выражение в chrome или firepath, потом копирую его и добавляю атрибут к элементу в C# коде. Но локаторы часто нужно исправлять или просто проверить, на какой элемент он указывает. И даже такое просто изменение предиката как [@id='myId'] на [contains(@id = 'Id')] заканчивается падением теста во время выполнения потому, что я написал '=' вместо ',' и поленился проверить изменения. В общем, слишком много действий с копированием, вставкой, переключений между окнами и тому подобного для такой простой задачи. Решил я написать плагин для ReSharper, который бы по Alt+Enter подсвечивал мой элемент в браузере.

Постановка задачи


Написать плагины для ReSharper и Chrome, которые в связке решали бы две простые задачи:
  • Статический анализатор XPath выражений;
  • Подсветка любого selenium локатора в браузере по Alt+Enter.

Решение


С первой задачей все оказалось достаточно просто. Я решил не писать свой парсер и валидатор для xpath, а просто воспользовался классом XmlDocument из .NET библиотеки:

XmlDocument document = new XmlDocument();
var navigator = document.CreateNavigator();
try
{
    navigator.Compile("xpath expression");
     //Если не получили исключение, то выражение валидно
}
catch (XPathException exception)
{
    //Выражение не валидно
}

Вторая часть вопроса была реализована следующим образом:
  • ReSharper плагин поднимает TcpServer для localhost
  • Chrome плагин постоянно спрашивает его «Есть что подсветить?»
  • Список чего бы подсветить пустой до тех пор, пока пользователь не нажмет Alt+Enter и не выберет Highlight element

Для поиска элементов в dom с помощью XPath я использую библиотеку jquery.xpath.js.

Так как я никогда раньше не писал плагины для chrome, то самым сложное для меня оказалось отправка запросов с https сайта на http localhost. Google Chrome блокирует все такие запросы с веб-станицы. На поиск решения у меня ушло не мело времени, но оно оказалось очень простым и, наверное, даже логичным: запросы к http можно делать из background.js, а потом передавать результат на страничку, что я и сделал.

Работа плагина в действии




Ссылки


Пишем простейший плагин для ReSharper — статья, которая помогла начать писать для ReSharper
Find.By chrome — плагин для Google Chrome
Find.By resharper — плагин для ReSharper
Find.By — github репозиторий проекта
Поделиться с друзьями
-->

Комментарии (4)


  1. RayRom
    02.08.2016 17:04

    Вот бы такую штуку для Notepad++…


    1. MYSLYVETS
      02.08.2016 19:46

      А что вы в Notepad++ пишете?


  1. RouR
    04.08.2016 11:06

    Однажды нашел плагин для браузера, позволял ввести xpath и подсветить найденные элементы на открытой странице. Но после переустановки системы не могу его снова найти, те что находятся через поиск хрень какая-то. Может в своей практике находили нормальный?


    1. MYSLYVETS
      04.08.2016 11:15
      +1

      Для Chrome использовал стандартную консоль $x("//xpath exp"), а для Firefox — FirePath