По умолчанию Selenium IDE предоставляет возможность использовать только линейные последовательности команд. Это приводит к ряду не удобств, главное из которых – рост количества строк кода, что в дальнейшем снижает читаемость и сопровождаемость тестов. К счастью, добрыми людьми было разработано специальное расширение к Selenium IDE, которое позволяет использовать в тестах циклы, условия и переходы.
Расширение носит название FlowControl. Данное расширение помогает реализовывать в Selenium IDE практически полноценные тестовые сценарии с использованием циклов, операторов условий и переходов. Команды, доступные в расширении FlowControl значительно помогают при реализации ряда задач, а также способствую снижению количества строк кода, повышают читаемость и сопровождаемость тестовых сценариев. Скачать расширение и получить более детальную информацию о нем можно по этой ссылке.
Список команд, которые будут вам доступны при написании тестов на Selenium IDE, при использовании расширения FlowControl:
-
label
– метка; -
goto
– переход; -
gotoAndWait
– переход и ожидание; -
gotoIf
– перейти к метке, если выполняется определенное условие; -
gotoIfAndWait
– перейти к метке, если выполняется определенное условие и ожидать события; -
gotolabel
– переход на метку; -
gotolabelAndWait
– переход на метку и ожидание события; -
while
– цикл while (пока выполняется условие); -
whileAndWait
– цикл while (пока выполняется условие) и ожидание событие; -
endWhile
команда выхода из цикла по достижению требуемого условия; -
endWhileAndWait
– команда выхода из цикла по достижению требуемого условия и ожидание наступления события.
Однозначно, с помощью расширения FlowControl ваши тесты на Selenium IDE станут более мощными и удобными в сопровождении.
Так как в последнее время участились просьбы продемонстрировать примеры использования FlowControl в Selenium IDE, сегодня я покажу вам простые примеры работы с командами Selenium IDE – label
, gotoIf
, gotolabel
, while/endWhile
, goto
. Не забываем скачать, а затем подключить файл goto_sel_ide.js к Selenium IDE. Про то, как подключить user-extensions.js, можно почитать тут
Часто команды в тесте выполняются поочередно одна за другой, но иногда требуется поставить последовательность их выполнения в зависимость от каких-то условий. С помощью label
мы можем ставить метки в наших тестах, а затем с помощью gotolabel
осуществить переход к нужной нам метке. После каждой метки выполняются требуемые действия. В некоторых языках программирования есть похожие конструкции. С их помощью мы можем избавить наши тесты от линейности. Метод gotolabelAndWait
делает то же самое, что и gotolabel
, плюс дополнительно происходит ожидание загрузки страницы. Используя данные методы можно переходить к конкретным шагам в тесте. В общем случае это выглядит так:
Пример использования методов label/gotolabel | ||
… | … | |
gotolabel | OpenAboutPage | |
label | OpenAboutPage | |
… | … |
Методы gotoIf / gotoIfAndWait
(то же самое, только ждем окончания загрузки страницы) позволяют нам использовать ветвление в тестах. То есть, если необходимое нам условие (IF, как в языках программирования) выполняется, то переходим к необходимой нам метке в коде, если нет, то выполнится следующая команда. Рассмотрим простой тест, в котором нам нужно сделать следующее:
- открыть главную страницу моего блога http://bugscatcher.net/;
- если на странице присутствует ссылка “Следующие записи” (смотри внизу страницы на главной), то необходимо сразу осуществить переход по данной ссылке;
- если ссылка не отображается, то происходит нажатие по ссылке “Предыдущие записи”;
- нажатие на ссылку “Следующие записи”.
Данный тест в Selenium IDE будет выглядеть следующим образом:
Пример использования методов gotoif, label | ||
open | http://bugscatcher.net/ | |
waitForPageToLoad | 3000 | |
assertTitle | Bugs Catcher | |
Осуществить переход к метке ‘OpenNextPage’ если на странице есть ссылка ‘« Следующие записи’ | ||
gotoIf | (selenium.isElementPresent(‘link=« Следующие записи’)==false); | OpenNextPage |
clickAndWait | link=Предыдущие записи » | |
Выполнится сразу после gotoIf, если ссылка отображается на странице, если нет – то данная команда выполниться после действия выше | ||
label | OpenNextPage | |
clickAndWait | link=« Следующие записи |
Чтобы проверить переход на метку, в методе open
подправьте value на “http://bugscatcher.net/page/2″. В данном случае сразу после gotoIf
выполнятся шаги теста начиная с метки “OpenNextPage”.
Пойдем на усложнение теста. Представим, что нам требуется выполнить if/else в Selenium IDE. Шаги теста:
- открыть главную страницу моего блога http://bugscatcher.net/;
- если на странице присутствует ссылка “Следующие записи” (смотри внизу страницы на главной), то необходимо осуществить переход по данной ссылке, затем открыть “About page”;
- иначе осуществить переход по ссылке “Предыдущие записи”, затем открыть “About page”.
Для реализации данного теста в Selenium IDE потребуется реализовать три метки:
- OpenNextPage – открыть следующую страницу;
- OpenPreviousPage – открыть предыдущую страницу;
- OpenAboutPage – открыть “About Page”.
Команды, следующие за метками “OpenNextPage” и “OpenPreviousPage”, будут выполняться в зависимости от выполнения/не выполнения условия. Действия после метки “OpenAboutPage” будут выполняться после выполнения шагов в метках “OpenNextPage” (переход на метку) и “OpenPreviousPage”. Обратите внимание, что в этом примере также будут использоваться команды storeEval
и goto
.
Пример использования команды if/else: | ||
open | http://bugscatcher.net/ | |
waitForPageToLoad | 3000 | |
assertTitle | Bugs Catcher | |
storeEval | if (selenium.isElementPresent(‘link=« Следующие записи’)==true){nextStep=’OpenNextPage’} else {nextStep=’OpenPreviousPage’} | openPage |
В зависимости от результата переходим к метке ‘OpenNextPage’ или ‘OpenPreviousPage’ | ||
gotolabel | ${openPage} | |
label | OpenNextPage | |
clickAndWait | link=« Следующие записи | |
gotolabel | OpenAboutPage | |
label | OpenPreviousPage | |
clickAndWait | link=Предыдущие записи » | |
label | OpenAboutPage | |
clickAndWait | link=About | |
assertTitle | About -Bugs Catcher |
Как и в предыдущем примере можно поменять стартовую ссылку, что-бы полностью разобраться в примере.
Команда while
применяется в тех случаях, когда нужно повторить какое-то количество раз одну и ту же последовательность команд. Логику работы команды while
можно описать как – “работать до тех пор, пока”. Команда endWhile
сигнализирует о выходе из блока цикла. Команды whileAndWait / endWhileAndWait
работают также, только дополнительно после этих команд будет происходит ожидание загрузки страницы. Цикле while
будет выполняться до тех пор, пока выполняется заданное условие.
Сценарий теста:
- открыть главную страницу моего блога http://bugscatcher.net/;
- нажимать на ссылку “Предыдущие записи »” в цикле требуемое количество раз;
- в конце теста перейти на страницу “About”.
Для реализации данного теста, создадим две переменные: i
– переменная цикла (счетчик), в конце итерации цикла увеличивается на единицу; StepsCount
– ограничитель цикла. storedVars['i'] <= storedVars['StepsCount']
- условие при котором, цикл будет выполняться. Реализация:
Пример использования команды while/endWhile: | ||
open | http://bugscatcher.net/ | |
waitForPageToLoad | 3000 | |
assertTitle | Bugs Catcher | |
store | 0 | i |
store | 3 | StepsCount |
while | storedVars['i'] <= storedVars['StepsCount'] | |
clickAndWait | link=Предыдущие записи » | |
assertTitle | Bugs Catcher | |
storeEval | ${i}+1 | i |
endWhile | ||
clickAndWait | link=About |
Удачной автоматизации!
Ссылки:
http://siderulezzz.wordpress.com/2010/08/28/7/
http://siderulezzz.wordpress.com/2010/06/15/6/
http://seleniumhq.org/docs/02_selenium_ide.html
http://51elliot.blogspot.com/2008/02/selenium-ide-goto.html
http://wiki.openqa.org/display/SEL/flowControl