Selenium IDE FlowControl: Примеры использования

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

1 лайк

Проект http://www.openqa.org/ закрыт, поэтому расширение оттуда не скачать. А вопрос с ветвлением актуален в Selenium IDE актуален.
Нашел расширение FlowControl https://addons.mozilla.org/en-US/firefox/addon/flow-control. Но оно тоже давно не обновлялось. Нормально ли будет работать с актуальной версией Selenium IDE?

Очень полезная статья. Михаил, можно еще такие статьи писать?) И примеры тоже пожалуйста. (понимаю что 2017)

Писать то можно, но вот использовать selenium-ide будут немногие, потому писать такие статьи вряд ли получиться

Спасибо. Надеюсь, Вы всё же напишите несколько подобных полезностей.

Поищем миньёнов на ютубе) и проверим сколько у них просмотров

storeExpression https://www.google.by/ url
storeExpression Banana Song searchKeyword
storeExpression //input[@id and @type=‘text’] input
storeExpression //center/input[1][@value] search
storeExpression //h2/following-sibling::div//h3//[starts-with(@href, ‘https://www.youtube.com’) and contains(.,‘Despicable Me 2’)] searchResult
storeExpression searchResultPageTitle
storeExpression //
[./div[@class=‘watch-view-count’]] viewsQtyString
echo ${viewsQtyString}
open ${url}
echo ${input}
type ${input} ${searchKeyword}
click ${search}
waitForVisible ${searchResult}
assertVisible ${searchResult}
selectWindow null
click ${searchResult}
pause 3000
storeTitle searchResultPageTitle
assertTitle glob:${searchResultPageTitle}
waitForVisible ${viewsQtyString}
storeText ${viewsQtyString} qty
echo ${qty}
storeEval storedVars[‘qty’].replace(‘,’, ‘’).replace(‘,’, ‘’) qty
echo ${qty}
storeEval storedVars[‘qty’].match(/\d{8}/) qty
echo ${qty}
gotoIf storedVars[‘qty’] > 50000000 greater
gotoIf storedVars[‘qty’] <= 50000000 less
label less
echo Value not expected
assertTextPresent Value not expected
exitTest
label greater
echo Records are greater than 50000000

1 лайк