Home > JavaScript > Давай зациклимся!

Давай зациклимся!

В рамках одного тест-кейса Selenium IDE можно безостановочно повторять ряд шагов до достижения определенного результата:

Добавить в форум десять реплик.

Добавить в корзину двадцать пять товаров.

Удалять из каталога товары до тех пор, пока их не останется сто восемьдесят два.

Код сокращается, а это уже хорошо.

Налаживать такую цикличность надо посредством расширения возможностей Selenium IDE, штатно он такой возможностью не располагает.

Ситуация вкратце описана на wiki.openqa.org (прокрутить до заголовка “Selenium IDE FlowControl”).

.

Не паримся

.

https://addons.mozilla.org/en-US/firefox/addon/flow-control/

  1. Установить.
  2. Юзаем.

.

Делаем “своими руками” – Добавить в Selenium IDE расширение .js

.

Файл с расширением функциональности называется goto_sel_ide.js. Его нужно скачать на жесткий диск, да.

Этот же файл, но переименованный, лежит и у меня – function-while.js (если скачал отсюда – смени расширение на ‘js’).

Открыть Selenium IDE > Options > General > Selenium Core extensions (user-extensions.js) > Browse – и указать местоположение файла на диске. ОК.

selenium IDE core extentions

Для справки: если еще раз нажать Browse и выбрать новый файл, то старый никуда из строки не исчезнет, и будет загружаться при всех последующих запусках.

Если добавить еще один файл, то в указанной строке эти два файла будут разделены запятой с пробелом. Можно добавлять еще много файлов.

А можно и редактировать только один.

.

Перезагрузить Selenium IDE

.

Полностью – выключить и запустить заново.

Под Ubuntu проблем не возникло.

Траблы случились в Windows XP: файл то не подхватывался (сразу при загрузке Selenium выдавал сообщение о том, что первые строки файла содержат ошибку), то всё молча открывалось, но при работе скрипта Selenium выпадал в астрал…

Проблему решал всякими неочевидными способами (слепо и злобно тыкаясь), но в итоге нашел такое решение: переименовал файл из goto_sel_ide.js в goto-sel-ide.js. И все, почему-то, решилось 😦

.

Найти в общем списке новые команды

.

Появляются команды while, whileAndWait, endWhile, endWhileAndWait, label, labelAndWait. Справочной информацией они не снабжены, бо тру-программисты в ней не нуждаются.

Будем использовать while и endWhile.

.

Заюзать в контексте тестирования

.

whileExampleAtForum

Открываем страницу на форуме
open http://test2.url.com/forum/health/allergies/
storeExpression Allergies – The Forum forumTitle
Сохраняем в переменную количество постов на странице (сейчас их у меня два)
storeText //div[@class=’total_posts’]/strong totalPosts
echo ${totalPosts}
Указываем условие для запуска цикла – повторять до тех пор, пока на странице не появится не меньше семнадцати записей
while storedVars[‘totalPosts’] <= 17
Нажимаем на первую попавшуюся кнопку Reply
click //span[@class=’reply_btn ul_comm_button’] Reply
waitForElementPresent //input[@type=’image’ and @src=’/Images/Discussions/green_post_btn.png’ and @name=’btnPost’]
Увеличиваем цифру в переменной на одну единицу
storeEval ${totalPosts}+1 totalPosts
заполняем поле обычным текстом плюс добавим указание номера записи (для ориентировки)
type //textarea[@name=’Post’ and @class=’message-box’] Inserted reply #${totalPosts}
clickAndWait btnPost
assertTitle ${forumTitle}
проверяем обновленное количество постов на странице
assertText //div[@class=’total_posts’] Total posts: ${totalPosts}
выход из цикла по достижению условия
endWhile
Выводим сообщение о том, что кейс завершен
getEval alert(‘Done = 18 replies’)

Вот и все дела.

Хитрая хитрость

Убийственно простой, бесконечный цикл можно организовать и так: перед цепочкой команд, которые должны выполняться циклично, следует указать особенный ярлык

Вписываем ярлык начала действия
label startHere

А после всех хитрых телодвижений, в конце выполнения всех шагов, следует указать команду перехода к ярлыку ‘startHere’.

gotolabel startHere

И Selenium послушно перейдет в начало, и начнёт заново выполнять все то, что он только что сделал, и остановить его сможет только насильственная смерть или ошибки при исполнении основных шагов. Например, приложение сдохло, или какой-то локатор показывает не то, что должен был.

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

Надо пояснить:

  • у нас в названии каждого релиза есть слово “Update”. Так уже повелось.
  • сперва указываю номер релиза, который я хочу создать. Например, №151.
  • затем увеличиваю эту цифру на единицу до тех пор, пока цифра не достигнет определенного значения.
  • в итоге я хочу увидеть список из релизов до релиза №170. Поэтому в качестве условия завершения цикла я укажу цифру “169”. На последнем рывке Selenium создаст запись про релиз №170.
  • поскольку я проигрываю этот скрипт на высокой скорости, клик по линку “Proceed” является обоснованным (это понятно каждому, кто работал с Mantis).
Укажи исходную версию релиза
storeExpression 151 updateNumber
storeExpression MantisBT mantisMainTitle
storeExpression STSm – MantisBT projectTitle
добавляем версию с номером из переменной
type version Update ${updateNumber}
clickAndWait add_version
verifyTitle ${mantisMainTitle}
clickAndWait link=Proceed
verifyTitle ${projectTitle}
Указываем условие окончания цикла
while storedVars[‘updateNumber’] <= 169
плюсуем цифру версии из переменной
storeEval javascript:{parseInt(storedVars[‘updateNumber’]) + 1} updateNumber
type version Update ${updateNumber}
clickAndWait add_version
verifyTitle ${mantisMainTitle}
clickAndWait link=Proceed
verifyTitle ${projectTitle}
endWhile
Выводим сообщение о готовности
getEval alert(‘Done!’)
  1. Kiz
    25 August 2010 at 10:34

    А можно ли как-то в ide вызвать другой тесткейс и потом после прохождения того кейса, вернуть на начальный?

    • 25 August 2010 at 10:49

      Кейс можно неоднократно “вызывать” в составе тест-сьюта.

      Типа:
      /intro.html
      /openPage.html
      /fillFields.html
      /openSecondPage.html
      /fillFields.html
      /logOut.html

      Кейс fillFields.html был использован дважды в ходе прогона тест-сьюта.

      Переходы типа GOTO, насколько я знаю, работают в контексте одного кейса. Хотя тут предлагается код, который, вроде бы, должен вызывать тот или иной файл в разных случаях


      storeEval |
      if ( storedVars['Lang'] == "en" ) {html ='../tests/htmlA.html'}
      else if ( storedVars['Lang'] == "de ") {html ='../tests/htmlB.html'}
      else if ( storedVars['Lang'] == "da ") {html ='../tests/htmlC.html'} |
      html

      Не проверял живьем, но уже есть над чем подумать.

  2. igor
    27 August 2010 at 12:46

    Можно ли реализовать цикл if?
    Например, если есть кнопка “Войти”, тогда нажимаем ее, иначе нажимаем на “Регистрация”?

  3. Ёлка
    2 February 2011 at 17:05

    Подскажите, пожалуйста, а как сохранить в переменную значение текстового поля?
    Т.е на странице имеется поле “Название:*” id= title. Вот как получить то, что в этом поле написано?
    Заранее большое спасибо.

    • 2 February 2011 at 17:20

      Захват текста:

      – storeText
      – //укажите тут координаты элемента на странице.
      – qwe (произвольное название переменной)

      Зрительная проверка захвата в логе:
      – echo
      – ${qwe}

      Команда store содержит много всяких подпунктов. Например, storeValue – сохраняет содержимое обычного текстового поля.

  4. Ёлка
    2 February 2011 at 19:51

    Почему-то в переменной пусто.
    storeText
    title
    recName

    а когда хочу вставить для проверки значение в другое текстовое поле, ошибки не выдается,но поле пустое
    type
    description
    ${recName}

    • 2 February 2011 at 21:07

      Изложу мой пример по-другому:

      storeText
      //span[@class=’blablabla’]
      recName

      Тут я сохранил текст, который находится в span с классом ‘blablabla’. В коде страницы это выглядит так:

      <div class=”abvgd” align=”center”>Наша цена: всего <span class=”blablabla”>$100!</span></div>

      Проверку сделайте с помощью echo просто для того, чтобы зрительно убедиться в том, что в переменную действительно сохраняется нужное значение.

      Потом уже вставляете содержимое переменной куда будет нужно.

      Я только догадываюсь о том, как выглядит тот элемент, из которого вам нужно сохранить содержимое, но могу предположить, что вам следует его указать более точно.

      Например:
      storeText
      //span[@id=’title’]
      recName

      Я оставил span просто потому, что не знаю, какой именно у вас элемент нужно обработать.

  5. Ёлка
    3 February 2011 at 14:05

    StoreText так и не заработало.
    Зато storeValue отработало как надо. Спасибо вам большое. Без вашего блога вообще не знаю, что бы я делала.
    Есть маленькое пожелание. Было бы не плохо иметь под рукой примеры использования основных команд Selenium. По типу как вы мне написали в предыдущем комменте.

    • 3 February 2011 at 14:10

      storeText сохраняет текст, если он там есть. Я не вижу код, который вы тестируете, поэтому более внятно сказать ничего не могу.

    • 4 February 2011 at 22:50

      Список примеров использования основных команд Selenium вам нужно составить самостоятельно. В этом весь секрет обучения любому делу.

      Основных команд у селениума нет 🙂 У него все команды важные, основные, кем-то используются (иначе их не добавляли бы в общий список).

      Спрашивайте, если столкнетесь с трудностями. Тогда примеры будут намного полезнее и понятнее.

  6. Ёлка
    10 February 2011 at 15:09

    Ёлка :
    Добрый день и снова я!
    Вот тут озадачилась 1 вопросом. Правда мне говорят,что я зря так заморачиваюсь и надо делать тесты с разными статичными наборами данных. А мне вот что-то захотелось сделать 1 относительно универсальный.
    Суть вопроса: у меня есть форма в которой можно выбрать 5 разных скриншотов. я хочу сделать так чтобы при каждом прогоне теста выбирался разный скриншот. я это реализовала с помощью замороченных циклов и использую вашу статью https://siderulezzz.wordpress.com/2010/05/28/5/#more-87,а можно ли как-то проще это сделать?
    Отличие в том что выделенный скрин оборачивается в див с классом active border , а остальные в div с классом border
    Возможно как-то можно узнать номер выделенного элемента и выбирать любой другой?
    Заранее большое вам спасибо.

    • 10 February 2011 at 15:34

      Если есть ограниченное количество скриншотов (например, пять штук), то можно посредством javascript генерировать случайное число в строго заданом диапазоне, например, 1, или 2, или 3, или 4, или 5.

      Сгенерированное число сохраняется в переменную, которую можно использовать для определения, по какому скриншоту тест будет кликать.

      Проблему с классом дива решить тоже можно через IF – https://siderulezzz.wordpress.com/2010/08/28/7/

      Основная моя проблема в том, что вы спрашиваете об очень точных вещах очень общими словами, и не видя код, и не понимая, как реагирует приложение, я не могу подобрать для вас более внятный ответ.

  7. Ёлка
    10 February 2011 at 16:13

    А куда вам можно прислать код? просто я пыталась вставить пример дива и не вышло.
    Ну рандом я использую – это получается как-то запутанно.

    Хочется как-то оптимизировать что ли код, чтобы не делать кучи циклов. Есть шанс запутаться в них.

    Могу описать алгоритм, но думаю, это будет не намного понятней.

    • 10 February 2011 at 16:25

      astenix на testitquickly.com

      Код кладите в отдельный файл, чтобы сохранились отступы и всякое такое.

      Алгоритм тоже давайте. Иногда пара слов проясняют целый документ.

      Я отвечу не сразу.

  8. tester
    4 April 2011 at 06:34

    А вы запускаете свои тесты только через Селениум ИДЕ?
    Подключила “goto_sel_ide.js” к селениум-серверу
    (java -jar selenium-server.jar -userExtensions user-extensions.js).
    Запускаю хтмл тесты через селениум-сервер,
    но тест останавливается на новых командах “gotolabel”,
    пишет “Command execution failure.”.

    • 4 April 2011 at 08:20

      В этой конфигурации – да, только через IDE.

      Selenium RC использую в связке с Java в Eclipse, и там в подобных кунштюках нет необходимости. Там и переходы (вызовы) к определенным методам, и логика “если случится а, тогда сделай б” представлены в полном объеме согласно мощностям и возможностям Java.

    • Евген
      20 May 2013 at 11:44

      столкнулся с такой же проблемой.Возможно ли вообще подключить этот js к серверу для восприятия новых команд?

  9. sas4us
    4 November 2011 at 13:53

    Алексей, подскажите пожалуйста решение следующей проблемы в Selenium IDE.
    Делаю следующее:
    1) генерирую случайные firstName, lastName, email (firstname@mailinator.com) and passwors.
    2) на странице регистрации заполняю все поля сгенерированными значениями
    3) регистрация нового пользователя проходит успешно
    4) теперь нужно открыть окно mailinator.com – в нем перейти на мой ящик
    5) в полученном письме перейти по ссылке и подтвердить регистрацию
    6) залогиниться под новым пользователем

    Проблема с шагом 4!!!!
    Можно ли это вообще сделать средствами IDE и если да то, как?

    Заранее спасибо

    • 4 November 2011 at 14:45

      конечно.

      команда ‘open | ваш URL’ открывает новый адрес непосредственно в том окне, в котором вы находитесь.

  10. sas4us
    5 November 2011 at 14:41

    Спасибо за ответ. Я уже нашел решение)
    Важно было вводить ссылку на страницу начиная с [http://]
    а я вводил просто [/ ]
    поэтому mailinator.com просто добавлялось к текущему адресу [http://текущий адрес/mailinator.com]

    • 5 November 2011 at 15:22

      Как тестировщик вы понимаете, насколько важно прояснять окружение, в котором что-то “не работает” 🙂

  11. toyen
    1 December 2011 at 02:04

    Здравствуйте. Я недавно начала интересоватся Selenium. К сожелению, знаний програмирования у меня нет, вот и возник следующий вопрос – у меня есть такой тест-кейс

    open
    http://metelyky.blogspot.com/

    clickAndWait
    css=a.comment-link

    selectFrame
    comment-editor

    type
    id=commentBodyField
    post

    clickAndWait
    id=postCommentSubmit

    Подскажите пожалуйста как зациклить комментирование.

    • 1 December 2011 at 13:08

      Уточните, пожалуйста, почему моя статья вам не помогла?

      • toyen
        1 December 2011 at 13:22

        Трудности возникли на этапе “Сохраняем в переменную количество постов на странице”. Не могу понять как мне здать эту переменную

  12. 1 December 2011 at 14:34

    отдельной командой
    storeExpression | содержимое_переменной | имя _переменной

    как задействовать: ${имя _переменной}

    вывод ее содержимого в лог: echo | ${имя _переменной}

    • Inna
      9 January 2012 at 15:24

      “..вывод ее содержимого в лог: echo | ${имя _переменной}” – воот оно! заработало!
      спасибо за Ваш труд.

  13. toyen
    2 December 2011 at 10:51

    Хорошо. Спасибо

  14. Alex
    13 February 2012 at 16:17

    Ребята, хелп!!! у меня задача: сравнить данные двух полей на двух разных страничках. как правильно использовать комманды: storeText, storeTextPresent и check?поле Value надо наполнять?данные не статичные, а формируются динамически в данных полях.

    • 13 February 2012 at 16:32

      Хорошо поставленный вопрос содержит половину ответа.

      Переформулируйте поскорее вопрос, бо не понять ничего.

  15. Alex
    14 February 2012 at 10:05

    как используя селениум иде сравнить данные двух полей на двух разных HTML страничках? Что вписывать в поля Command, Target и Value для сравнения?

  16. Ирина
    15 March 2012 at 14:28

    здравствуйте Алексей! подключаю файл D:\goto-sel-ide.js Selenium ругается [error] Unexpected Exception: fileName -> chrome://selenium-ide/content/tools.js -> file:///D:/goto-sel-ide.js?1331813923966, lineNumber -> 95, // ERROR: Caught exception [unknown command [while]]
    заранее спасибо.

  17. Ирина
    15 March 2012 at 14:39

    Проблему с ошибкой решила – была не верная запись в Target, но тест доходи до команды while и выходит. действия, которые задаю в цикле не выполняются.

  18. Funker
    23 March 2012 at 18:00

    реализовал еще один пример цикла.

    selenium.open(“http://meteo.gov.ua/ua/past_ukr/1”);
    selenium.select(“name=mouns”, “label=березня”);
    selenium.select(“name=year”, “label=2012”);
    selenium.click(“name=enter_key_ok”);

    String dayy = selenium.getExpression(“1”);
    // selenium.while(“${dayy}<= 4");
    selenium.select("name=day", "label=" + dayy);
    selenium.click("name=enter_key_ok");

    String dayy = selenium.getEval(dayy + "+1");
    // selenium.endWhile();

    интересуют такие вопросы.
    1) можно ли про помощи Selenium IDE результаты сохранить в отдельный файл, а не лог файл силениума, если да то какие команды.

    2) и 2-й вопрос как сохранить данные из выделенных значений на картинке
    http://imageshack.us/f/140/tdtxtforbl.png/ в файл.
    предполагаемый вывод результата
    2012-03-01 на 03 год. 4.3
    2012-03-01 на 06 год. 3
    *****
    2012-03-01 на 24 год. 4.3
    2012-03-02 на 03 год. 4.3
    *****
    —————
    Задача вообще. Скопировать/сохранить всю температуру за определенный месяц в файл для дальнейшей обработки.
    // Начальство доверяет только "правильным" сайтам погоды

    • 23 March 2012 at 18:29

      1) можно ли про помощи Selenium IDE результаты сохранить в отдельный файл, а не лог файл силениума, если да то какие команды.

      Нет.

  19. Funker
    24 March 2012 at 00:20

    спасибо за ответ выше.

    как скопировать в переменные значения температур/текстов после открытия страници по сценарию ниже?

    page.open “http://meteo.gov.ua/ua/past_ukr/21”
    page.select “name=day”, “label=10”
    page.select “name=mouns”, “label=березня”
    page.select “name=year”, “label=2012”
    page.click “name=enter_key_ok”

    что-то не разобрался, пробовал много методов

  20. 24 March 2012 at 11:09

    все “вытянутые” данные потом через echo отправлю в лог, а его потом анализировать буду.

  21. 26 March 2012 at 23:06

    Все, разобрался, спасибо. Помог плагин XPath Checker https://addons.mozilla.org/en-US/firefox/addon/1095 с ним и вашими комментами все получилось.

  22. 16 May 2012 at 11:42

    Добрый день! Подскажите пожалуйста, можно ли, используя данный плагин, реализовать тестирование, например текстового поля, где вводимые в него данные будут содержаться в отдельном файле.

  23. Ekaterina
    18 October 2012 at 14:18

    Здравствуйте! подскажите, пожалуйста: если при выполнении операций в цикле какая-то операция не прошла, можно ли сделать так, чтобы этот шаг пропускался, и цикл выполнялся дальше, а не прекращал свое выполение.

  24. Mar
    23 November 2012 at 16:29

    Спасибо, за статью. Все очень детально и помогло.

  25. Маша
    23 November 2012 at 17:11

    Циклы работают очень медленно, [error] Timed out after 30000. в чем может быть проблема, подскажите пожалуйста. Windows 7 . Файл переименовала в go-to-sel.js
    Спасибо.

    • 23 November 2012 at 17:45

      Неизвестно.

      Может, оперативной памяти не хватает.

      Может, приложение не отзывается вовремя.

      Мало ли…

  26. Александр
    22 April 2013 at 16:10

    Алексей, подскажите пожалуйста можно ли при помощи Selenium IDE в Firefox открыть “Новое приватное окно” оно же Private Browsing ?

    • 22 April 2013 at 16:14

      Нет.

      Можно предварительно включить режим приватности глобально в браузере, а потом не забыть его отключить.

  27. Александр
    23 April 2013 at 08:20

    Спасибо за ответ.
    Такой вариант к сожалению не подходит.
    Единственное вразумительное решение найденное на просторах интернета выглядит следующим образом:
    “Without knowing much about Selenium RC, you can open Firefox in private browsing mode using -private command line option. Alternatively you could set browser.privatebrowsing.autostart preference to true. I guess that at least one of the two is doable in Selenium RC.”
    Но к сожалению относится к Selenium RC.
    Возможно ли это как то спроэцировать для ide ?

    • 23 April 2013 at 09:54

      Открыть браузер в режиме private browsing и включить в нем SeleniumIDE – это не связаные друг с другом операции. Вам это понятно?

  28. Александр
    23 April 2013 at 11:13

    Это мне вполне понятно.Берем за основу, что Selenium ide изначально включен, а во время проведения проверок нужно открыть новое окно в режиме приватного просмотра. Далее просто использовать selectWindow. Мне нужно проверить взаимодействие клиента с оператором, и особенность сайта в том что сделать это можно либо если окна клиента и оператора открыты в разных браузерах, либо одно из этих окон открыто в приватном окне.

  29. Сергей
    5 June 2013 at 23:24

    Здравствуйте, есть такой вопрос: Настроил Цикл на выполнение операций, но иногда операция не проходит, выдается ошибка [error] Element ************** not found и цикл останавливается. Можно ли как-то сделать, чтобы он продолжал выполнение кейса, не обращая внимания на ошибки?

    • 7 June 2013 at 15:27

      Сергей, это слишком общий вопрос.

      Вероятно, необходимый элемент не успевает появиться на странице. Вероятно, он переходит в состояние hidden. Вероятно, его после каких-то операций вообще нет на странице.

  30. 0ver
    7 June 2013 at 17:46

    Можно ли отключить лог консоли в Selenium IDE? А то при длительной работе цикла, вся системная память сжирается firefox’ом

    • 7 June 2013 at 18:27

      Нативными средствами – нет.

      Если сможете влезть в код Selenium – да.

  31. 0ver
    5 July 2013 at 18:04

    Не подскажите место расположения файлов selenium ide в случае с firefox’ом?

  32. 0ver
    5 July 2013 at 18:33

    Вопрос про место, снимается. Вместо него – в какой .js’ке копать сорцы логгера?

  33. serj
    12 July 2013 at 12:55

    Добрый день.
    Имеется задача: объявить переменную в переменной.
    Есть несколько переменных loc(loc1,loc2,loc3..) и есть переменная i, которой в цикле добавляется единичка. Так вот, нужно сделать так, что бы в цикле к слову ‘loc’ дописывалось значение ${i}, и вытягивалось значение уже объединенной переменной.
    Типа ${loc${i}} в результате получаю ‘${loc1}’, а нужно значение этой переменной.
    Возможно ли реализовать такую штуку с помощью IDE?

    • 12 July 2013 at 13:06

      Не понял задачу.

      • serj
        12 July 2013 at 13:20

        Нужно в цикле перебрать все значения переменных loc, то есть то, что хранится в каждой loc1, loc2, loc3 и т.д.

        • 12 July 2013 at 13:44

          Серж, задачу-то я понял.

          Да, это можно сделать. Можно ли сохранить в третью переменную значение, которое получается из сложения двух переменных?

          Но я хочу, чтобы ты сам предложил вариант решения.

          Поэтому — снова не понимаю. Переформулируй.

          • serj
            12 July 2013 at 13:57

            пробовал сохранить значение ${loc${i}}, но селениум увидел только одну переменную и сделал ${loc1}, я подозреваю что можно решить эту задачу с помощью использований масивов – записывать значения loc в массив, а потом выводить как MasLock[${i}] – но как добавлять элементы в массив пока не разобрался, нашел только объявление массивов с элементами arr = new Array(“elem1″,”elem2”, “elem3”). Но такое решение не подходит. Есть еще вариант – использование коллекций – но по ним как-то не много материалов в сети.
            В общем, нужно не только сложить название переменной из двух частей, но еще и вытащить из нее значение, что собственно пока и не получается.

  34. Angelika
    16 August 2013 at 14:19

    а оператор FOR использовать можно в селениуме IDE?

    • 16 August 2013 at 15:22

      Хм, а действительно… Мне еще не приходилось. Думаю так: если можно написать сниппет на JavaScript, в котором будет использоваться этот оператор, то его можно будет использовать в контексте Selenium IDE без проблем.

      Сделаете тест?

  35. Maxim
    13 December 2013 at 19:29

    День добрый
    Вопрос как посчитать количество элементов tr либо a ?
    Для чего нужно : Почта сколько писем я не знаю до открытия страницы .
    Надо пройти по всем письмам и те которые прочитанные переделать в прочитанные
    Непрочитанные в прочитанные .

    storeText //div[@class=’total_posts’]/strong totalPosts
    echo ${totalPosts}
    как получаеться число ?

    while storedVars[‘totalPosts’] <= 17

    у меня три письмя

    storeText
    css=table.th tr[bgcolor]
    totalMail

    echo
    ${totalMail}

    2)Xpath функция count() ?

    • 14 December 2013 at 17:56

      Да, есть команда countElements или как она там называется. Указываем локатор, сохраняем результат работы в переменную.

  36. Helen
    23 December 2013 at 14:11

    Добрый день.
    У меня вопрос может конечно не по данной теме.
    У меня есть таблица с определенным контентом и у каждой строки есть две кнопки: редактировать и удалить. С по мощью фильтра я нахожу нужную строку и мне нужно ее удалить. Вот в чем вопрос, что делать если эти кнопки зависят от ИД строки?

    • 25 December 2013 at 02:43

      Отсчитывать строки. Или ориентироваться по их содержимому, вроде assertTextPresent.

  37. Anton
    14 January 2014 at 10:38

    Не подскажите как можно реализовать паузу между выплоняемыми коммандами, но не на определенное время а на рандомное в пределах какого-то значения.

    • 17 January 2014 at 18:05

      Пауза ставится однозначно.

      Можно поставить условие waitFor что-нибудь, вроде waitForElementPresent или другое условие. Тогда всё будет работать сразу, как только появляется нужный элемент или текст.

  38. Vadim
    17 January 2014 at 17:12

    Можно ли организовать цикл в цикле?
    while (усовие 1)
    while (усовие 2)
    endWhile
    endWhile

  39. Работник
    20 January 2014 at 19:30

    Друзья, подскажите, можно ли с Selenium IDE заполнять автоматом поля в Мозиле? Например на странице есть 100 полей, куда надо вписать 1, и что бы не делать это 100 раз в ручную ввести лишь раз, а программа это сделает сама? Может какие другие программы для таких действий есть?

  40. Работник
    20 January 2014 at 23:44

    Буду безумно благодарен, если подскажите, где найти такое руководство, что бы все расписанно по пальцам было, а то с Selenium IDE ни капли не знаком… Очень по работе надо автоматом одной цифрой куча полей на страницах в браузере заполнять, заколебывает клацать по сто раз Вставить…

  41. Helen
    4 February 2014 at 16:09

    Здравствуйте! Друзья, помогите..Может кто знает ответ на вопрос: Если какой-то инструмент поиска картинок с урл (началом) одинаковым, но концами разными?
    Т.е. как задать условие грубо говоря чтобы при поиске картинок, он искал только заданное начало урл.
    заранее спасибо

  42. Обычный юзер
    4 February 2014 at 16:50

    Добрый день, скажите а selenium ide может находить ошибки которые выползает в консоле, ну скажет просто выдать алерт о наличии ошибки?

  43. Inna
    4 March 2014 at 16:23

    Добры день) у меня есть проблема: можно ли прикрепить к тест-кейсу в selenium ide файл который будет содержать н-ое кол-во имейлов, что бы каждый раз при запуске теста для проверки регистрации, автоматически подставлялся новый имейл?

    Спасибо

    • 4 March 2014 at 16:54

      Нет.

      Генерировать их перед запуском каждого теста не проще ли будет? Это можно сделать одной строчкой.

      • nataly
        29 April 2014 at 13:46

        Добрый день! А можно, пожалуйста, по-подробнее? Мне необходимо, чтобы в форму регистрации каждый раз вводились новые адреса с разными доменами.

  44. Alex
    26 March 2014 at 15:19

    Добрый день, при запуске тестов из коммандной строки на селениум сервере, где есть “while” вываливается ошибка “Unknown command: ‘while'”. А если запускаю через интерфейс IDE то ошибки такой нет. Как можно обойти или надо убирать все while?

    • 26 March 2014 at 15:34

      Команда while у Selenium не является базовой, она принесена с расширением https://github.com/davehunt/selenium-ide-flowcontrol

      Плагин этот подключается, когда вы загружаете Selenium IDE.

      На сервере этой шняги нет, соответственно, все “циклы” просто не работают.

      Или придумайте, как загружать это расширение в сервер Selenium, или придется все while удалить, или же тесты нужно будет писать на каком-нибудь языке программирования (вообще другой подход).

      • Alex
        26 March 2014 at 15:55

        спасибо! команда “sendkeys” вроде бы изначально в IDE идет, но из командной строки та же unknown ошибка. я не понимаю на что ее можно поменять в моем случае, есть поле автокомплит, командой sendkeys я посылаю в него 1, на что вываливается список, из которого я уже селектом могу выбрать значение. пробовал type с 1, ничего не получается. подскажите, если знаете, как обойти этот sendkeys, чтобы из командной строки запускаемо было?

  45. Sergey
    30 June 2014 at 17:10

    Добрый день!
    Есть ли в Selenium IDE функция округления? Пробовал использовать функцию toFixed(), но она местами некорректно работает.
    Заранее спасибо.

  46. 10 July 2014 at 18:47

    Добрый день, Алексей! Помогите пожалуйста в решении проблемы в Selenium IDE.
    После успешной регистрации, не могу пройти по активационной ссылке, пришедшей на почту. Вот и сам тесткейс:

    open
    https://mail.yandex.ua/neo2/#inbox

    click
    css=span.b-messages__firstline

    clickAndWait
    http://“активационная ссылка” здесь и стопает тест, выводит сообщение “not found”.

    clickAndWait
    link=Сервис

    Заранее спасибо!

    • 11 July 2014 at 13:47

      Если бы у ссылки было постоянное название, вроде “NazvanyeSsilky”, тогда
      click | link=NazvanyeSsilky

      Иначе используйте абстракции вроде
      click | //a[contains(text(),'activateYourProfile')]

      если, конечно, внутри ссылки находятся слова “activateYourProfile”.

  47. 11 July 2014 at 14:36

    Спасибо за ответ! Я прошу прощения, попробовала, но ошибка осталась:

    click | //a[contains(text(),’http://mysite.com/index.php?id=46′)] результат: not found
    или
    click | //a[contains(=,’46’)] | | результат: Invalid xpath [4]: //a[contains(=,’46’)]
    вариантов перепробовано много было.

    Подскажите, что я не так делаю?

    • 11 July 2014 at 14:56

      Вы слишком прямо принимаете указания.

      ‘Contains’ используется для тех случаев, когда в ссылке есть значения, которые постоянно меняются (тот же id),

      //a[contains(=,’46’)] |- это явная ошибка, надо //a[contains(text(),’46’)]

  48. 11 July 2014 at 17:40

    Ситуация прояснилась, ссылка задана правильно, ошибки нет. Но Селениум вместо ссылки, упорно видит картинку почты. Та же ситуация на mail и на gmail. Вы никогда с подобным не сталкивались?

    • 11 July 2014 at 18:56

      Сталкивался, конечно же. Единого решения не существует. Стукнитесь ко мне в скайп, завтра поговорим, если пересечемся.

Comment pages
  1. 28 August 2010 at 03:10
  2. 12 August 2011 at 17:48

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: