Selenium + AutoIT. Автоматизация тестирования Windows окон

  • Tutorial
Меня зовут Иван Сидоренко, я инженер по тестированию в компании Digital Design.

Передо мной стояла задача разработки авто-тестов для одного из наших проектов с помощью инструмента Selenium WebDriver на языке Java. Подробнее про это вы можете прочитать в моей прошлой статье

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



В ходе поисков выбор пал на AutoIT. Этот инструмент разработан для автоматизации задач в Microsoft Windows, что и было необходимо. В этой статье я опишу работу с AutoIT для решения поставленной задачи. Предполагается, что у вас уже развернута среда разработки с подключенным Selenium WebDriver. В качестве примера будет использоваться окно для загрузки фотографий на одном из сайтов по редактированию фото. Итак, приступим.

1. Скачиваем и устанавливаем AutoIT

2. Переходим на один из сервисов по загрузке фотографий, например, сюда. Здесь необходимо нажать кнопку «Загрузить фотографии», для получения такого Windows окна



3. Теперь переходим в папку AutoIT3 и выбираем Au3Info.exe



4. Au3Info — это инструмент, который позволяет получить информацию о необходимом окне для автоматизации. Чтобы получить информацию о конкретном элементе просто перетащите курсор из блока Finder Tool на элемент окна. Получим значения атрибутов поля ввода элемента «Имя файла»



Для использования в скрипте AutoIT нам понадобиться атрибуты Title = 'Открытие' и Class = 'Edit'

5. Перейти в папку AutoIt3\SciTE и выбрать SciTE, здесь напишем такой простой скрипт



Здесь ControlFocus — метод, который устанавливает фокус на элементе окна «Имя файла»

— Первый параметр это значение Title, нужного окна, в нашем случае оно равно 'Открытие'
— Второй параметр необязателен
— Третий параметр это объедение значений атрибута Class и Instance, т.е. получается Edit1



ControlSetText — метод, с помощью которого происходит ввод текста в input элемента «Имя файла»

  • Первый параметр — значение Title
  • Второй параметр необязателен
  • Третий параметр это объедение значений атрибута Class и Instance, т.е. получается Edit1
  • Четвертый параметр — текст, который будет введен в input, здесь прописываем путь до файла, который будем прикреплять

ControlClick — кликает по кнопке «Открыть»

  • Первый параметр — значение Title
  • Второй параметр необязателен
  • Третий параметр это объедение значений атрибута Class и Instance, т.е. получается Button1



6. Сохраняем скрипт как Autoit



7. Теперь, чтобы запустить скрипт, его нужно скомпилировать. Для компиляции скрипта есть два варианта — либо для 64 разрядной системы, либо для 86. Выберете соответствующий вашей операционной системе.



8. Получили скомпилированный файл AutoItScript.exe Проверим его работоспособность — перейдем на <www.iloveimg.com/ru/photo-editor">сервис редактированию фото и нажмем «Выбрать изображение». Теперь запустим AutoItScript.exe



9. Теперь этот скрипт можно добавить в Selenium. Например для Java, такое добавление будет выглядеть вот так:

Runtime.getRuntime().exec("С:\\auto\\AutoItScript.exe");

Это решение отличается высокой стабильностью. Также из-за того, что в конечном итоге получаем исполняемый файл это решение можно использовать с разными языками программирования. Недостатком является то, что такой скрипт нельзя использоваться в headless моде — режиме, при котором не происходит запуск браузера.

Надеюсь эта статья поможет вам в автоматизации тестирования!
Digital Design
Компания

Похожие публикации

Комментарии 7

    0
    Когда мне потребовалось работать с Windows окошками в Java, я использовал
    com.sun.jna.platform.win32.User32
    java.awt.Robot
      0
      Почему не использовали WinAppDriver или Winium раз все равно используете совместно с WebDriver'ом?

      Да и вообще можно было воспользоваться AutoItX. Существенно себе облегчили бы жизнь при дебаге в случае возникновения ошибки. Да и сопровождать ваше решение такое себе. И да, атрибуты элементов windows-окон также могут поменяться, как и атрибуты web-элементов.
        0
        На момент решения этой проблемы рассматривал AutoIT и Robot Class. Второе показалось менее стабильным из-за того, что работает с координатами элементов. Обязательно рассмотрю предлагаемые вами инструменты. Про атрибуты элементов windows окон исправил.
        –1

        А я бы сделал точно так же. С AutoIT у меня опыт работы уже есть, городить что-то ещё ради того, чтобы сделать пару кликов в браузере? Кстати, и решение получилось непривязанным к Java.

          0
          Жаль что не могу плюсануть. В кои-то веки не перепечатка с Medium, а оригинальный текст, да еще и оформлена хорошо. Спасибо.
          0
          А так как описано в статье пробовали делать: habr.com/ru/post/497922?
          Тем более, что на указаном вами сайте нет смысла городить AutoIt. Там прекрасно рабротает стандартный Selenium Way.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое