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

В рамках одного тест-кейса 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!’)

113 thoughts on “Давай зациклимся!

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

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

      Типа:
      /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. Можно ли реализовать цикл if?
    Например, если есть кнопка “Войти”, тогда нажимаем ее, иначе нажимаем на “Регистрация”?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. astenix на testitquickly.com

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

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

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

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

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

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

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

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

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

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

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

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

    open
    http://metelyky.blogspot.com/

    clickAndWait
    css=a.comment-link

    selectFrame
    comment-editor

    type
    id=commentBodyField
    post

    clickAndWait
    id=postCommentSubmit

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

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

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

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

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

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

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

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

  15. здравствуйте Алексей! подключаю файл 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]]
    заранее спасибо.

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

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

    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
    *****
    —————
    Задача вообще. Скопировать/сохранить всю температуру за определенный месяц в файл для дальнейшей обработки.
    // Начальство доверяет только "правильным" сайтам погоды

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

      Нет.

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

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

    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”

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

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

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

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

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

    1. Нет.

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

  23. Спасибо за ответ.
    Такой вариант к сожалению не подходит.
    Единственное вразумительное решение найденное на просторах интернета выглядит следующим образом:
    “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 ?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  30. День добрый
    Вопрос как посчитать количество элементов 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() ?

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

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

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

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

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

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

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

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

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

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

    Спасибо

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

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

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

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

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

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

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

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

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

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

    click
    css=span.b-messages__firstline

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

    clickAndWait
    link=Сервис

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

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

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

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

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

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

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

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

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

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

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

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

Leave a reply to Inna Cancel reply