По умолчанию 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