среда, 21 августа 2013 г.

Selenium IDE documentation on russian.

Selenium IDE


Введение

Selenium IDE (англ. "Integrated Development Environment", "Интегрированная среда разработки") - это инструмент, который используется для разработки тестовых сценариев. Приложение доступно в виде плагина для Firefox, и на данный момент является одним из самых эффективных для разработки тестовых сценариев. Плагин позволяет использовать контекстное меню при работе с элементами пользовательского интерфейса. В меню можно выбрать элемент интерфейса, а после - нужную команду из списка, который предложит Selenium. Свойства команд зависят от вида элемента пользовательского интерфейса. Это позволяет не только сэкономить время, но и дает замечательную возможность изучить синтаксис скрипта Selenium.
Данная глава посвящена Selenium IDE и его эффективному использованию.

Установка IDE

Запустите Firefox и скачайте IDE с веб-сайта SeleniumHQ.
Firefox предупредит вас о том, что вы пытаетесь установить аддон с незнакомого ресурса, поэтому, чтобы продолжить, нажмите на "Разрешить" ("Allow"), как это показано на скриншоте.
images/chapt3_img01_IDE_Installation.png
При загрузке плагина через Firefox появится следующее окно.
images/chapt3_img02_IDE_Installation.png
Выберите "Установить сейчас" ("Install Now"). Появится окно установки аддонов Firefox, сначала оно будет показывать индикатор выполнения, а после окончания скачивания появится следующее.
images/chapt3_img03_IDE_Installation.png
Перезапустите Firefox. После перезапуска найдите Selenium IDE в списке меню "Инструменты" ("Tools").
images/chapt3_img04_IDE_Installation.png

Запуск IDE

Чтобы запустить Selenium IDE, просто выберите его из меню "Инструменты" в браузере Firefox. Плагин запустится с пустым окном для редактирования скрипта. Также в появившемся меню вы сможете выбрать создание новых тестовых сценариев или загрузку уже существующих.
images/chapt3_img05_IDE_open.png

Особенности IDE

Панель меню

Закладка меню "Файл" имеет разделы "Тестовый сценарий" и "Набор тестов" (набор тестовых сценариев). Данные разделы позволяют добавить новый тестовый сценарий, открыть тестовый сценарий, сохранить тестовый сценарий, экспортировать тестовый сценарий на любом языке по вашему выбору. Также имеется возможность открыть недавно использованный тестовый сценарий. Аналогичные действия можно совершить и для раздела "Набор тестов".
Закладка меню "Редактировать" позволяет пользователю выполнять операции "Копировать", "Вставить", "Удалить", "Отменить" и "Выделить всё" для редактирования команд тестового сценария. Меню "Опции" позволяет изменить настройки плагина. В этом меню вы можете установить тайм-аут для определенных команд, добавить пользовательские расширения в основной набор команд Selenium, а также настроить формат (язык), который будет использоваться для сохранения ваших тестовых сценариев. Закладка меню "Помощь" - это стандартная справка по Firefox, только опция "Документация по расширению UI-Element" принадлежит Selenium IDE.

Панель инструментов

Панель инструментов содержит кнопки, с помощью которых можно контролировать выполнение тестовых сценариев, также есть возможность выполнять сценарий пошагово, для отладки. Крайняя правая кнопка, на которой изображена красная точка - это кнопка записи.
images/chapt3_img06_IDE_features.png
Контроль скорости
"Контроль скорости": позволяет контролировать скорость выполнения теста.
Запустить все
"Запустить все": Запускает весь набор тестов, когда загружен набор тестов с несколькими тестовыми сценариями.
Запустить
"Запустить": Запускает выбранный тест. Если загружен только один тест, кнопки "Запустить" и "Запустить все" работают идентично.
Пауза Возобновить
"Пауза"/"Возобновить": Позволяют поставить на паузу и возобновить текущий тестовый сценарий.
Шаг
"Шаг": Позволяет "прошагивать" тест, то есть выполнять по одной команде за раз. Используйте "Шаг" для отладки тестовых сценариев.
Режим "TestRunner"
Режим "TestRunner": Эта команда позволяет запустить тестовый сценарий в браузере, загрузив его из Selenium Core TestRunner. TestRunner практически не используется из-за своей малополезности. Данная кнопка нужна для оценки тестовых сценариев на обратную совместимость с TestRunner. Большинству пользователей, скорее всего, она не понадобится.
Сгруппировать
"Сгруппировать": Эта более сложная команда позволяет сгруппировать повторяющиеся последовательности команд Selenium в одно действие. Более подробную информацию о правилах группирования можно найти в "Документации по расширению UI-Element" в разделе "Помощь".
Запись
"Запись": Записывает действия пользователя в браузере.

Панель "Тестовый сценарий"

Ваш скрипт отображается в панели "Тестовый сценарий". На ней расположены две вкладки, первая из которых отображает команды и их параметры в виде удобной для восприятия таблицы.
images/chapt3_img16_Table_Format.png
Вторая вкладка "Исходный код" отображает тестовый сценарий в "родном" формате, который используется для хранения сценария. По умолчанию это формат HTML, однако пользователь может изменить его на Java или C#, или же на язык подготовки сценариев, такой как Python. Более подробную информацию вы найдете в разделе "Опции". Вкладка "Исходный код" позволяет пользователю редактировать тестовый сценарий через исходный код, в том числе используя такие операции, как "Копировать", "Вырезать" и "Вставить".
Поля ввода данных "Команда", "Цель" и "Значение" отображают текущую команду, а также ее параметры. С помощью этих полей пользователь может модифицировать команды. Первый параметр, отображаемый во вкладке "Свойства" в нижней панели, всегда идет в поле "Цель". Если второй параметр определен во вкладке "Справка", он всегда идет в поле "Значение".
images/chapt3_img17_Entry_Fields.png
Когда пользователь начинает печатать в поле "Команда", появляется выпадающее меню, в котором показаны подсказки команд на основе тех символов, которые пользователь уже ввел. Таким образом, пользователь может выбрать из выпадающего списка нужную команду.

Лог/Справка/Элемент пользовательского интерфейса/Группирование

Нижняя панель используется для 4 различных функций: лога, справки, элемента пользовательского интерфейса и группирования - в зависимости от того, какая вкладка выбрана.

Лог

Когда пользователь запускает тестовый сценарий, в панели данной вкладки автоматически появляются информационные сообщения и уведомления об ошибках, даже если пользователь не выбрал вкладку "Лог" до этого. Данные сообщения часто полезны при отладке тестового сценария. Обратите внимание на кнопку "Очистить", которая позволяет очистить панель "Лог". Также обратите внимание на то, что кнопка "Информация" работает как выпадающее меню, в котором пользователь может выбрать различные уровни информации в логе.
images/chapt3_img18_Bottom_Box.png

Справка

Вкладка "Справка" выбирается по умолчанию каждый раз, когда пользователь вводит или модифицирует команды и параметры в режиме "Таблица". В данном режиме панель "Справка" отображает информацию о текущей команде. Когда пользователь вводит или модифицирует команды - в табличном режиме или при работе с исходным кодом - крайне важно удостовериться, что параметры, отображаемые в полях "Цель" и "Значение", соответствуют тем, которые определены в списке параметров на панели "Справка". Численные значения, порядок и типы определяемых параметров должны соответствовать численным значениям, порядку и типам параметров, которые являются допустимыми для данных команд. При расхождении между этими тремя полями команда не сможет быть корректно выполнена.
images/chapt3_img19_Bottom_Box_Ref.png
Хотя вкладка "Справка" является быстрым способом получения информации о команде, зачастую пользователю бывает необходимо обратиться к справочной документации Selenium.

Элемент пользовательского интерфейса и группирование

Подробную информацию об этих двух вкладках (которые позволяют работать с более сложными функциями Selenium IDE) можно найти в "Документация по расширению UI-Element" в разделе "Помощь".

Создание тестовых сценариев

Существует 3 основных способа разработки тестовых сценариев. Зачастую вам придется использовать все три.

Запись

Большинство неопытных пользователей начинают создание тестовых сценариев с записи своего взаимодействия с веб-сайтом. При первом запуске Selenium IDE запись по умолчанию включена. Если пользователь не хочет, чтобы Selenium IDE начинал запись автоматически, он может изменить настройки записи. Для этого нужно выбрать "Опции" > "Опции..." и снять галочку с "Начать запись после старта программы".
Во время записи Selenium IDE автоматически вставляет команды в тестовый сценарий, основываясь на действиях пользователя. Обычно это команды:
  • клик по ссылке - команды click или clickAndWait
  • ввод данных - команда type
  • выбор опции из выпадающего списка - команда select
  • клик по чекбоксу или кнопке радио - команда click
Вот некоторые типичные ошибки, которых необходимо избегать:
  • Для выполнения команды type может потребоваться кликнуть на какую-то определенную область веб-сайта, чтобы команда записалась.
  • Клик по ссылке зачастую записывает команду click. Пользователю в большинстве случаев будет необходимо изменить ее на командуclickAndWait, чтобы удостовериться, что тестовый сценарий приостановится, пока не загрузится новая страница. В противном случае Selenium продолжит выполнять команды до того, как загрузятся все элементы пользовательского интерфейса. Это приведет к остановке тестового сценария.

Добавление проверок через контекстное меню

В тестовых сценариях бывает необходимо выполнить проверку параметров веб-страницы. Существуют две команды для данного действия,assert и verify. Эти команды будут более подробно описаны в разделе Язык команд Selenium. Здесь мы только рассмотрим способ их добавления в тестовый сценарий пользователя.
После перевода Selenium IDE в режим записи пользователь должен переключиться на браузер с тестируемым веб-приложением и кликнуть правой кнопкой мыши в любом месте на странице. Появится контекстное меню с командами verify и/или assert.
Когда пользователь запускает Selenium в первый раз, вероятно, только одна команда Selenium будет представлена в списке. Однако, в процессе работы с IDE новые команды добавятся в этот список довольно быстро. Selenium IDE попытается предугадать нужную команду, а также ее параметры, основываясь на выбранном пользователем элементе интерфейса.
Давайте посмотрим, как это работает. Откройте веб-страницу и выберите блок текста. Для данной цели прекрасно подойдут заголовок или абзац. Кликните правой клавишей мыши на выбранном тексте. В контекстном меню должны появиться команды verifyTextPresent, рекомендованным Selenium параметром будет сам текст.
Также обратите внимание на опцию "Показать все доступные команды". Нажав на нее, пользователь может увидеть множество команд, наряду с рекомендованными параметрами для тестирования выбранного на данным момент элемента пользовательского интерфейса.
Поэкспериментируйте с другими элементами интерфейса. Попробуйте кликнуть правой клавишей мыши на изображении или элементе управления - к примеру, на кнопке или чекбоксе. Вам может понадобиться выбрать "Показать все доступные команды", чтобы увидеть прочие команды, кроме verifyTextPresent. Регулярно выбирая команды из списка, пользователь увидит, что наиболее часто используемые из них появятся в первичном контекстном меню. Например, при выборе verifyElementPresent для изображения в следующий раз, когда пользователь кликнет правой клавишей мыши на изображении, эта команда будет предложена ему в первичном контекстном меню.
Еще раз напоминаем, что эти команды будут более подробно рассмотрены в главе о командах Selenium. Пока пробуйте работать с IDE в режиме записи команд в тестовый сценарий и запуска теста. Можно освоить множество команд Selenium, просто экспериментируя с IDE.

Редактирование

Вставка команды

ВИД "ТАБЛИЦА"
Выберите место в тестовом сценарии, куда вы хотите вставить команду. Чтобы сделать это, в панели "Тестовый сценарий" кликните левой клавишей мыши на нужную строку, куда вы хотите вставить новую команду. Кликните правой клавишей мыши и выберите "Вставить команду"; IDE добавит пустую строчку в том месте. Теперь в поля ввода введите свою команду и задайте ее параметры.
ВИД "ИСХОДНЫЙ КОД"
Выберите место в тестовом сценарии, куда вы хотите вставить команду. Чтобы сделать это, в панели "Тестовый сценарий" кликните левой клавишей мыши на нужную строчку, куда вы хотите вставить новую команду. Вставьте необходимые тэги HTML, чтобы создать запись из трех столбцов со значениями "Команда", первым параметром (если он необходим), а также вторым параметром (опять же, если он необходим). Убедитесь, что вы сохранили код, прежде чем переключиться на вид "Таблица".

Вставить комментарий

Чтобы сделать тестовый сценарий более понятным, в Selenium есть возможность вставки комментариев. Эти комментарии игнорируются во время работы теста.
Комментарии можно также использовать для добавления пустых строк (одной или нескольких). Пустая команда выдаст ошибку в тесте, а пустой комментарий нет.
ВИД "ТАБЛИЦА"
Выберите строку в тестовом сценарии, куда вы хотите вставить комментарий. Кликните правой клавишей мыши и выберите "Вставить комментарий". Теперь в поле "Команда" введите нужный комментарий. Он будет выделен фиолетовым цветом.
ВИД "ИСХОДНЫЙ КОД"
Выберите место в тестовом сценарии, куда вы хотите вставить комментарий. Комментарий добавляется с использованием тэгов HTML, например: <!-- это текст вашего комментария -->.

Редактирование команды или комментария

ВИД "ТАБЛИЦА"
Просто выберите строку, которую нужно изменить и редактируйте ее в полях "Команда", "Цель" и "Значение".
ВИД "ИСХОДНЫЙ КОД"
Так как во вкладке "Исходный код" работа с текстом происходит в режиме полного соответствия, то просто изменяйте любые строки по своему желанию: команды, параметры или комментарии.

Как открыть и сохранить тестовый сценарий

Как и большинство других приложений Selenium IDE использует команды "Открыть" и "Сохранить" в меню "Файл". Однако стоит отметить, что Selenium разделяет тестовые сценарии и наборы тестов. Чтобы сохранить тесты в Selenium IDE, пользователь может либо сохранить отдельные тестовые сценарии, либо набор тестов. В случае, если тестовые сценарии в наборе тестов не были сохранены, программа предложит пользователю сохранить их до того, как будет сохранен весь набор тестов.
При открытии сохраненного ранее тестового сценария или набора тестов Selenium IDE отображает команды Selenium в панели "Тестовый сценарий".

Запуск тестовых сценариев

В IDE существует большое количество настроек для запуска тестового сценария. Пользователь может запускать тестовый сценарий, останавливать и возобновлять его, запускать в пошаговом режиме, запускать только одну команду, над которой сейчас идет работа, а также запускать весь набор тестов. IDE позволяет очень гибко работать с тестовыми сценариями.
Запустить тестовый сценарий
Нажмите на кнопку "Запустить", чтобы запустить выбранный тестовый сценарий.
Запустить набор тестов
Нажмите на кнопку "Запустить все", чтобы запустить все тестовые сценарии в загруженном наборе тестов.
Поставить на паузу и возобновить
Кнопка "Пауза" используется для того, чтобы остановить тестовый сценарий, когда он запущен.После этого кнопка меняется на "Возобновить". Чтобы продолжить тестирование, нажмите кнопку "Возобновить".
Остановить на середине
Пользователь может создать прерывание в тесте, чтобы остановить его выполение на конкретной команде. Это полезно при отладке тестового сценария. Чтобы создать точку прерывания, нужно выбрать команду, кликнуть на ней правой клавишей мыши и из появившегося контекстного меню выбрать "Установить точку прерывания".
Начать с середины
Пользователь может приказать IDE начать тест с определенной команды в середине тестового сценария. Данная функция также используется при отладке. Чтобы установить точку старта, пользователь должен выбрать команду, нажать на правую клавишу мыши и выбрать из контекстного меню "Установить/убрать точку старта".
Выполнить одну любую команду
Дважды кликните на любую команду, чтобы выполнить только ее. Это полезно, когда пользователь записывает команду. Данная функция позволяет сразу же протестировать ту команду, которую вы создаете, когда неясно, правильно ли она введена. Дважды кликните на команде, чтобы протестировать, как она работает. Эта функция также доступна из контекстного меню.

Использование базового URL для запуска тестовых сценариев в различных доменах

Поле Базовый URL вверху окна Selenium IDE очень полезно для запуска тестов в различных доменах. К примеру, представим, что сайт http://news.portal.com имеет тестовый веб-сайт http://beta.news.portal.com. Для всех тестовых сценариев для этих сайтов, которые начинаются с команды open, должен быть определен относительный URL в параметре open, в отличие от абсолютного URL (который начинается с протоколов "http:" или "https:"). Selenium IDE создаст абсолютный URL, добавив к базовому URL значение из команды open. Например, тестовый сценарий, приведенный ниже, будет тестировать http://news.portal.com/about.html:
images/chapt3_img21_BaseURL_prod.png
Этот же тестовый сценарий с модифицированными параметрами базового URL будет тестировать http://beta.news.portal.com/about.html:
images/chapt3_img22_BaseURL_beta.png

Язык команд Selenium

Команды Selenium - это набор команд, которые запускают пользовательские тесты. Последовательность таких команд называетсятестовый сценарий. В данном разделе эти команды будут рассмотрены более детально. Мы также покажем множество вариантов создания тестовых сценариев при работе с Selenium.
В Selenium существует широкий выбор команд для максимально полного тестирования веб-приложений. Команды Selenium часто называют "языком команд Selenium". Данные команды, собственно, и являются "языком" Selenium.
Используя язык команд Selenium, пользователь может: проверить наличие элементов интерфейса пользователя, основываясь на их HTML тэгах, протестировать определенный контент, проверить работу гиперссылок, полей ввода, списка меню, форм заявки, табличных данных и др. Команды Selenium, в том числе, поддерживают тестирование размеров окна, позиции курсора мыши, параметров диалоговых окон, функционала Ajax, всплывающих окон, управления событиями и других особенностей веб-приложений. В Справке по командам Seleniumперечислены все доступные команды.
Команда сообщает Selenium, что нужно сделать. Команды Selenium бывают трех видов: ДействияСчитыватели и Проверки.
  • Действия - это команды, которые обычно задают статус приложения. К примеру, "кликните на эту ссылку" и "выберите данную опцию". Если действие не завершается успешно, либо выдается ошибка, то текущий тест останавливается.
К большей части действий можно добавить "AndWait" ("и подождать"), к примеру, "clickAndWait". Данная приписка сообщает Selenium, что это действие принудит браузер совершить запрос к серверу и что Selenium должен ожидать загрузку новой страницы.
  • Считыватели анализируют статус приложения и сохраняют результаты переменных, к примеру, команда "storeTitle". Считыватели также используются для автоматической генерации Проверок.
  • Проверки похожи на Считыватели, однако они проверяют соответсвие статуса приложения ожидаемому значению. Например, задачи могут быть "удостовериться, что заголовок страницы Х" или "проверить, что данный чекбокс отмечен".
    Все Проверки Selenium можно использовать в 3 режимах: "assert", "verify" и "waitFor". К примеру, пользователь может задать команды "assertText", "verifyText" или "waitForText". Если "assert" не проходит, тест останавливается. Если не проходит "verify", тестовый сценарий продолжит выполняться с записью в лог об ошибке. К примеру, за одной командой "assert", проверяющей, что приложение находится на нужной странице, могут идти многочисленные "verify", тестирующие данные в полях ввода, ссылки и т.д.
    Команды "waitFor" сообщают Selenium о том, что необходимо подождать, пока определенное условие не будет выполнено (это полезно при тестировании приложений на Ajax). Проверка будет автоматически пройдена, как только выполниться условие. Тем не менее, пока условие не выполниться, тест будет остановлен и, если условие так и не выполнилось, оно по тайм-ауту будет считаться проваленным (см. для настроек тайм-аута описание команды "setTimeout").

Синтаксис языка команд Selenium

Команды Selenium просты, они состоят собственно из команды и двух параметров. Например:
verifyText//div//a[2]Войти
Параметры не всегда необходимы, это зависит от самой команды. В некоторых случаях оба параметра необходимо вводить, в других случаях ввести нужно только один параметр, а в третьих использовать команду можно без параметров. Вот несколько примеров:
goBackAndWait
verifyTextPresentДобро пожаловать на мою страницу
typeid=phone(555) 666-7066
typeid=address1${myVariableAddress}
Справка по командам описывает требования к параметрам для каждой команды.
Параметры бывают разные. Тем не менее, они обычно делятся на:
  • локаторы для идентификации элементов пользовательского интерфейса на странице.
  • шаблоны текста для проверки с помощью команд "verify" или "assert" ожидаемого содержимого на странице.
  • шаблоны текста или переменные языка команд Selenium для ввода текста в поле ввода или для выбора опции из списка доступных опций.
Локаторы, шаблоны текста, переменные и сами команды описываются более подробно в разделе "Команды Selenium".
Тестовые сценарии Selenium хранятся в формате HTML. Таблица HTML состоит из трех столбцов. Первый столбец определяет команду Selenium, второй - ее цель, третий столбец содержит значение переменной. В зависимости от команды второй и третий столбцы могут быть необязательными для заполнения, однако они должны присутствовать в таблице. Каждая строка обозначает новую команду Selenium. Вот пример тестового сценария, который открывает страницу, проверяет ее заголовок (с помощь команды "assert") и потом проверяет некоторые элементы содержимого страницы (с помощь команды "verify"):
<table>
    <tr><td>open</td><td>/download/</td><td></td></tr>
    <tr><td>assertTitle</td><td></td><td>Downloads</td></tr>
    <tr><td>verifyText</td><td>//h2</td><td>Downloads</td></tr>
</table>
Отрендеренный браузером в виде таблицы, код будет выглядеть так:
open/download/
assertTitleDownloads
verifyText//h2Downloads
Основанный на HTML синтаксис языка команд Selenium может использоваться для написания и запуска тестовых сценариев без знания какого-либо языка программирования. Базовые знания в языке команд Selenium и программы Selenium IDE позволят пользователю в короткие сроки начать писать и запускать тестовые сценарии.

Наборы тестов

Набор тестов - это комплект нескольких тестовых сценариев. Пользователь может запустить все доступные тестовые сценарии как набор тестов, для комплексного тестирования приложения.
При использовании Selenium IDE наборы тестов также могут быть определены, используя обычный файл HTML. Синтаксис здесь довольно прост. В таблице HTML определен список тестовых сценариев, где в строках хранятся пути к файлам каждого тестового сценария. Например:
<html>
<head>
<title>Test Suite Function Tests - Priority 1</title>
</head>
<body>
<table>
  <tr><td><b>Suite Of Tests</b></td></tr>
  <tr><td><a href="./Login.html">Login</a></td></tr>
  <tr><td><a href="./SearchValues.html">Test Searching for Values</a></td></tr>
  <tr><td><a href="./SaveValues.html">Test Save</a></td></tr>
</table>
</body>
</html>
С помощью подобного файла пользователь может запустить в Selenium IDE все тестовые сценарии одновременно, в порядке очереди.
Пользователь также может использовать наборы тестов при работе с Selenium RC с помощью средств программирования. Есть несколько возможных вариантов. Зачастую для поддержки тестового сценария на Java в Selenium RC используется Junit. Для тестовых сценариев на C# можно использовать Nunit. При использовании интерпретируемого языка, к примеру, Python, в Selenium RC потребуются базовые навыки программирования для создания набора тестов. Так как основной задачей при использовании Selenium RC является возможность применения программной логики при создании тестовых сценариев, то это обычно не проблема.

Часто используемые команды Selenium

В качестве заключения для нашего введения в Selenium давайте рассмотрим несколько типичных команд. Они наиболее часто используются при создании тестовых сценариев.
"open"
открывает страницу, используя URL.
"click/clickAndWait"
совершает клик, и, в зависимости от выбора пользователя, ожидает, пока загрузится новая страница.
"verifyTitle/assertTitle"
проверяет наличие ожидаемого заголовка страницы.
"verifyTextPresent"
проверяет наличие ожидаемого текста где-либо на странице.
"verifyElementPresent"
проверяет наличие ожидаемого элемента интерфейса пользователя на странице, в соответствии с его тэгом HTML.
"verifyText"
проверяет наличие на странице ожидаемого текста по соответствующему ему тэгу HTML.
"verifyTable"
проверяет наличие ожидаемого содержимого в таблице.
"waitForPageToLoad"
временно прекращает выполнение теста, пока не загрузится ожидаемая новая страница. Автоматически записывается в тестовый сценарий, когда используется команда "clickAndWait".
"waitForElementPresent"
временно прекращает выполнение, пока на странице не появится ожидаемый элемент интерфейса пользователя, определяемый через его тэг HTML.

Проверка элементов страницы

Проверка наличия элементов интерфейса пользователя на веб-странице - это наиболее частый вид проверки в тестовых сценариях. Язык команд Selenium позволяет выполнять проверку элементов интерфейса различными способами. Важно, чтобы вы овладели этими методами проверки, так как они необходимы для задания элементов тестирования.
Что именно вы будете тестировать? К примеру:
  1. элемент должен находится где-то на странице;
  2. определенный текст должен находиться где-то на странице;
  3. определенный текст должен находиться в определенном месте на странице.
Например, если вы тестируете заголовок текста, вероятно, вам важно, чтобы текст находился вверху страницы. Однако если вы, к примеру, тестируете наличие изображения на главной странице, и веб-дизайнеры часто меняют как само изображение, так и его положение, тогда следует просто выполнять проверку на наличие какого-либо изображения (а не конкретного файла) в любом месте на странице.

Выбор между командами "assert" и "verify"

Выбор между "assert" и "verify" - это выбор между удобством и способом организации неудачных проверок. Нет никакого смысла проверять правильность первого абзаца на странице, когда ваш тест уже провалился при проверке, что браузер отображает нужную страницу. Если вы не на нужной странице, вы, вероятнее всего, остановите тест, чтобы разобраться в ситуации и как можно быстрее исправить проблему. С другой стороны, вам может понадобиться проверить различные параметры страницы, несмотря на то, что первая проверка в тестовом сценарии провалилась. Это поможет вам изучить все завершенные неуспешно проверки на странице и дейстовать соответствующе. Таким образом, "assert" при провале проверки остановит выполение тестового сценария, в то время как при "verify" тестовый сценарий продолжит выполняться в любом случае.
Лучше всего использовать эту особенность при логически сгруппированных тестовых командах, поставив в начало каждой группе одну команду "assert", за которой следуют одна или больше команды "verify". К примеру:
КомандаЦельЗначение
open/download/
assertTitleDownloads
verifyText//h2Downloads
assertTable1.2.1Selenium IDE
verifyTable1.2.2June 3, 2008
verifyTable1.2.31.0 beta 2
Представленный выше тестовый сценарий вначале открывает страницу, а после выполняет проверку, что загрузилась нужная страница, путем сравнения заголовка страницы (с помощью команды "assert") с ожидаемым для него значением. Только при успешно выполненной проверке выполняется следующая по списку команда, которая тестирует (с помощью команды "verify") наличие текста в определенном месте на странице. Далее тестовый сценарий проверяет (с помощью команды "assert"), что первая колонка во второй строчке первой таблицы содержит ожидаемое значение, и только после удачно выполненной проверки этого элемента будут выполняться остальные проверки с "verify".

"verifyTextPresent"

Команда verifyTextPresent используется, чтобы проверить наличие определенного текста в любом месте на странице. Это делается с помощью одной команды - проверки шаблона текста. К примеру:
КомандаЦельЗначение
verifyTextPresentМаркетинговое исследование
Эта команда сообщает Selenium, что необходимо найти текст "Маркетинговое исследование" и проверить, что он появляется где-либо на странице, которая сейчас тестируется. Используйте verifyTextPresent, когда вам нужно только убедиться, что сам текст находится где-либо на странице. Данная команда не подходит, если необходимо удостовериться, что текст находится в определенном месте на странице.

"verifyElementPresent"

Данная команда используется, когда необходимо проверить наличие определенного элемента интерфейса, а не его содержимого. Команда проверяет не сам текст, а только его тэг HTML. Она часто используется для проверки наличия изображения.
КомандаЦельЗначение
verifyElementPresent//div/p/img
Команда выполняет проверку, что изображение, заданное HTML тэгом <img>, находится на странице, а также, что у него есть тэги <div> и <p>. Первый (и единственный) параметр - это локатор, который используется Selenium для нахождения элемента. Функции локаторов описаны в следующем разделе.
Команду verifyElementPresent можно использовать для проверки наличия любого тэга HTML на странице. Пользователь может проверить наличие ссылок, параграфов, разделов <div> и пр. Вот еще несколько примеров:
КомандаЦельЗначение
verifyElementPresent//div/p
verifyElementPresent//div/a
verifyElementPresentid=Login
verifyElementPresentlink=Go to Маркетинговое исследование
verifyElementPresent//a[2]
verifyElementPresent//head/title
На данных примерах показано использование различных методов тестирования элементов интерфейса пользователя. Повторим, что локаторам посвящен следующий раздел.

"verifyText"

Используйте команду verifyText, когда нужно проверить как текст, так и соответствующий ему элемент интерфейса пользователя. Для команды verifyText обязательно должен использоваться локатор. Если вы работаете с локаторами XPath или DOM, то вы можете выполнять проверку, что определенный текст находится в определенном месте на странице относительно других элементов интерфейса, расположенных на этой странице.
КомандаЦельЗначение
verifyText//table/tr/td/div/pЭто мой текст, и он находится сразу после div внутри таблицы.

Нахождение элементов

Для многих команд Selenium необходимо задавать цель, которая определяет элемент в содержимом веб-приложения и состоит из типа локатора, за которым следует позиция в формате locatorType=location. Тип локатора в большинстве случаев можно не определять. Различные типы локаторов перечислены ниже, с примерами их использования.

Нахождение по идентификатору

Это самый распространенный метод нахождения элементов. Он также используется по умолчанию, когда невозможно определить тип локатора. Этот метод находит первый элемент в коде, который подходит по идентификатору. Если ни один элемент не имеет такой идентификатор, то будет использован первый элемент с совпадающим параметром "name". Например, в исходном коде страницы будут следующие значения идентификатора и атрибута "name":
Следующий метод нахождения будет выдавать элементы из сниппета HTML, которые перечислены построчно:
  • identifier=loginForm (3)
  • identifier=password (5)
  • identifier=continue (6)
  • continue (6)
Так как тип локатора identifier является типом по умолчанию, то identifier= в первых трех примерах писать не обязательно.

Нахождение по "id"

Данный тип локатора является более ограниченным, чем предыдущий, однако он более явный. Используйте его, когда вам известен id-атрибут элемента.
  • id=loginForm (3)

Нахождение по "name"

Тип локатора "name" ищет первый элемент с соответствующим запросу атрибутом "name". Если у нескольких элементов одинаковое значение атрибута "name", то тогда можно использовать фильтры, чтобы отсеять ненужные результаты. Тип фильтра по умолчанию - это значение (оно соответствует атрибуту "value").
  • name=username (4)
  • name=continue value=Clear (7)
  • name=continue Clear (7)
  • name=continue type=button (7)

Нахождение с помощью XPath

XPath - это язык, который используется для нахождения нодов в XML документах. Так как HTML может быть реализацией XML (XHTML), пользователи Selenium могут использовать этот богатый язык при работе с элементами в своих веб-приложениях. XPath выходит за рамки (в том числе и в плане поддержки) простых методов нахождения по атрибутам "id" и "name" и предоставляет огромные возможности для тестирования, такие как нахождение третьего чекбокса на странице.
Одна из главных причин использования XPath - это отсутствие необходимого атрибута "id" или "name" для элемента, который нужно проверить. XPath можно использовать для нахождения элемента в абсолютных термах (не рекомендуется) или в относительных по отношению к элементу, у которого есть атрибуты "id" или "name". Локаторы XPath также можно использовать, чтобы определять элементы с помощью отличных от "id" и "name" атрибутов.
В абсолютных термах XPath содержатся все элементы из корня (html, поэтому при малейшем изменении в приложении абсолютные термы перестают функционировать. Используя ближайший элемент с атрибутом "id" или "name" (лучше всего, если это родительский элемент), вы можете определить нужный вам элемент на основе их взаимоотношений. Это свойство двух элементов навряд ли поменяется, так что с ним ваши тесты станут более устойчивы к изменениям на странице.
Так как только локаторы xpath начинаются с "//", то необязательно дописывать xpath= для определения типа локатора.
  • xpath=/html/body/form[1] (3) - Абсолютный путь (перестанет работать, если в HTML будут внесены хотя бы самые незначительные изменения)
  • //form[1] (3) - Первый элемент формы в HTML
  • xpath=//form[@id='loginForm'] (3) - Элемент формы с атрибутом "id" и значением "loginForm"
  • xpath=//form[input/\@name='username'] (4) - Первый элемент формы с входным дочерним элементом с атрибутом "name" и значением "username"
  • //input[@name='username'] (4) - Первый входной элемент с атрибутом "name" и значением "username"
  • //form[@id='loginForm']/input[1] (4) - Первый входной дочерний элемент элементов формы с атрибутом "id" и значением "loginForm"
  • //input[@name='continue'][@type='button'] (7) - Ввод с атрибутом "name" и значением "continue", а также с атрибутом "type" и значением "button"
  • //form[@id='loginForm']/input[4] (7) - Четвертый входной дочерний элемент элементов формы с атрибутом "id" и значением "loginForm"
В этих примерах показаны базовые концепции работы с XPath, однако, чтобы более подробно изучить данный язык, мы рекомендуем вам следующие материалы:
Существуют также некоторые очень полезные аддоны для Firefox, которые могут помочь вам в нахождении XPath элемента:
  • XPath Checker - помощь в работе с XPath, есть возможность тестирования результатов XPath.
  • Firebug - помощь в работе с XPath - это только одна из многих полезных функций этого аддона.

Нахождение гиперссылок с помощью якорного текста

Используя якорный текст, находить гиперссылки на веб-странице довольно легко. Если на странице присутствуют две ссылки с одинаковым текстом, то программа выберет ту, которую найдет первой.
  • link=Continue (4)
  • link=Cancel (5)

Нахождение с помощью DOM

Модель стандарта DOM (англ. "Document Object Model") представляет собой программный интерфейс приложения для документов HTML, взаимодействие с которым осуществляется через JavaScript. Этот метод нахождения элеметов использует JavaScript, который анализирует элемент, расположенный на странице, или просто его положение, если используется иерархическая точечная запись.
Так как только локаторы dom начинаются со слова "document", необязательно писать dom= при их определении.
  • dom=document.getElementById('loginForm') (3)
  • dom=document.forms['loginForm'] (3)
  • dom=document.forms[0] (3)
  • document.forms[0].username (4)
  • document.forms[0].elements['username'] (4)
  • document.forms[0].elements[0] (4)
  • document.forms[0].elements[3] (7)
Для изучения веб-приложений с помощью модели стандарта DOM можно использовать как сам Selenium, так и иные веб-сайты и расширения. Хорошую справку по DOM можно найти на W3Schools.

Нахождение с помощью CSS

CSS (англ. "Cascading Style Sheets") - это язык, который используется для описания рендеринга документов в форматах HTML и XML. CSS работает с селекторами, чтобы связать свойства стиля с элементами в документе. Эти селекторы также можно использовать в Selenium для нахождения элементов.
  • css=form#loginForm (3)
  • css=input[name="username"] (4)
  • css=input.required[type="text"] (4)
  • css=input.passfield (5)
  • css=#loginForm input[type="button"] (4)
  • css=#loginForm input:nth-child(2) (5)
Чтобы получить более подробную информацию о селекторах CSS, обратитесь к материалам W3C о селекторах. Там же находится список дополнительной литературы по этому вопросу.
Note
Most experienced Selenium users recommend CSS as their locating strategy of choice as it's considerably faster than XPath and can find the most complicated objects in an intrinsic HTML document. (Опытные пользователи Selenium рекомендуют преимущественно нахождение элементов с помощью CSS, так как это значительно быстрее, чем с помощью XPath. Данный метод позволяет находить самые сложные объекты в документе HTML).

Явные локаторы

Не обязательно определять тип локатора в следующих ситуациях:

Совпадающие шаблоны текста

Как и локаторы, шаблоны также часто используются в командах Selenium. Команды, для которых необходимо указывать шаблоны:verifyTextPresentverifyTitleverifyAlertassertConfirmationverifyText, и verifyPrompt. Уже упоминалось, что локаторы ссылок могут использовать шаблон. Шаблоны дают пользователю возможность описывать ожидаемый текст с помощью специальных символов вместо того, чтобы вводить точный текст.
Существуют 3 типа шаблонов: универсализированный (globbing) шаблон, шаблон регулярные выражения (regular expressions), и точный(exact) шаблон.

Универсализированные шаблоны

Многие знакомы с универсализацией файловых имен, так как она применялась в расширениях имен файлов в DOS и Unix/Linux, к примеру, команда ls *.c. В данном примере универсализация используется для показа всех файлов, которые заканчиваются на .c в данном каталоге. Применение универсализации довольно ограниченно. Только 2 специальных символа поддерживаются в Selenium:
*, символ расшифровывается как "соответствие с чем угодно", к примеру, ни с чем, с 1 символом, с множеством символов.
[ ] (класс символов), что расшифровывается как "соответствие с любым одним символом, находящимся внутри квадратных скобок". Дефис можно использовать в качестве условного обозначения для ряда символов (смежные друг с другом в наборе символов ASCII). Вот несколько примеров, которые помогут прояснить функциональность класса символов:
[aeiou] соответствие с любой гласной в нижнем регистре
[0-9] соответствие с любой цифрой
[a-zA-Z0-9] соответствие с любым алфавитно-цифровым символом
Универсализация обычно также затрагивает третий специальный символ, ?, однако в Selenium поддерживаются только первые два класса.
Универсализированный шаблон на языке команд Selenium задается параметром glob:, выставленным перед шаблоном. Однако так как универсализованные шаблоны являются шаблонами по умолчанию, то необязательно задавать метку, вместо этого достаточно только определить сам шаблон.
Ниже приведен пример двух команд, использующих универсализированные шаблоны. При тестировании текста гиперссылки "Film/Television Department" использовался не точный текст ссылки, а шаблон. В данном случае команда click исполнится, даже если текст изменится на "Film & Television Department" или "Film and Television Department". Знак "*" в шаблоне указывает на то, что следует искать "соответствие всему или ничему" между словами "Film" и "Television".
КомандаЦельЗначение
clicklink=glob:Film*Television Department
verifyTitleglob:*Film*Television*
Заголовок страницы, на который мы перешли - "De Anza Film And Television Department - Menu". Используя шаблон вместо точного текста, команда verifyTitle будет работать до тех пор, пока оба слова "Film" и "Television" (в таком порядке) появляются в любом месте в заголовке страницы. К примеру, если заголовок страницы будет сокращен до "Film & Television Department", тест все равно пройдет. Практика замены точного текста в тестовом сценарии на шаблон текста (как это было сделано с командой verifyTitle в примере) может значительно уменьшить время на корректировку тестовых сценариев в будущем.

Шаблоны регулярных выражений

Шаблоны регулярных выражений - наиболее мощные из трех, поддерживаемых Selenium. Регулярные выражения также поддерживаются большинством высокоуровневых языков программирования, многими текстовыми редакторами, а также рядом приложений, в частности, утилитами командной строки в Linux/Unix, такими как grepsed и awk. С помощью шаблонов регулярных выражений пользователь имеет возможность решать множество задач, которые в противном случае в Selenium решаются сложнее. Например, предположим, что в вашем тестовом сценарии необходимо убедиться, что определенная ячейка таблицы не содержит ничего, кроме числа. regexp: [0-9]+ - это простой шаблон, с помощью которого легко убедиться, что в ячейке находится десятичное число любой длины.
В то время как универсализированные шаблоны Selenium поддерживают только * и [ ] (класс символов), шаблоны регулярных выражений языка команд Selenium могут работать со всеми специальными символами, которые поддерживаются JavaScript. Ниже показано подмножество этих специальных символов:
ШАБЛОНСООТВЕТСТВИЕ
.один любой символ
[ ]класс символов: один любой символ, который находится внутри скобок
*квантификатор: 0 или больше смежных символов (или групп)
+квантификатор: 1 или больше смежных символов (или групп)
?квантификатор: 0 или 1 смежный символ (или группа)
{1,5}квантификатор: от 1 до 5 смежных символов (или групп)
|чередование: символ/группа слева или символ/группа справа
( )группировка: часто используется с чередованием и/или с квантификатором
Перед шаблонами регулярных выражений в языке команд Selenium должны стоять либо regexp:, либо regexpi:regexp: нужно вводить с учетом регистра клавиатуры, при вводе regexpi: это можно не учитывать.
Несколько примеров помогут более ясно прояснить, как шаблоны регулярных выражений используются в языке команд Selenium. В первом примере показано использование наиболее популярного шаблона регулярных выражений - .*. Эта последовательность из двух символов может быть расшифрована как "0 или более появлений любого символа" или проще - "что-либо или ничего". Она является эквивалентом односимвольного универсализированного шаблона * (одна звездочка).
КомандаЦельЗначение
clicklink=regexp:Film.*Television Department
verifyTitleregexp:.*Film.*Television.*
Пример выше функционально равнозначен другому более раннему примеру, в котором использовались универсализированные шаблоны для этого же тестового сценария. Отличаются эти два примера наличием regexp: вместо glob:, а также "что-либо или ничего" (.* вместо *).
В более сложном примере ниже проверяется, что страница службы Yahoo! Weather для города Анкоридж, штат Аляска, содержит информацию о времени восхода солнца:
КомандаЦельЗначение
openhttp://weather.yahoo.com/forecast/USAK0012.html
verifyTextPresentregexp:Sunrise: *[0-9]{1,2}:[0-9]{2} [ap]m
Давайте рассмотрим части данного регулярного выражения:
Sunrise: *Строка Sunrise:, после которой идет 0 или больше пробелов
[0-9]{1,2}1 или 2 цифры (для часов)
:Символ : (нет специальных символов)
[0-9]{2}2 цифры (для минут), за которыми следует пробел
[ap]m"a" или "p", за которым следует "m" ("am" или "pm")

Точные шаблоны

Точные шаблоны широко используются в Selenium. В них вообще не применяются специальные символы. В случае, если, например, необходимо найти символ "*" (он является специальным для универсализированных шаблонов и шаблонов регулярных выражений), это можно сделать с помощью точного шаблона. К примеру, если необходимо найти элемент, помеченный как "Real *" в раскрывающемся меню, то данный код может выполниться успешно, а может и не заработать. Символ "*" в шаблоне glob:Real * означает "совпадение с чем-либо или ни с чем". Таким образом, если бы в меню ранее присутствовала опция "Real Numbers," ("Вещественные числа"), то была бы выбрана она, вместо опции "Real *".
select//selectglob:Real *
Чтобы удостовериться, что будет выбран "Real *", используется приписка exact: для создания точного шаблона, как показано ниже:
select//selectexact:Real *
То же самое можно сделать, исключив символ "*" в шаблоне регулярного выражения:
select//selectregexp:Real \*
Скорее всего, большинству тестировщиков никогда не понадобится возможность нахождения символа "*" либо набора квадратных скобок с содержащимися внутри символами (класс символов для универсализированных шаблонов). Зачастую большей части тестировщиков будет достаточно функциональности универсализированных шаблонов и шаблонов регулярных выражений.

Команды "AndWait"

Разница между стандартной командой и ее AndWait разновидностью заключается в том, что стандартная команда (например, click) выполнится, и Selenium как можно быстрее перейдет к выполнению следующей команде в списке. AndWait разновидность (например,clickAndWait) приказывает Selenium подождать загрузки страницы после выполнения команды.
Разновидность AndWait используется всегда, когда действие требует от браузера перейти на другую страницу или обновить текущую страницу.
Следует быть внимательным, чтобы не применять разновидность команд AndWait для действий, которые не инициируют переход на другую страницу или обновление текущей, иначе ваш тест не сможет успешно завершиться. Такое случается из-за того, что Selenium, дождавшись конца тайм-аута AndWait, не видит никаких переходов/обновлений и вызывает исключение по тайм-ауту.

Команды waitFor в приложениях AJAX

В веб-приложениях на базе AJAX данные приходят с сервера без обновления страницы. Команды с andWait не смогут нормально выполняться, так как веб-страница не обновляется. Постановка на паузу тестового сценария на некоторое время будет неудачным решением, так как веб-элемент может появиться на странице раньше или позже указанного времени. Это зависит от времени отклика системы, нагрузки либо иных неподконтрольных факторов, что приведет к провалу теста. Лучшим выходом из ситуации является задание динамического периода ожидания появления элемента, а после удачной проверки - продолжения выполнения тестового сценария.
Разновидности команд waitFor, такие как waitForElementPresent либо waitForVisible, позволяют задавать динамическое время ожидания, каждую секунду проверяя указанное условие. После удачной проверки программа перейдет к выполнению следующей команды.

Вычисление последовательностей и управление исполнением программы

После запуска тестовый сценарий выполняет команды последовательно, одну за другой.
Сам язык команд Selenium не поддерживает задание условий (например, "if-else") и итерацию (например, "for", "while"). Множество тестовых сценариев можно составить без использования управления исполнением программы, однако для тестирования функциональности или динамического содержания на нескольких страницах зачастую необходимо использование программной логики.
Существуют 3 способа добавления управления исполнением программы:
  1. Запуск тестового сценария с использованием Selenium RC и клиентской библиотеки, к примеру, Java или PHP, и использование возможностей этих языков программирования для управления исполнением программы.
  2. Запуск небольшого сниппета JavaScript из тестового сценария с использованием команды storeEval.
  3. Установка расширения goto_sel_ide.js.
Большинство тестировщиков экспортируют тестовый сценарий в файл языка программирования с использованием программного интерфейса приложения Selenium RC (см. главу "Selenium IDE"). Тем не менее, некоторые организации предпочитают запускать тестовые сценарии из Selenium IDE (к примеру, когда в компании много сотрудников с низкими навыками автоматизированного тестирования или программирования). В таком случае поможет использование сниппета JavaScript или расширения goto_sel_ide.js.

Команды "store" и переменные Selenium

Для хранения констант в начале тестового сценария используются переменные Selenium, которые - в сочетании с управляемой данными структурой тестового сценария (см. следующий раздел) - позволяют хранить значения, поступающие в программу тестирования через командную строку, через другую программу либо через файл.
Store - это наиболее часто используемая из всех команд вида "store", она применяется для хранения постоянного значение переменной Selenium. Команда использует два параметра: текстовое значение и переменную Selenium. Для названия переменной можно использовать только буквенно-цифровые символы.
КомандаЦельЗначение
storepaul@mysite.orguserName
Для того чтобы позже использовать сохраненную переменную в тестовом сценарии, необходимо заключить ее в фигурные скобки "{}" и поставить впереди них знак доллара "$", как это показано на примере.
КомандаЦельЗначение
verifyText//div/p${userName}
Переменные часто используются для данных полей ввода и вывода.
КомандаЦельЗначение
typeid=login${userName}
Переменные Selenium могут использоваться либо в первом, либо во втором параметре. Они интерпретируются Selenium до выполнения каких-либо других операций команды. Переменные могут также использоваться внутри выражения локатора.
Соответствующие команды существуют для каждой команды вида "verify" и "assert". Ниже показаны еще несколько наиболее часто используемых команд вида "store".

storeElementPresent

Команда, которая соответствует "verifyElementPresent". Она просто сохраняет булевое значение - "true" или "false" - в зависимости от того, найден был элемент или нет.

storeText

"StoreText" соответсвует "verifyText". Команда использует локатор, чтобы идентифицировать заданный текст на странице. Если такой текст был найден, он сохранится в переменной. "StoreText" можно использовать, чтобы извлекать текст из тестируемой страницы.

storeEval

Данная команда использует в качестве первого параметра скрипт. В следующем разделе более подробно рассмотрено включение JavaScript в язык команд Selenium. "StoreEval" позволяет тестовому сценарию сохранять результат исполняемого скрипта в переменной.

JavaScript и параметры языка команд Selenium

JavaScript можно использовать с двумя видами параметров языка команд Selenium: скриптовыми и нескриптовыми (это чаще всего выражения). В большинстве случаев удобнее работать с переменными через сниппет JavaScript, который используется как параметр языка команд Selenium. Все переменные, созданные в тестовом сценарии, хранятся в ассоциативном массиве JavaScript. В массиве используются строковые индексы, а не последовательные числовые. Ассоциативный массив, в котором содержатся переменные пользовательского тестового сценария, называется storedVars. Для того чтобы получить доступ к переменной или изменить ее в сниппете JavaScript, вам нужно формировать запрос вида storedVars['ИмяВашейПеременной'].

Использование JavaScript с параметрами типа "script"

Некоторые команды в Selenium могут задать параметр script, например, assertEvalverifyEvalstoreEval и waitForEval. Эти параметры не требуют специального синтаксиса. Пользователю достаточно просто поместить сниппет JavaScript кода в подходящее поле, обычно это поле Цель (так как параметр типа script зачастую является первым или единственным параметром команды).
На примере ниже показано, как использовать сниппет JavaScript, чтобы произвести простое вычисление:
КомандаЦельЗначение
store10hits
storeXpathCount//blockquoteblockquotes
storeEvalstoredVars['hits']-storedVars['blockquotes']paragraphs
На следующем примере показано, как использовать сниппет JavaScript, чтобы создавать вызовы методов, в данном случае объект JavaScript String, методы toUpperCase и toLowerCase.
КомандаЦельЗначение
storeEdith Whartonname
storeEvalstoredVars['name'].toUpperCase()uc
storeEvalstoredVars['name'].toLowerCase()lc

Использование JavaScript с параметрами, не относящимися к типу "script"

JavaScript также может применяться для помощи в генерации значений для параметров, даже не относящихся к типу script. В этом случае необходимо использовать специальный синтаксис - сниппет JavaScript должен быть помещен в фигурные скобки, перед которыми должна быть приписка javascript, так же как и в javascript {*этоВашКод*}. Ниже приведен пример, в котором у второго параметра командыtype значение сгенерировано через код JavaScript с использованием данного синтаксиса:
КомандаЦельЗначение
storeleague of nationssearchString
typeqjavascript{storedVars['searchString'].toUpperCase()}

echo - команда вывода данных на экран

В Selenium существует простая команда для отображения текста в поле вывода данных. Это может быть полезно для отслеживания прогресса теста через поле вывода данных во время выполнения тестового сценария. Команда echo также будет полезна для ориентирования в тестовом сценарии, чтобы можно было быстро понять, что пошло не так, если тест провалился. Еще одной полезной функцией команды является возможность отображения содержания переменных Selenium.

Диалоговые окна, всплывающие окна, несколько окон

К примеру, вам нужно протестировать вот такую страницу.
Появляются диалоговые окна/подтверждения, становится активным всплывающее окно - пользователь должен отреагировать на эти изменения. В Selenium встроена функциональность взаимодействия с всплывающими окнами на JavaScript.
Однако прежде, чем мы рассмотрим каждый вид окон по отдельности, стоит пояснить, что их объединяет. Диалоговые окна, всплывающие окна и подсказки - это варианты следующего:
КомандаОписание
assertFoo(pattern)выдает ошибку, если шаблон не соответствует тексту всплывающего окна
assertFooPresentвыдает ошибку, если всплывающее окно недоступно
assertFooNotPresentвыдает ошибку, если на экране есть всплывающее окно
storeFoo(variable)сохраняет текст всплывающего окна в переменной
storeFooPresent(variable)сохраняет текст всплывающего окна в переменной и возвращает "true" или "false"
Во время прохождения тестового сценария всплывающие окна на JavaScript появляться не будут, так как вызовы функций отменяются из-за собственного JavaScript, встроенного в Selenium. Однако только потому что пользователь не видит всплывающее окно отнюдь не значит, что его не существует. Чтобы взаимодействовать с окном, нужно вызвать его функцию assertFoo(pattern). Если вы не проведете проверку наличия всплываюшего окна, то следующая за ней команда заблокируется, и программа выдаст ошибку приблизительно такого типа: [error] Error: There was an unexpected Confirmation! [Chose an option.] (англ. [ошибка] Ошибка: Непредусмотренное подтверждение! [Выбрана опция.]).

Диалоговые окна

Первыми мы рассмотрим диалоговые окна, так как они самые простые. Для начала откройте пример кода HTML выше в браузере и щелкните на кнопку "Show alert" ("Показать диалоговое окно"). После закрытия появится текст "Alert is gone" ("Диалоговое окно закрыто"). Теперь проделайте те же шаги с Selenium IDE в режиме записи, а после добавьте команду "verify", чтобы проверить наличие текста о том, что вы закрыли диалоговое окно. Ваш тестовый сценарий будет выглядеть примерно так:
КомандаЦельЗначение
open/
clickbtnAlert
assertAlertI'm blocking!
verifyTextPresentAlert is gone.
Вероятно, вы думаете: "Как странно, я не добавлял команду "assert", чтобы проверить наличие диалогового окна". Верно, Selenium IDE закрыл данное окно самостоятельно. Если убрать этот шаг и запустить тестовый сценарий, появится следующая ошибка: [error] Error: There was an unexpected Alert! [I'm blocking!] (англ. [ошибка] Ошибка: Непредусмотренное диалоговое окно! [Блокировка!]). С помощью команды "assertAlert" выполняется проверка наличия данного окна.
Если необходимо проверить только наличие диалогового окна, и неважно, какой текст оно содержит, можно воспользоваться командойassertAlertPresent, которая возвратит "true" или "false". Значение "false" остановит выполнение теста.

Подтверждения

Подтверждения ведут себя точно так же, как и диалоговые окна. Команды assertConfirmation и assertConfirmationPresentаналогичны тем, которые были рассмотрены выше при работе с диалоговыми окнами. По умолчанию Selenium будет выбирать "OK" для подтверждения. Попробуйте, к примеру, записать клик по кнопке "Show confirm box" ("Показать окно подтверждения") в тестовой странице, а после нажмите на кнопку "Cancel" ("Отмена") в появившемся окне. Проверьте подтверждение с помощью командыassertConfirmation. Ваш тестовый сценарий будет выглядеть следующим образом:
КомандаЦельЗначение
open/
clickbtnConfirm
chooseCancelOnNextConfirmation
assertConfirmationChoose an option.
verifyTextPresentRejected
Команда chooseCancelOnNextConfirmation информирует Selenium, что все последующие подтверждения должны возвращать "false". Команда chooseOkOnNextConfirmation отменяет предыдущую команду.
Вероятно, вы заметили, что невозможно заново запустить тестовый сценарий, так как Selenium выдает ошибку о появлении непредусмотренного подтверждения. Это происходит потому, что из-за порядка, в котором Selenium IDE записывает события, команды "click" и "chooseCancelOnNextConfirmation" стоят на неверных позициях в тестовом сценарии (Selenium не может знать, что пользователь нажмет кнопку "Отмена" до тех пор, пока тот не откроет окно подтверждения). Просто переставьте местами эти команды и тестовый сценарий сможет завершиться успешно.

Отладка

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

Точки прерывания и точки старта

В Selenium IDE есть возможность создать точки прерывания, а также запускать и останавливать тест с любого места в тестовом сценарии. К примеру, можно перейти к команде в середине тестового сценария, чтобы проверить, как выполняется тест на конкретном этапе. Для этого нужно установить точку прерывания перед той командой, действие которой нужно протестировать.
Чтобы установить точку прерывания, выберите команду, кликните на ней правой клавишей мыши и из контекстного меню выберитеУстановить точку прерывания. После этого нажмите на кнопку "Запустить", чтобы запустить тестовый сценарий с начала до точки прерывания.
Иногда также бывает полезно запустить тестовый сценарий с середины до конца теста либо от точки старта до точки прерывания. К примеру, тестовый сценарий выстроен так, что вначале он авторизуется на сайте, а после выполняет ряд тестов, один из которых нуждается в отладке. Авторизоваться нужно только один раз, однако после этого действия вам необходимо в процессе разработки запускать тестовые сценарии много раз. Решение: авторизуйтесь на сайте, потом запускайте ваш тестовый сценарий с точки старта (установленной после авторизации). Это будет более рационально, чем выходить из системы каждый раз при новом запуске тестового сценария.
Чтобы установить точку старта, выберите команду, кликните на ней правой клавишей мыши и в контекстном меню выберите Установить/убрать точку старта. После этого нажмите на кнопку "Запустить", чтобы запустить тестовый сценарий с точки старта.

Пошаговое выполнение тестового сценария

Для того чтобы выполнять тестовый сценарий по одной команде за раз ("прошагивать" его):
  1. Запустите тестовый сценарий с помощью кнопки "Запустить" ("Run") на панели инструментов.
images/chapt3_img09_Run.png
  1. Сразу же остановите выполнение тестового сценария, нажав на кнопку "Пауза" ("Pause").
images/chapt3_img10_Pause.png
  1. Нажимайте на кнопку "Шаг" ("Step") для выполнения команд пошагово.
images/chapt3_img12_Step.png

Кнопка "Найти"

Кнопка "Найти" служит для того, чтобы узнать, какой элемент интерфейса пользователя на тестируемой странице (в браузере) в данный момент используется командой Selenium. Данная функция полезна при создании локатора для первого параметра команды (см. раздел "Нахождение элементов" в главе "Команды Selenium"). "Найти" можно использовать для любой команды, для которой задан элемент интерфейса пользователя на веб-странице, например, clickclickAndWaittype, и в том числе некоторые команды assert и verify.
Из вида "Таблица" выберите любую команду с параметром "локатор". Нажмите на кнопку "Найти". На веб-странице должен появиться светло-зеленый прямоугольник на элементе, определенном в параметре "локатор".

Использование исходного кода при отладке

Зачастую при отладке тестовых сценариев необходимо видеть исходный код страницы, чтобы выявить проблему. Это довольно просто сделать в Firefox. Щелкните правой клавишей мыши на веб-странице и выберите "Исходный код страницы" ("View Page Source"). Код HTML будет показан в отдельном окне. Используйте функцию поиска "Правка"=>"Найти" ("Edit"=>"Find"), чтобы найти тот элемент интерфейса пользователя, который вы тестируете.
Также можно выделить только часть веб-страницы, чтобы посмотреть ее исходный код. После выделения кликните правой клавишей мыши и выберите "Исходный код выделенного фрагмента" ("View Selection Source"). В данном случае в появившемся окне будет выделен выбранный вами кусок кода.

Locator Assistance

Когда Selenium IDE записывает параметр типа "локатор", он также сохраняет дополнительную информацию, чтобы пользователь имел возможность выбрать любой другой доступный тип локатора для данного элемента. Это может быть полезно как для изучения различных типов локаторов, так и для изменения типа локатора при составлении тестового сценария.
Изменить вид локатора можно из выпадающего списка в поле "Цель" (только когда это поле уже содержит записанный локатор). На скриншоте ниже показано содержание выпадающего списка для команды. Обратите внимание, что в первом столбце списка расположены доступные типы локаторов, а во втором содержится информация о данном типе локатора.
images/chapt3_img23_IDE_Locator_Assistance.png

Составление набора тестов

Набор тестов - это список тестовых сценариев, который расположен в крайней левой панели Selenium IDE. Панель "Тестовый сценарий" можно вручную скрывать или открывать нажатием на маленькую полоску посередине правой границы панели (после закрытия панели она превратиться в левую границу окна Selenium IDE).
Панель автоматически откроется, когда будет открыт сохраненный набор тестов или когда пользователь выберет опцию "Новый тестовый сценарий" из меню "Файл". Во втором случае новый тестовый сценарий появится в списке после предыдущего тестового сценария.
Selenium IDE пока не поддерживает добавление сохраненных тестовых сценариев в набор тестов. Для того чтобы создать или изменить набор тестов, добавив в него сохраненные тестовые сценарии, пользователю необходимо вручную отредактировать файл набора тестов.
Файл набора тестов - это файл HTML, в котором находится таблица в один столбец. Каждая ячейка каждой строки таблицы в разделе <tbody> содержит ссылку на тестовый сценарий. Ниже приведен пример набора тестов с четырьмя тестовыми сценариями:
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Sample Selenium Test Suite</title>
</head>
<body>
    <table cellpadding="1" cellspacing="1" border="1">
        <thead>
            <tr><td>Test Cases for De Anza A-Z Directory Links</td></tr>
        </thead>
    <tbody>
        <tr><td><a href="./a.html">A Links</a></td></tr>
        <tr><td><a href="./b.html">B Links</a></td></tr>
        <tr><td><a href="./c.html">C Links</a></td></tr>
        <tr><td><a href="./d.html">D Links</a></td></tr>
    </tbody>
    </table>
</body>
</html>
Note
Test case files should not have to be co-located with the test suite file that invokes them. And on Mac OS and Linux systems, that is indeed the case. However, at the time of this writing, a bug prevents Windows users from being able to place the test cases elsewhere than with the test suite that invokes them. (Файлы тестовых сценариев не должны быть в том же месте, что и набор тестов, который их вызывает. Для таких операционных систем как Mac OS и Linux это может быть проблемой. При работе же в Windows баг не дает пользователям сохранить тестовые сценарии в каком-либо ином месте, кроме как вместе с их набором тестов.)

Пользовательские расширения

Пользовательские расширения - это файлы JavaScript, которые позволяют выполнить персонализацию программы, а также расширить ее функциональность. К примеру, с помощью пользовательских расширений можно увеличить количество команд Selenium.
Существует большое количество пользовательских расширений.
ВАЖНО: ДАННЫЙ РАЗДЕЛ УСТАРЕЛ. МЫ СКОРО ЕГО ПЕРЕРАБОТАЕМ.
Расширение goto_sel_ide.js - наиболее популярное из всех расширений для Selenium IDE. Оно предоставляет возможность управления исполнением программы, создания циклов с предусловием, а также простых условных предложений. Детальную информацию об использовании данного расширения можно найти на сайте его автора.
Чтобы установить это расширение, укажите путь к нему в разделе Расширения ядра Selenium ("Опции"=> "Опции..."=>вкладка "Общее").
images/chapt3_img32_Extensions_install.png
После установки перезапустите Selenium IDE, чтобы программа смогла начать работать с файлом расширения. После каждого дополнительного изменения файла расширения также потребуется перезапустить программу.
Справка по созданию пользовательских расширений доступна в конце документа Справка Selenium.

Формат

"Формат" в меню "Опции" позволяет выбрать язык, на котором будут сохраняться и показываться тестовые сценарии. По умолчанию это HTML.
При использовании Selenium RC для запуска тестовых сценариев данная особенность используется для перевода тестового сценария в файл языка программирования. Выберите язык, например, Java или PHP, который вы будете использовать в работе с Selenium RC для разработки программ тестирования. После просто сохраните тестовый сценарий через "Файл"=>"Сохранить". Ваш тестовый сценарий будет переведен в череду функций на языке, который вы выбрали. Программный код для поддержки вашего теста генерируется Selenium IDE.
Также обратите внимание на то, что если сгенерированный код чем-то вам не подходит, вы можете изменить его, отредактировав файл настроек, который отвечает за процесс генерации кода. Файлы настроек есть для каждого поддерживаемого языка, и их можно редактировать, если зайти в "Опции"=> "Опции..."=>вкладка "Формат".
Note
At the time of this writing, this feature is not yet supported by the Selenium developers. However the author has altered the C# format in a limited manner and it has worked well. (На момент написания главы данная функция пока еще не была представлена в Selenium. Тем не менее, автор изменил формат C# немного, и все отлично работает).

Запуск тестовых сценариев Selenium IDE в других браузерах

Хотя Selenium IDE может работать только с Firefox, тестовые сценарии, разработанные в Selenium IDE, можно использовать и для тестирования в других браузерас с помощью простого интерфейса командной строки, который обращается к серверу Selenium RC. Более подробно об этой теме можно узнать в разделе :ref:`Run Selenese tests <html-suite>` в главе, посвященной Selenium RC. Возможность использовать -htmlSuite вызывает особый интерес.

Устранение неполадок

Ниже представлены пары вида "изображение/пояснение", в которых описываются основные причины проблем, которые могут возникнуть при работе с Selenium IDE:
Table view is not available with this format. (Табличный вид не поддерживается в этом формате.)
Данное сообщение может иногда появляться во вкладке "Таблица" при запуске Selenium IDE. Решение: перезапустить программу. Для более подробной информации см. issue 1008. Если вы можете воспроизвести этот баг, пожалуйста, свяжитесь с нами, чтобы мы могли это исправить.

error loading test case: no command found (ошибка загрузки тестового сценария: не найдена команда)
Вы воспользовались командой Файл=>Открыть при открытии файла набора тестов. Для этой задачи нужно использовать Файл=>Открыть набор тестов.
Был поднят вопрос об усовершенствовании данного сообщения об ошибке. См. issue 1010.

images/chapt3_img28_Trouble_timing.png
Данный тип ошибки может быть вызван проблемой тайминга, к примеру, элемент, определенный локатором в вашей команде, не был полностью загружен во время выполнения команды. Вставьте pause 5000 перед командой, чтобы определить, действительно ли проблема в тайминге. Если это так, подберите необходимый тайминг с помощью команд waitFor* или *AndWait.

images/chapt3_img29_Trouble_param.png
Всякий раз, когда вы пытаетесь использовать переменную, не срабатывает подстановка, как в данном примере с командой open. Программа показывает, что переменная, к значению которой вы хотите получить доступ, не была создана. Иногда такое происходит из-за того, что переменная была введена в поле "Значение" вместо поля "Цель" или наоборот. На данном примере 2 параметра для командыstore были указаны в неверном порядке. Для каждой команды в Selenium первый назначенный параметр обязан идти в поле "Цель", а второй - если он существует - в поле "Значение".

error loading test case: [Exception... "Component returned failure code: 0x80520012 (NS_ERROR_FILE_NOT_FOUND) [nsIFileInputStream.init]" nresult: "0x80520012 (NS_ERROR_FILE_NOT_FOUND)" location: "JS frame :: chrome://selenium-ide/content/file-utils.js :: anonymous :: line 48" data: no]
(ошибка загрузки тестового сценария: [Исключение... "Компонент вернул код ошибки: 0x80520012 (NS_ERROR_FILE_NOT_FOUND) [nsIFileInputStream.init]" nresult: "0x80520012 (NS_ERROR_FILE_NOT_FOUND)" location: "JS frame :: chrome://selenium-ide/content/file-utils.js :: anonymous :: line 48" data: no])
Невозможно найти один из тестовых сценариев в наборе тестов пользователя. Убедитесь, что тестовый сценарий находится по тому же пути, что записан в наборе тестов. Также удостоверьтесь, что расширение тестового сценария ".html". Убедитесь, что то расширение записано и в наборе тестов.
Был поднят вопрос об усовершенствовании данного сообщения об ошибке. См. issue 1011.

images/chapt3_img26_Trouble_space.png
Selenium IDE учитывает пробелы при вводе команд. Лишний знак пробела до или после команды не позволит программе успешно опознать команду.
Был поднят вопрос о решении этой проблемы. См. issue 1012.

images/chapt3_img27_Trouble_extension.png
Selenium IDE не может прочитать содержимое вашего файла расширения. Убедитесь, что указан верный путь к файлу расширения с помощью "Опции"=> "Опции..."=>вкладка "Общее", поле Расширения ядра Selenium. Также нужно перезапустить программу после любых изменений либо файла расширения, либо содержимого поля Расширения ядра Selenium.

images/chapt3_img30_Trouble_collapsed.png
Может показаться, что Selenium IDE сгенерировал сообщение об ошибке, хотя никакой ошибки нет. Selenium IDE указывает на то, что настоящее значение не совпадает со значением, указанным для тестового сценария. Проблема в том, что запись об ошибке в логе объединяет несколько пробелов подряд в один знак пробела, поэтому для пользователя ошибка может показаться странной. На примере выше видно, что параметр verifyTitle содержит 2 пробела между словами "Selenium" и "web". В заголовке страницы пробел только один. Ошибка сгенерирована верно, однако ее причина не сразу бывает понятна.
Был поднят вопрос о решении этой проблемы. См. issue 1013.

Комментариев нет:

Отправить комментарий