Каковы стратегии создания многоразовых библиотек скриншотов Sikuli?
Я хотел бы использовать Sikuli для автоматизации приложений GUI и веб-приложений, работающих в браузере в Mac OS X и Windows. Моя цель в настоящее время меньше для тестирования, и больше для автоматизации GUI утомительных, повторяющихся задач для команды, которая к сожалению не имеет доступа к более низкому уровню автоматизации в настоящее время.
Я думаю, что хотел бы создать одну или несколько библиотек скриншотов для графических приложений и веб-приложений, которые я могу повторно использовать для разных проектов. Я часто выполнял те же шаги автоматизации для разных приложений или для веб-приложений в разных комбинациях браузера и платформы.
Каковы некоторые хорошие стратегии для создания многоразовых библиотек скриншотов Sikuli? Некоторые мысли:
- Я должен снимать снимки экрана за пределами Sikuli, а затем разрезать/вырезать эти изображения, чтобы вытащить определенные интерфейсные элементы в Sikuli?
- Как я могу лучше отслеживать снимки экрана для эквивалентных элементов интерфейса в похожих графических приложениях?
- Как я могу лучше отслеживать снимки экрана в тех же веб-приложениях, что и в разных браузерах или платформах?
- Как я могу наилучшим образом организовать элементы, которые являются иерархическими, например меню, где вы должны сделать выбор 1, затем выбрать 2, затем выбрать 3 (но следующий выбор появится только после того, как выбран предыдущий)?
- должны ли экраны сниматься как переменные, чтобы они могли ссылаться на них более общим образом?
- Должен ли я создавать списки или словари Python, содержащие скриншоты?
- Я должен группировать снимки экрана в отдельные файлы Sikuli на основе приложения/платформы?
Я предполагаю, что я могу импортировать библиотеки, такие как модуль Python, что, безусловно, возможно из документации.
Спасибо!
Ответы
Ответ 1
Существует надстройка под названием " Robust GUI Automation Library для Sikuli.
Даже если вы не воспользуетесь библиотекой, есть некоторые действительно хорошие уроки, которые нужно изучить, глядя на их реализацию проблемы.
Несколько предложений:
Должен ли я снимать снимки экрана за пределами Сикули, а затем разрезать/вырезать эти изображения, чтобы вытащить определенные элементы интерфейса в Sikuli?
-
Более важным, чем ваши элементы, является сохранение этих элементов. Я стандартизую, как я называю графику, то есть:
Button_OK.png, а не Sikuli unpredictable_default_name.png
-
Вы можете добавлять библиотеки изображений "на лету" в свой Sikuli script. Храните различные графики браузера и платформы в разных каталогах.
myImagePath = "M:\\myImageLibrary\\"
addImagePath(myImagePath)
как лучше всего отслеживать снимки экрана для эквивалентного интерфейса элементов в похожих графических приложениях?
Соглашения об именах!
\\firefox\\Button_OK.png
\\IE8\\Button_OK.png
Вы также можете играть с "сходством" Pattern, чтобы получить тот же рисунок, что и для IE и Firefox (но без ложных срабатываний). Это может занять несколько проб и ошибок.
Должен ли я создавать списки или словари Python, содержащие скриншоты?
Это действительно хорошая практика и хорошо работает для меня в определенных обстоятельствах. Иногда, хотя имя файла лучше документирует функциональность script, чем смещение списка.
Я предполагаю, что я могу импортировать библиотеки, такие как модуль Python, что, безусловно, возможно из документации.
Да, вы можете импортировать библиотеки.
Ответ 2
Это похоже на отличную библиотеку, рекомендованную spearson.
Я добавил бы еще одно понятие в список, калибровка.
Как и в любых испытательных отраслях, калибровка ваших приборов является обязательной.
В рамках полей SQA/автоматизации предположение может привести к катастрофе.
Сценарий:
В понедельник вы определяете снимки экрана кнопки "Подача" в Chrome, которые будут использоваться при автоматизации на Сикули.
Вы быстро работаете, и во вторник ваш тестовый пакет обеспечивает точный проход/неудачу, как вы ожидаете.
В пятницу днем, непосредственно перед пивом, машина автоматически обновляется до следующего небольшого выпуска Chrome, который изменяет кнопки отмены, достаточно, чтобы их подбирали Sikuli в качестве кнопок отправки.
Взгляните на свои отчеты, прежде чем покинуть офис на выходные, и ваши отчеты выглядят нормально, как обычно, но вы не понимаете, что они дают ложные срабатывания до ужасного понедельника, когда все выходные были нарушены ( но, эй, по крайней мере у вас были хорошие выходные!).
Полностью гипотетическая ситуация, но, надеюсь, подчеркивает необходимость "тестирования ваших тестов" или калибровки ваших инструментов в среде автоматизации однократной записи и запуска.
Решение:
Чтобы смягчить проблемные ситуации, подобные описанным выше, вы можете настроить веб-страницы (ы), которые, как вы знаете, ведут определенный способ взаимодействия со скриншотами в вашей статической библиотеке. Прежде чем запускать каждый проект набора тестов/объемной автоматизации, он будет вызывать набор для калибровки и убедиться, что все работает так, как ожидалось, будь то браузер, файловый менеджер и т.д.
Ответ 3
Как разработчик Java (не уверен, что это относится ко многим пользователям sikuli): я выполнил свою собственную реализацию. Я создал одноэлементный файл FileDirectory, у которого есть методы для каталогов по умолчанию (ресурсы, шаблоны, скриншоты). И всякий раз, когда у меня были сикули, сделайте снимок экрана, я бы сохранил его в этом каталоге по умолчанию (который был создан, если он не существовал при запуске). Мое приложение будет записывать скриншот. Используя html logger, я мог бы ссылаться на каталог скриншотов. Таким образом, в моих html-журналах были ссылки, вложенные в них, на образы, которые было выполнено приложением.
Я знаю, что сначала это может показаться трудным, но в конечном итоге он предоставил именно то, что нужно использовать.
Ответ 4
Возможно, это даст вам некоторые идеи.
У меня есть файл, где у меня есть несколько определений, которые нужно искать для определенного изображения.
Иногда изображение, которое им нужно искать, отличается в разных браузерах.
Поэтому я использую что-то вроде этого:
Файл: ImageLib.sikuli
browser_Windows_Firefox = ("windowsFox.png")
browser_Mac_Firefox = ("macFox.png")
Файл: Execute.sikuli
from ImageLib import *
# Variable you can get set somewhere
operatingSystem = 'Mac'
image = ()
if (operatingSystem == 'Windows'):
image = browser_Windows_Firefox
elif (operatingSystem == 'Mac'):
image = browser_Mac_Firefox
else:
# Unknow option here....
pass
# Find and highlight it.
imageLoc = find(image)
imageLoc.highlight(5)