Вкратце

О чем

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

Selenium IDE – член семейства open-source инструментов для тестирования веб-приложений Selenium.

Выглядит и работает как расширение Firefox. Таит в себе множество мощных возможностей.

Младший брат Selenium RC. В отличие от старшего брата, может быть использован для записи простых, прямолинейных автоматизированных тестов без умения программировать – достаточно знать принципы работы html-разметки.

Обычно используется как мелкая утилитка для записи кликов и действий в окне браузера. Генерируемый им код перетаскивается в (тот же самый ) Eclipse и обрабатывается по нуждами и заботам продвинутого тестировщика-программиста.

Но может работать и самостоятельно с большим КПД.

В общих чертах, начать работать с Selenium ВООБЩЕ можно, обучившись работать с Selenium IDE.

Темные стороны Selenium IDE

  • Осторожно, но непременно превращает функциональных тестировщиков в автоматизаторов и переносит их на другие уровни тестирования и зарплат.
  • Затягивает, разрушает семьи и запасы чая.
  • Не умеет напрямую работать с логикой “а вот если, то тогда“. Однако дело вполне поправимое.
  • При бестолковом обращении зомбирует неосторожных тестировщиков и задешево продает их души Скайнету через eBay.

Регулярность выпусков

Нерегулярно.

Вопросы и ответы

В меру способностей отвечу на любой вопрос, касательный работы с Selenium, но для этого мне нужно:

– видеть код страницы, с которой нужно взаимодействовать,

– видеть код скрипта, который был написан,

– знать алгоритм действий, которые нужно автоматизировать.

Для этого следует прислать на astenix@testitquickly.com ваш вопрос в сопровождении двух файлов, в которых находятся код страницы и код скрипта.

“Отдельность” файла необходима для того, чтобы можно было видеть отступы и понимать, какой элемент куда вложен.

Отвечу, как только разберусь в вопросе и коде.

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

  1. Олег
    21 January 2011 at 18:43

    Алексей,

    Можете мне подсказать по Selenium IDE. Есть следующая задача.
    Имеется некое подобие формы для авторизации: http://darom.kharkov.ua/copy/login.php
    После ввода логина и пароля, результат авторизации (прошла успешно/не прошла) отображается на новой странице. На новой странице есть ссылка Back, на которую необходимо нажать средствами Selenium IDE. Но при открытии новой страницы Selenium остается на предыдущей (login.php). Каким образом заставить селениум искать необходимый объяект на новой странице. AssertTitle и SelectWindow не помогли. Заранее благодарен.

    • 21 January 2011 at 18:56

      Ну, сложно у вас всё.

      На главной странице сайта у вас после клика по кнопке “Вход” с пустями полями “Имя” и “Пароль” словно ничего не происходит, страница просто обновляется, и в браузере кнопка “Назад” неактивна. Ни спасибы, ни предупреждений.

      Вообще для передвижения на предыдующую страницу у Selenium есть команда “goBackAndWait”.

      Если есть сложность с фокусом на нужном окне – есть команда ‘windowFocus’. Вообще определение окон в Selenium очень зависит от приложения – иногда эта задача сводит с ума целые отряды тестировщиков 🙂

      Относительно указанной формы: у меня после нажатия на кнопку ‘Authorize’ открывается новая вкладка (браузер принудительно открывает попапы в новых вкладках), на которой кнопки ‘Back’ нет.

      Я закрыл эту новую вкладку командой ‘close’ в Selenium IDE.

      Для эксперимента разрешил браузеру открывать все новые окна и поп-апы. Команда ‘close’ закрыла и открывшееся после нажатия на ‘Authorize’ окно.

      Уточните про “На новой странице есть ссылка Back” – может, я что-то не то делаю?!

  2. 24 January 2011 at 19:18

    То, что открывается при попытки авторизации через указанную форму – это не pop-up, а полноценное окно, которое через джаваскрипт открывается функцией window.open. FF его открывает в новой вкладке, а IE (у меня 8й) – в новом окне.

    И вот в этом окне вместе с информацией про результат авторизации есть ссылка Back (не кнопка), которая ведет обратно на форму авторизации. Моя задача кликнуть эту ссылку средствами Selenium.

    Что должно произойти. Когда я пытаюсь не корректно авторизироваться по указанной форме (это не главная страница сайта. Она использует какой-то движок, к которому я не имею отношения), окрывается страница incorrect.html. Она и сожержит ссылку.

    В Selenium я делаю следующее:
    open|http://darom.kharkov.ua/copy/login.php|
    type|log|incorrectLogin
    type|pass|incorrectPassword
    clickAndWait|authorize|
    в этот момент открывается страница incorrect.html. Дальше, по идее я должен был сделать
    click|link=Back
    и быть счастлив, но Selenium не нахождит такого объекта, потому, как все еще находится на странице login.php. пробовал сделать
    selectWindow|Authorization is incorrect|
    но не находится это окно

    Вот в этом у меня вопрос. Как мне найти это окно.

  3. 24 January 2011 at 19:30

    # [info] Executing: |windowFocus | Authorization is incorrect | |
    # [info] Executing: |click | link=Back | |
    # [error] Element link=Back not found
    # [error] locator not found: Authorization is incorrect

    Для использавания windowFocus в качестве target необходимо передать title окна или какой-то другой параметр?

    • 31 January 2011 at 11:23

      Иногда title.

      Попробуйте еще команду selectWindow, и внимательно посмотрите справку к ней:

      Arguments:

      * windowID – the JavaScript window ID of the window to select

      Selects a popup window using a window locator; once a popup window has been selected, all commands go to that window. To select the main window again, use null as the target.

      Window locators provide different ways of specifying the window object: by title, by internal JavaScript “name,” or by JavaScript variable.

      * title=My Special Window: Finds the window using the text that appears in the title bar. Be careful; two windows can share the same title. If that happens, this locator will just pick one.
      * name=myWindow: Finds the window using its internal JavaScript “name” property. This is the second parameter “windowName” passed to the JavaScript method window.open(url, windowName, windowFeatures, replaceFlag) (which Selenium intercepts).
      * var=variableName: Some pop-up windows are unnamed (anonymous), but are associated with a JavaScript variable name in the current application window, e.g. “window.foo = window.open(url);”. In those cases, you can open the window using “var=foo”.

      If no window locator prefix is provided, we’ll try to guess what you mean like this:

      1.) if windowID is null, (or the string “null”) then it is assumed the user is referring to the original window instantiated by the browser).

      2.) if the value of the “windowID” parameter is a JavaScript variable name in the current application window, then it is assumed that this variable contains the return value from a call to the JavaScript window.open() method.

      3.) Otherwise, selenium looks in a hash it maintains that maps string names to window “names”.

      4.) If that fails, we’ll try looping over all of the known windows to try to find the appropriate “title”. Since “title” is not necessarily unique, this may have unexpected behavior.

      If you’re having trouble figuring out the name of a window that you want to manipulate, look at the Selenium log messages which identify the names of windows created via window.open (and therefore intercepted by Selenium). You will see messages like the following for each window as it is opened:

      debug: window.open call intercepted; window ID (which you can use with selectWindow()) is “myNewWindow”

      In some cases, Selenium will be unable to intercept a call to window.open (if the call occurs during or before the “onLoad” event, for example). (This is bug SEL-339.) In those cases, you can force Selenium to notice the open window’s name by using the Selenium openWindow command, using an empty (blank) url, like this: openWindow(“”, “myFunnyWindow”).

  4. victoria
    29 January 2011 at 21:54

    Добрый день,

    Позволю себе вас спросить, надеюсь, что поможете.

    У меня такая задача. Я сижу за компьютером и занимаюсь любыми своими делами. А в это время скрипт рефрешит заданную страничку раз в 5 минут и, если на странице появляется заданная информация, то меня об этом уведомляют. Т.е. скрипт работает как бы в фоновом режиме, никак меня не отвлекая и не мешая. Меня интереует только появившаяся на странице информацию, на которую я отвлекусь.

    Можно такое реализовать с помощью Селениума? Сама я пока покопалась в нем, даже элементарно прорефрешить в фоновом режиме страницу не нашла как сделать…

    И если нельзя, может сможете подсказать какие альтернативы?

    Спасибо заранее!

    • 31 January 2011 at 11:19

      Конечно, можно.

      1) Добавить в Selenium IDE расширение – https://siderulezzz.wordpress.com/2010/06/15/6/

      2) По примеру https://siderulezzz.wordpress.com/2010/08/28/7/ написать нужный код “при условии наступления события”.

      3) Указать паузу длинной в 5 минут в миллисекундах.

      1 мин = 60 сек = 60 000 милисек.
      5 мин = 300 000 млск.

      4) Вот мой код https://docs.google.com/document/pub?id=13KLwPeMjtbTIVK6hUOc7UMYxr0o2Cn3VRZ2b17hD-yo

      Создайте в Selenium IDE новый тест, откройте его вкладку Source и вставьте мой код туда.

      Что он делает:

      – Указать искомое слово, которое будет сохранено в переменную expectedWord. Нужное слово впишите сами, я для теста вписал слово “Король”.
      – Открыть страницу с новостями. URL укажите сами, я для теста открыл страницу с новостями.
      – Дождаться полной загрузки страницы.
      – Проверить наличие искомого слова на странице.
      – Если искомое слово есть на странице – выдать алерт и остановиться.
      – Если слова нет – подождать пять минут, убить все куки, обновить страницу, проверить наличие искомого слова.
      – Если искомое слово есть на странице – выдать алерт, остановиться.
      – Если слова нет – подождать пять минут, убить все куки, обновить страницу, проверить наличие искомого слова.
      – Если слово есть – алерт, остановиться.
      – Если слова нет – снова ждать пять минут, убивать все куки, обновлять и проверять – так до тех пор, пока на странице не появится нужное слово.

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

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

  5. Victoriya
    21 February 2011 at 09:08

    подскажите и мне ,пожалуйста,ксли это возможно
    тестирую страницу
    на ней 4 вкладки users,roles,templates,sources
    каждую вкладку можно add,edit и тд
    вопрос вот в чем
    при тестировании 1 вкладки,что появляется по умолчанию съоду на странице все нажимается нормально
    дальше идут косяки
    чуть ниже названий вкладок кнопки + add X
    + получается нажать и что-то добавить,все остальное пишет element not found
    если же перейти например на вкладку роли,то там даже + не нажмется
    пишет не найден элемент

    • 21 February 2011 at 11:26

      Виктория, понятна проблема, но совершенно не понятно, как это реализовано, поэтому решить проблему удаленно невозможно.

      Идентифицировать элементы можно умой способов. Вам стоит посмотреть http://www.autotestgroup.com/ru/blog/85.html

  6. Korivn
    21 February 2011 at 16:59

    Помогите с кириллицей в file logging к selenium IDE. в полученном файле лога русских символов нет! Игрался с кодировками в настройках ff и seleniuma не помогло, так же юзал конечный файл через notepad ++? тоже играл с кодировками результат = 0, помогите плиз!

  7. Yana
    2 March 2011 at 21:23

    Алексей, подскажите, пожалуйста, как можно использовать Selenium для load testing? И можно ли вообще?
    Наша компания занимается разработкой интернет-магазинов и самый щекотливый момент – нагрузочное тестирование checkout’а… Как убедиться, что в самые пиковые моменты он выдержит сотню юзеров?
    Очень нужно услышать от Вас совет.

    • 2 March 2011 at 23:41

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

      Можно запустить на двух сотнях машин по одному браузеру, в котором selenium будет что-то делать вроде бы как одновременно. Но при этом нужно будет реал-тайм контролировать состояние сервера и всех машин, чтобы убедиться в том, что нагрузка действительно идет в запланированном режиме – а это сложно. Плюс где-то надо раздобыть две сотни машин (можно юзать cloud computing, конечно). И после всего этого дела не будет самого интересного – статистики в цифрах и графиках.

      А также самое важное: в ходе нагрузочного тестирования нагрузка подается неравномерная и на разных промежутках времени. Например, сперва эмулируем двести пользователей на протяжении десяти секунд. Справился сервер? Теперь запускаем нагрузку в тысячу пользователей на протяжении десяти секунд. Теперь эмулируем пятьсот обращений на протяжении пяти минут (300 секунд). Справился сервер? А теперь дадим ему неравномерную нагрузку, вставив рэндомные паузы между обращениями. Дышит?

      Селениум подобного подхода (столько-то обращений на таком-то временном промежутке) обеспечить не может. Его, очевидно, используют в гуглах только после того, как все проверенно обычными средствами, для еще большей эмуляции достоверности неравномерной нагрузки. Типа, запустили толпу обращений В ПРИНЦИПЕ, бесконтрольно, и зашли через ssh в терминале на атакуемый сервер, запустили там htop (unix рулез) и смотрим на графики…

      В мире open-source для эмуляции нагрузок используется JMeter – весьма грамотная утилита, если сперва научиться ею пользоваться, там очень много неочевидных нюансов.

  8. Jeka
    4 August 2011 at 13:14

    Добрый день, я запускаю тесты у меня все правильно работает, но как только я запускаю тесты на дженкинсе, то тесты проходят, но после каждого теста остается браузер с пустой страничкой (about:blank)и когда проходят много тестов, то количество браузеров накапливается, как мне побороть это?

    • 4 August 2011 at 13:46

      После каждого теста закрывайте браузер.

      Можно использовать testNG и указывать @BeforeMethod (открывать браузер) и @AfterMethod (закрывать браузер).

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

  9. Александр
    9 August 2011 at 04:35

    Здравствуйте Алексей.
    Подскажите пожалуйста как сделать задержку на загрузку файла
    есть такой текст:
    type | FileUploader | \\путь\\
    Какой командой можно затормозить загрузку чтобы фотография успела залиться?
    Таких подряд 4-5 FileUploader*ов тест не успевает залить все фотографии и заканчивает свою работу

    • 9 August 2011 at 09:15

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

      type | FileUploader | \\путь\\
      click | \\кнопка Upload\\ |
      waitForElementPresent | \\идентификатор элемента, который появится после завершения загрузки \\ |

      В каких-то случаях можно вместо click написать clickAndWait, но эта команда ожидает перезагрузки всей страницы после примененного действия, и в случае AJAX очевидно неприменима.

      Например, в Gmail после окончания загрузки фотографии к письму появляется аж три элемента, которые можно идентифицировать:
      – иконка скрепки,
      – чекбокс с галочкой,
      – название прикрепленного файла-изображения в виде линка.

      А во время загрузки появляется прогресс-бар и линк “Отменить”. Можно было бы привязаться к исчезновению элемента “Отменить”: waitForElementNotPresent, однако конкретно в случае Gmail после его исчезновения иногда происходит принудительная перезагрука области текста письма (срабатывает автосохранение черновика в Gmail, поэтому поведение браузера сложно предсказать).

      Учтите, что у команд типа waitFor есть определенный таймаут (обычно он настраивается в Options > Options > Default timeout value of recorded command. У меня там всегда стоит 90000 🙂 Если время ожидания превысит этот порог, то Selenium объявит прогон вашего скрипта неудачным.

  10. Александр
    9 August 2011 at 09:58

    Алексей Лупан :
    waitForElementPresent, если после окончания загрузки на странице появляется какой-то элемент, который можно четко идентифицировать.
    type | FileUploader | \\путь\\
    click | \\кнопка Upload\\ |

    Спасибо Алексей, проблему решил простой командой pause на 5000 ms. После каждого FileUploaderа стоит команда pause с target = 5000
    Идеальное для меня поведение – за 5 сек фото загружается и начинается загрузка следующего

    Чем не вариант? Чем этот вариант может быть хуже предложенного вами waitForElementPresent?

    По мне так все очень просто оказалось

    • 9 August 2011 at 10:43

      Вариант плох тем, что время отклика браузера зависит от многих факторов, и обычно это время “пляшет”.

      Вот прямо сейчас вам достаточно ждать пяти секунд, и одно фото грузится за три секунды. Через час сервер будет загружен чуть больше, чем обычно, и он будет обрабатывать ваши запросы медленнее. Скажем, семь секунд. Ошибки нет, все правильно обрабатывается, приложение всего лишь слегка затормозилось, но ваши тесты начнут стабильно падать.

      Сперва вы будете подбирать длительность паузы наугад, потом будете спрашивать на форумах “Как вычислить время отклика приложения?”, а затем у вас что-то прояснится, и вы все-таки перейдете на использование waitFor команд 🙂

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

  11. Александр
    9 August 2011 at 10:51

    Алексей Лупан :
    Вариант плох тем, что время отклика браузера зависит от многих факторов, и обычно это время “пляшет”.

    Сделал с waitForElementPresent тоже довольно просто, но разница в скорости очевидная. Остановимся на этом варианте тогда.
    Спасибо большое, тесты немного преобразились.

  12. Andrey
    12 August 2011 at 16:28

    Здравствуйте. Мне необходимо автоматизировать тест-кейс по прохождению тестового задания. Действия заключаются в выборе варианта ответа и нажатии кнопки перехода к следующему вопросу. Выбор вопроса осуществляется посредством команды click, а переход при помощи команды clickandwait. В результате возникает такая ошибка – за один вопрос выбирается несколько ответов http://clip2net.com/s/16JeJ. Естественно тест не проходится до конца. Поставил везде вместо click – clickandwait. Но теперь после нажатия на ответ вопроса долго грузится и выдает ошибку об истечении времени. В результате, поставил паузы, но как было сказано выше, этот способ слишком зависим от производительности. Можно ли здесь использовать команду waitfor?

    • 12 August 2011 at 17:01

      clickAndWait подразумевает, что после клика произойдет перезагрузка страницы.

      То же самое можно написать так:
      click | element
      waitForPageToLoad | тут или явно указываем количество миллисекунд, или оставляем это на откуп глобальной настройки (в Options прячется).

      Вы можете последний шаг тоже написать как click, а затем написать ожидание до появления того, что находится на следующей странице:
      или waitForElementPresent
      или waitForTextPresent

      Я не совсем понял причину возникающей ошибки. Проясните, плиз.

      • Andrey
        15 August 2011 at 09:45

        Если честно, я сам не понимаю причину ошибки. По-идее, после выбора варианта ответа перезагрузка страницы не происходит, поэтому команда клик должна срабатывать нормально и иногда тест действительно проходится нормально. Но чаще всего сбоит, так как на одном шаге происходит выбор нескольких вариантов ответа. Почему так происходит – понять не могу.

  13. Andrey
    12 August 2011 at 17:08

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

    • 12 August 2011 at 17:23

      Конечно.

      Вот две команды:

      1) storeExpression | javascript{‘tester_’+ Math.floor(Math.random()*1000) + Math.floor(Math.random()*1000)} | userLogin |

      2) echo | ${userLogin} |

      В итоге: каждый раз будете получать логин типа “tester_99741” или “tester_374742” или что-то еще, вариаций циферках будет неимоверное множество. Переменную ${userLogin} я использую на протяжении всего дальнейшего теста.

      PS “Эхо” тут представлено только для того, чтобы в логе отобразилось содержимое переменной.

    • 12 August 2011 at 18:02

      Или вот такой вариант:

      storeExpression | 23 | updateNumber
      storeEval | ${updateNumber}+1 | updateNumber
      echo | ${updateNumber} |

      Теперь в переменной updateNumber будет цифра 24.

      То же самое, но написано на чистом javascript:

      storeExpression | 23 | updateNumber
      storeEval | javascript:{parseInt(storedVars[‘updateNumber’]) + 1} | updateNumber
      echo | ${updateNumber} |

      • sas4us
        29 November 2011 at 19:30

        Здравствуйте Алексей.
        storeEval | ${updateNumber}+1 | updateNumber

        не работает. Выдает ошибку:

        [error] Threw an exception: missing ; before statement

        Подскажите как лучше организовать счетчик, который каждый раз увеличивается на 1

        • 29 November 2011 at 21:37

          У вас, походу, в переменной не цифра, а какая-то буква появилась.

          Работает безупречно:
          storeExpression | 151 | updateNumber
          storeEval | ${updateNumber}+1 | updateNumber
          echo | ${updateNumber}

          Выдаст ошибку:
          storeExpression | 151q | updateNumber
          storeEval | ${updateNumber}+1 | updateNumber
          echo | ${updateNumber}

      • sas4us
        29 November 2011 at 23:46

        Да спасибо Ваш совет помог!

        Но сравните Ваш пост #27 и #29
        я по невнимательности переставил местами… updateNumber и 23!
        (storeExpression | updateNumber | 23) – неверно
        (storeExpression | 23| updateNumber ) – верно
        Еще раз спасибо!

      • Андрей
        17 June 2014 at 15:56

        Помогите со следующим номером в selenium ide
        Пробую как и описано

        storeExpression | 20777777820377 | updateNumber
        storeEval | ${updateNumber}+1 | updateNumber
        echo | updateNumber

        В логе выводит следующее
        [info] Executing: |storeExpression | 20777777820377 | updateNumber |
        [info] Executing: |storeEval | ${updateNumber}+1 | updateNumber |
        [info] script is: 20777777820377+1
        [info] Executing: |echo | updateNumber | |
        [info] echo: updateNumber

        • 17 June 2014 at 16:50

          Хм.

          Если всё точно так, как написано, то должно работать однозначно.

          Например, у меня вот:

          [info] Executing: |storeExpression | 20777777820377 | updateNumber |
          [info] Executing: |storeEval | ${updateNumber}+1 | updateNumber |
          [info] script is: 20777777820377+1
          [info] Executing: |echo | ${updateNumber} | |
          [info] echo: 20777777820378

          Давайте сравнивать.

          У вас в последнем шаге сообщается, что в переменную updateNumber почему-то вписалось слово ‘updateNumber’. Дальше понятно?

  14. Andrey
    15 August 2011 at 11:50

    Здравствуйте, а что может значить такая ошибка:
    [error] Unexpected Exception: message -> illegal character, fileName -> chrome://selenium-ide/content/selenium-core/scripts/selenium-api.js, lineNumber -> 2530, stack -> (“javascript{var text = \u201C\u201D; var possible = \u201Cabcdefghijklmnopqrstuvwxyz\u201D; for( var i=0; i SyntaxError
    Это я пытался осуществить генерацию случайного имени.

    • 15 August 2011 at 12:19

      Хех…

      Ошибка в javascript, но я хз, в чем имено.

      Покажите ваш код.

  15. Andrey
    15 August 2011 at 14:23

    Ошибку выдает вот на такую команду:
    javascript{var text = “”; var possible = “abcdefghijklmnopqrstuvwxyz”; for( var i=0; i < 5; i++ ) text += possible.charAt(Math.floor(Math.random() *possible.length));}

  16. Aleks
    26 August 2011 at 11:22

    Доброго времени суток.
    Алексей, скажите запустить selenium в фоновом режиме тестов на java сборке – это реально?
    PS: При запуске тестов, не запускаются браузеры. Тест проходит в фоновом режиме, с выдачей результатов в любой из доступных потоков.
    Заранее спасибо.

    • 26 August 2011 at 12:22

      А смысл?

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

      Посмотрите на HtmlUnit – эта штука эмулирует браузер, работает непосредственно в консоли. Синтаксис тестов в HtmlUnit очень похож на то, что делается в Selenium.

      • N-Drew
        13 October 2011 at 18:04

        Алексей, спрошу уже на ином уровне.

        Имеется Xpath элемента, а точнее ячейка таблицы, необходимо проверить, что там текст “ОК”.
        verifyText требует только текст, а как же написать, чтобы проверять только 1 элемент по Xpath ?

        • 13 October 2011 at 18:15

          Давайте быть точнее.
          verifyText – проверяет определенный элемент, и требует указания локатора.
          verifyTextPresent – проверяет наличие текста вообще, не учитывая элементы, в которых этот текст находится.

          Вот страница.

          Там есть заголовок ‘<h1>How do I setup a test cycle?</h1>’.

          Можем проверять текст в этом элементе несколькими способами:

          1)
          <td>verifyText</td>
          <td>//h1</td>
          <td>How do I setup a test cycle?</td>

          2)
          <tr>
          <td>verifyTextPresent</td>
          <td>How do I setup a test cycle?</td>
          <td></td></tr>

          Проверим ваш случай: есть ячейка с текстом “ОК”. Что именно вам нужно проверить? То, что именно в этой ячейке есть этот текст?

          1) verifyTextPresent отпадает.

          2) Можно использовать verifyText.

          3) Можно использовать verifyElementPresent

          <tr>
          <td>verifyElementPresent</td>
          <td>//h1[contains(text(), ‘How do I setup a test cycle?’)]</td>
          <td></td>
          </tr>

          • N-Drew
            13 October 2011 at 18:29

            В моем случае я думаю определить , что поле на странице есть текст ОК, а затем проверить еще одно расположение. Там тоже должен быть ОК.
            На странице в тексте полно этих ОК, поэтому просто определить есть ли на странице ОК не прокатит, нужно именно оперделенный элемент, Xpath которого /html/body/table/tbody/tr[2]******* , тем более запустить несколько проверок не получится, оно верхний ОК просто находит.

            И еще:
            verifyText //h1 How do I setup a test cycle?

            насколько я вижу – //h1 в вашем куске кода это поиск в любом месте страницы ?
            Возможно ли указать более определенный путь?

            • 13 October 2011 at 18:31

              //h1 – это прямое указание на то, что искать нужно именно тэг ‘h1’ (это заголовок), затем все остальное.

              Ну, давайте искать оперделенный элемент 🙂 Где можно посмотреть на код страницы?

              • N-Drew
                13 October 2011 at 18:43

                http://www.chemport.ru/pertable/

                Например проверить что по Xpath /html/body/noindex/div/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr[2]/td
                содержится именно I

                У меня очень похоже все. Этих элементов, а меня интересует именно в этом месте.

                • 13 October 2011 at 18:47

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

                  Но если таблица не будет меняться – используйте такие указатели, делов-то.

  17. Aleks
    26 August 2011 at 14:21

    Алексей Лупан :
    А смысл?
    Селениум для того и предназначен, чтобы эмулировать работу двуногих в браузере.
    Посмотрите на HtmlUnit – эта штука эмулирует браузер, работает непосредственно в консоли. Синтаксис тестов в HtmlUnit очень похож на то, что делается в Selenium.

    Спасибо.

  18. N-Drew
    12 October 2011 at 14:20

    Алексей, подскажите.
    Имеется на странице табличка, в которой в одном из столбцов находится ссылка, нужная мне, содержащая слово ‘info’.
    Сложность для меня в том, что нужно пройти по ссылке, проверить там наличие слова, если нет его то вернутся к таблице и проверить ссылку из 2 строки.

    Как я вижу решение:
    1) поиск ссылки с куском info
    2) переход по ссылке 1
    3) проверка условия
    4) возврат
    5) переход по ссылке 2

    и т.д. Теряюсь в синтаксисе… Не знаю как именно это организовать….

    • 12 October 2011 at 16:04

      А как вы это уже организовали?

      Что сделали?

      Простой способ:
      click | link=Info
      verifyTextPresent | ‘нужный текст’
      goBack
      дальше переход по ссылке 2 и проверки.

      В итоге вы получите список шагов, в которых будут “красные” результаты проверки verifyTextPresent.

      Расписывать тут условие “Если” не вижу необходимости. Переходим по ссылке, и текста нет – дальше что делать? Переходим по ссылке, и текст есть – дальше что делать?

      • N-Drew
        12 October 2011 at 16:17

        Если на открываемой странице есть 3 одинаковых слова *****testword**** то успешно завершаем, если нет, то goBackAndWait и проверяем вторую ссылку (она в следующей строке таблицы), пока не найдем 3 упоминаний слова.

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

      • N-Drew
        12 October 2011 at 16:29

        Забыл еще добавить, что ссылка не просто содержит слово Info. Нажимаю я на совершенно другое, просто в каждой ссылке из этой таблицы есть в адресе кусочек
        http://*info-details.action?**********
        Думаю это единственная возможность опознать как ссылку и нажать ее.
        Нашел еще тут в блоге небольшое описание
        в заметке “Пролистать страницы и найти нужное слово”
        пытаюсь адаптировать.

        • 12 October 2011 at 16:36

          Сообщите, если запоретесь.

          Предполагаю, что запарываться не придется, я вроде бы детально все расписал.

          • N-Drew
            12 October 2011 at 16:39

            Поясните пожалуйста конструкцию
            //*[contains(text(), ‘${userName}’)] которая в событии clickAndWait

            Я просто с Selenium IDE напрямую работаю а в командах его я таких подробностей пунктуации не нашел

            • 12 October 2011 at 16:45

              Найти любой элемент который содержит текст, ранее сохраненный в переменной ‘userName’. Сделать по нему клик и подождать полной загрузки страницы.

              • N-Drew
                12 October 2011 at 17:21

                [error] Element //*[contains(text(), ‘info-details.action’)] not found
                Вот что мне говорит IDE….
                Я правда ему влоб в clickAndWait это вставил в Target

  19. Irina
    29 November 2011 at 17:09

    Алексей, добрый вечер.
    Есть необходимость автоматизировать добавления картинок. Как это можно реализовать с помощью Selenium IDE ?

    • 29 November 2011 at 17:36

      Если есть возможность обратиться к полю, в котором указывается путь к картинке, и вставить в него текст (текст = путь к файлу с жесткого диска), тогда можно.

      1 Сохранить путь к файлу в переменную.
      2 Сфокусироваться на поле ввода.
      3 Сабмит.

      Если такой возможности нет – тогда никак.

  20. Irina
    30 November 2011 at 11:10

    Поля нет, только кнопка. Спасибо за ответ.

  21. 5 March 2012 at 11:20

    Доброго времени суток, Алексей!
    Есть проблемы с аплодом файлов – при запуске firefox в небезопасном режиме *chrome, и попытке вписать путь к файлу с помощью type – тесты проходят успешно, но сам файл не загружается.

    При запуске Selenium установлено какой профиль для firefox использовать.

    Пробовал настраивать user_pref у firefox но ничего не получилось.

    Можете подсказать как грамотно тестировать загрузку файлов на сервер?

    П.с. firefox 10, selenium2, файл находится на той же машине что и сервер.

    • 5 March 2012 at 12:16

      Хм.

      А если запускать браузер в опасном режиме, то все ок?

      Selenium IDE с загрузкой файлов не дружит в принципе, бо диалог выбора файла – это не бразуерная часть. То, что в некоторых случаях можно вставлять путь к файлу через type – это приятное исключение.

      Если очень свербить автоматизировать, то предложил бы загружать файлы на сервер не через браузер. Какая файлу разница, как он на сервере окажется…

      • 5 March 2012 at 12:56

        В опасном режиме тоже ничего не происходит!
        Дело в том что тесты записаны не с помощью IDE! А в NetBeanse на PHP.
        По всем мануалам режима *chrome – вроде должно хватать. Но ещё способ с изменением профиля для FF.

        Может вы сталкивались с настройкой профиля – а именно файла pref.js для запуска браузера для тестов? Ибо информации нашел я очень скудно!
        Есть статья – http://www.brokenbuild.com/blog/2007/06/07/testing-file-uploads-with-selenium-rc-and-firefoxor-reducing-javascript-security-in-firefox-for-fun-and-profit/
        вроде очень по теме но только мне непонятен пункт 3. Из-за этого ничего не получается!

  22. Dieselmanone
    12 April 2012 at 09:42

    Добрый день,Алексей.
    Подскажите пожалуйста, как заставить Selenium IDE кликать по ссылке, которая в свою очередь генерируется Ajax запросом(Есть список при наборе 3-х символов выводятся варианты выбора)



    • 12 April 2012 at 09:58

      Покажите исходник. На каком сайте?

    • Dieselmanone
      13 April 2012 at 12:04

      разобрался сам…Спасибо за отклик

      • 13 April 2012 at 12:31

        Я еще не приступал к расследованию.

        Как именно разобрались?

        • Dieselmanone
          16 April 2012 at 07:42

          Наверное самое глупое решение…
          В общем поставил
          keyDown локатор /40
          keyUp локатор /40
          keyPress локатор /13
          pause 1000
          и после этих не хитрых манипуляций селениум начал выбирать 1 – ое поле из выпадающего списка.

          • Art
            23 May 2012 at 16:47

            Можно поточнее как Вы это сделали? Так сказать кусок кода

  23. Dieselmanone
  24. Надежда
    18 April 2012 at 15:55

    Алексей, здравствуйте!
    Недавно начала разбираться с Selenium IDE и столкнулась вот с какой проблемой:
    В определенном месте сайта есть элемент, по умолчанию содержащий некоторый текст, который нужно изменить. Если изменения не произошло, поле считается незаполненным.
    Для начала XPath Checker -ом выявила для этого элемента сам локатор, он оказался весьма сложным, но все же.
    По этому локатору поставила проверку, что бы понять сработает ли такие определение и будет ли найден элемент с текстом на странице:

    verifyText
    xpath=id(‘jc-postForm’)/x:div[3]/x:div[1]/x:div/x:div/x:div[2]/x:div[2]/x:div/x:div[1]/x:span/x:span
    Название поста

    эта строка выполняется.

    далее пытаюсь записать в этот элемент новое значение:

    type
    xpath=id(‘jc-postForm’)/x:div[3]/x:div[1]/x:div/x:div/x:div[2]/x:div[2]/x:div/x:div[1]/x:span/x:span
    название

    эта строка тоже выполняется. Но проблема в том, что новое значение в этом элементе не появляется. Подскажите, пожалуйста, как быть?

  25. Nadezhda
    6 July 2012 at 15:41

    Добрый день!
    Я недавно начала осваивать Selenium IDE. Сейчас пробую сделать следующее: у меня есть несколько тестов с одинаковым началом. Чтобы не писать несколько раз одно и тоже я хочу это начало вынести в отдельный тест. Как мне сделать так, что бы селениум вначале запускал этот начальный тест(otkryt) в другом тесте, а потом остальные команды? Вот так не получается

    open /otkryt/
    clickAndWait css=p > input[type=”submit”]
    clickAndWait link=Minu okidoki

  26. Vadzim
    17 August 2012 at 09:56

    Подскажите как переключится между вкладками браузера?
    С условием того что страница имеет динамический title, который всегда содержит в себе слово “Заметки user01”, “Заметки user02” и т.д.

    Вопросы которые задавал Олег в этом посте, не смогли натолкнуть на подходящую мысль.

  27. 17 August 2012 at 13:17

    Как тогда быть, если мне необходимо работать со страницей таргет_бланк.

    Может быть есть какие-то обходы?

  28. 17 August 2012 at 16:50

    Решил задачу таким образом
    Создал сьют в котором 2 тест-кейса
    1-й выполняет все действия до открытия 2-й страницы и потом закрывает её.
    2-й кейс выполняет все действия на оставшейся открытой 2-й странице.

    Всё работает прекрасно

  29. alex
    10 September 2012 at 14:54

    Алексей, здравствуй. Подскажи, есть ли возможность извлечения из Selenium IDE данных, полученных при помощи локаторов, куда-нибудь вовне (например в файл)

    • 10 September 2012 at 15:22

      Когда-то был озабочен такой возможностью, со временем все отпало.

      Наверное, есть. Узнаете – ткните носом.

  30. Евгений
    11 September 2012 at 09:31

    Добрый день, Алексей! У меня такая проблема:
    есть страничка, на которой есть линки соц. сетей. Допустим мне надо проверить их работоспособность (то есть проверить, что при клике по ним открываются правильные группы в соц сетях, например при клике по лого фейсбука открывалась группа на фейсбуке, а не что либо еще).

    Вот отрывок кода:

    clickAndWait css=img.fb
    assertTitle “Детский мир” | Facebook

    Результат: требуемая страница открывается, но при проверке Title выдает, что он не совпадает с требуемым.
    Дело вот в чем: ссылка фактически открывается в новой вкладке и визуально становится активной, но Selenium думает, что он до сих пор находится на родительской странице и, соответственно, сравнивает с ее Title. Пробывал такие варианты:

    1) clickAndWait css=img.fb
    selectWindow “Детский мир” | Facebook
    assertTitle “Детский мир” | Facebook

    2) clickAndWait css=img.fb
    selectWindow http://facebook/detmir
    assertTitle “Детский мир” | Facebook

    3) clickAndWait css=img.fb
    windowFocusAndWile “Детский мир” | Facebook
    assertTitle “Детский мир” | Facebook

    4) clickAndWait css=img.fb
    windowFocusAndWile http://facebook/detmir
    assertTitle “Детский мир” | Facebook

    5) пробывал вставлять команды типа waitFor

    результат один и тот же – вкладка физически открывается, активна (перед глазами), а селена пишет – нет такой вкладки и все тут!

    П.С.: на некоторых форумах по селене читал, что она фактически не работает со вкладками. Так ли это? Или просто не так что-то делаю?

    • 11 September 2012 at 13:18

      Со вкладками Selenium IDE работать не умеет.

      PS “Пробывал” отныне и впредь пишите как “Пробовал” 🙂

      • Евгений
        11 September 2012 at 15:15

        спасибо за поправку, опечатка была, набирал быстро… касательно всего остального – даже если я в фф в настройках проставляю открывать ссылки не в новых вкладках, а в новых окнах ситуация не меняется – селена окна не находит, хотя оно открыто и я на него смотрю… может поможет вариант открывать ссылки в родительском окне? тогда как мне в селене прописать, чтоб она это делала?

  31. Евгений
    12 September 2012 at 10:08

    это понятно, но мне надо нечто немного другое:

    1. на сайте есть 2 ссылки
    вот отрывок кода:


    a href="http://www.facebook.com/detmir" rel="nofollow">
    /a>

    a href="http://vk.com/detmir" rel="nofollow">
    /a>

    мне необходимо:

    а) вытянуть из каждого a значения их href и

    б) открыть их поочередно в родительском окне.

    Так как если открывать их напрямую через clickAndWait css=fb.img и clickAndWait css=vk.img, то они откроются либо в новом окне, либо в новой вкладке и в обоих случаях селена ничего открытого не видит, думая, что находится на родительской странице.

    • Евгений
      12 September 2012 at 10:15

      например в selena web driver это реализовывается таким образом:
      driver.get(“http://internetka.in.ua”);
      WebElement link = driver.findElement(By.tagName(“a”));
      openInWindow(link.getAttribute(“href”));

      вот это мне надо реализовать в ide

      • Евгений
        12 September 2012 at 11:35

        я как обычно все усложнил и пытался добраться из Брянска в Москву через Пекин!!!

        Вот адекватное решение:

        verifyTitle
        Детские товары в Москве | детские игрушки в Москве – интернет магазин детских товаров и игрушек “Детский Мир”

        storeAttribute
        //html/body/div[2]/div/div/div/div/div/table/tbody/tr/td[2]/div/div/a@href
        A

        open
        ${A}

        verifyTitle
        "Детский мир" | Facebook

        goBackAndWait

        verifyTitle
        Детские товары в Москве | детские игрушки в Москве – интернет магазин детских товаров и игрушек “Детский Мир”

        storeAttribute
        //html/body/div[2]/div/div/div/div/div/table/tbody/tr/td[2]/div/div/a[2]@href
        A

        open
        ${A}

        verifyTitle
        Детский Мир – официальная группа

        goBackAndWait

        verifyTitle
        Детский Мир – официальная группа

        П.С.: Алексей, спасибо Вам, что мне помогали

    • 12 September 2012 at 11:46

      Так.

      Если у ссылки есть имя (например, ‘Click here’), тогда ее значение href добывается следующим образом:

      1
      storeAttribute | link=Click here@href | yourPeremennaya

      То есть, имя ссылки@имя ее атрибута, который следует сохранить.

      Если нужно будет сохранить не href, а title, то напишем link=Click here@title. К слову, сохранение title не всегда срабатывает 🙂

      2
      open | ${yourPeremennaya} |

      В переменной ‘yourPeremennaya’ (кстате, если будете так именовать переменные, не забудьте оторвать себе руки) будет сохранено все то, что таится в href упомянутой ссылки.

      Будьте внимательны:

      1. в переменной ‘yourPeremennaya’ будет сохранен обычный текст. То есть, если в ссылке будет отсутствовать указание протокола (a href=”forgot_password.php”), то открывать будет нечего. Придется к переменной отдельной командой присоединить текст с http и так далее (storeExpression | http://yoursite.com/${yourPeremennaya} | yourPeremennaya )
      2. Если у ссылки, которую вы хотите сохранить, нет своего имени (бывает), то придется обращаться к ней различнейшими путями, через пень-колоду и xpath. Дело может оказаться нестабильным.
      • Евгений
        12 September 2012 at 12:40

        Еще раз благодарю Вас, Алексей, за помощь!

  32. Иван
    5 October 2012 at 16:13

    Алексей, подскажите пожалуйста, какой командой заставить селениум ожидать на любое действие пользователя (на странице выбрать любой элемент).

  33. Иван
    5 October 2012 at 17:17

    Пример: мне нужно выбрать элемент, который меняется, тоисть не получится автоматизировать выбор. Нужно этот элемент выбрать ручками. Нужно перед выбором этого элемента приостановить тест и продолжить его только после клика мышкой на элементе.

  34. Иван
    5 October 2012 at 17:20

    была бы команда waitForClick – было бы проще))) Еще где-то слышал что можно придерживать тест, а после клика на страничке продолжать его.

    • 5 October 2012 at 19:11

      getEval ¦ alert(‘Все остановилось, пока не нажмем на ОК’)

  35. Nadezhda
    26 October 2012 at 15:37

    Алексей, у меня есть первая страница сайта, на которой очень много ссылок. Мне надо проверить, что все ссылки рабочие. Как это записать? Просто при записывание нажимать на ссылку и на открывшейся странице делать verifyTitle? А если ссылок очень много, то такая работа займет много времени. Как можно оптимизировать процесс записи скриптов?

  36. Mar
    22 November 2012 at 14:34

    Здравствуйте Алексей, у меня проблема, селениум начал изучаю совсем недавно и вот не могу понять можно ли строку сохранять в переменную.
    В справке написано
    store | Edith Wharton| name
    storeEval | storedVars[‘name’].toUpperCase() |uc
    Но у меня появляется ошибка
    Threw an exception: illegal character
    Возможно нужно расширять как то селениум. Если да подскажите пожалуйста как это правильно делать ?
    Спасибо.

    • 22 November 2012 at 15:10

      ‘name’ = у вас ординарные кавычки – фигурные.

      Удалите их, и пропишите вручную.

      • Mar
        22 November 2012 at 15:28

        Спасибо, у меня еще один вопрос, если можно .
        Есть url http://example.com.ua/brochures/success?sid=31
        Есть возможность определить два последних символа 31 и сохранить их в переменную ?

        • 22 November 2012 at 16:29

          parseInt(storedVars[‘actualUsers’].replace(/[^\\d]/gim, “”)) – это просто вырежет из содержимого переменной все символы, кроме циферок. Так пойдет?

          • Mar
            22 November 2012 at 16:43

            пробовала этот пример вот так

            storeLocation
            urlvalue

            echo
            ${urlvalue}

            – сначала сохранила и вывела дабы убедится что урл в переменной ( тут все норм)
            Но функция storeEval выдала ошибку [error] Threw an exception: illegal character:

            storeEval
            parseInt(storedVars[‘url’].replace(/[^\d]/gim, “”))
            c

            echo
            ${c}

            Извините , что опять беспокою

            • 22 November 2012 at 17:01

              Кавычки при копировании с блога превращаются в [грубое ругательство] фигурные. Selenium с фигурной дрянью, разумеется, не работает.

              Перепишите все кавычки руками своими.

              • Mar
                22 November 2012 at 17:17

                Переписывала. но не помогло. может нужно что то в core extensions добавить?

                • 22 November 2012 at 22:47

                  Все кавычки?

                  Там есть ординарные, и есть двойные.

                  • Mar
                    23 November 2012 at 11:34

                    упс. у меня другая ошибка была. [error] Threw an exception: perseInt is not defined. Потому кажется нужно поменять что то в опциях . если можно скажите какие у вас нстройки в селениуме. может файл нужно подгрузить. он не воспринимает javascript у меня…буду безумно благодарна.

                    • 23 November 2012 at 12:16

                      Не знаю, о чем ошибки и в чем проблема. Переходите на форумы.

                  • Mar
                    23 November 2012 at 11:46

                    Пыталась парсить вот так StoreEval | javascript{(${String}.match(/\\d+/))} | c ( как пример) теперь другая ошибка
                    [error] Unexpected Exception: fileName -> chrome://selenium-ide/content/selenium-core/scripts/selenium-api.js, lineNumber -> 2535

                  • Mar
                    23 November 2012 at 12:31

                    Вот наконец получилось :
                    storeEval |storedVars[‘urlvar’].match(/[^\\d]/gim,””)| c
                    echo${c}

  37. 28 January 2013 at 23:59

    Добрый день! Только открыла Seleniium IDE, и у меня такая интересная ситуация: когда вставляю новую команду, у меня эта новая строка вставляется сверху над выделенной строкой, а не снизу. Собственно, весь тест получается задом наперед. (снизу вверх) Не подскажете, как программу к жизни вернуть нормальной?

    • 29 January 2013 at 07:11

      Передвигайте строки методом drag & drop.

      Будет у программы нормальная жизнь.

      • 29 January 2013 at 09:28

        Нет, ну я, конечно могу так делать, но они все равно всегда падают сверху. То есть это корректная работа программы, и всегда ручками подправлять поля?(

        • 29 January 2013 at 09:59

          Сделайте клик ниже нужной строки и вставьте новую строку.

  38. Rany
    30 January 2013 at 10:27

    Алексей, здравствуйте. Подскажите, пожалуйста, как проверить выпадающий список в Se IDE? Хочу установить проверку на то, что в списке содержится нужное наименование (иначе дальнейшее выполнение теста теряет смысл). На странице есть поле фильтра, в нем 5 значений, значения постоянны. Проверка на наличие поля: assertElementPresent | наименование
    а как проверить элемент списка?
    И еще – после того, как фильтр отработал – выводятся данные в виде таблички. Как мне убедиться, что фильтр отработал корректно?

    • 30 January 2013 at 10:53

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

      1)

      Вот общий пример того, как достукиваться до выпадающих списков:

      На странице http://www.software-testing.ru/forum/index.php?/topic/17673/ в правом нижнем углу есть выпадающий список с темами на форуме. Одна из тем там называется “Тестирование”.

      Вот как Selenium IDE выберет в этом списке этот пункт:

      select | id=showforumJump | Тестирование

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

      2)

      Если данные на странице перед работой фильтра не присутствуют, и появляются в таблице только после того, как фильтр отработал, тогда можете сделать “assertTextNotPresent | проверяемыйТекст” перед работой фильтра, и “assertTextPresent | проверяемыйТекст” после работы фильтра. Это будет просто проверка наличия на странице какого-то текста, без привязки к локаторам или фазам Луны.

  39. Rany
    30 January 2013 at 11:28

    1.

    assertTextNotPresent
    Exception

    assertElementPresent
    result
    Incomplete

    select
    result
    Incomplete

    click
    id=N66596

    Вот фрагмент моего теста. Т.е. сначала проверка, что не содержится текста “Exception” (после загрузки страницы), затем – хочу проверить, что в поле “result” есть значение “Incomplete” , иначе если этого значения нет – смысл в дальнейшей части теста? А здесь второй командой, как я поняла, проверяется само наличие поля, но никак не наличие “Incomplete”. Вот и хочу узнать, как будет выглядеть такая проверка – если она нужна, конечно.
    2.
    Перед работой конкретно этого фильтра – данные на экране есть, полный список (по умолчанию значение All). Затем – селект по Incomplete, на экране результат в виде таблицы.
    “assertTextPresent | Incomplete” – это и скажет нам, что тест прошел успешно? Но ведь таблица же может быть и пустой – и это тоже нормальный результат (ну нету пока таких записей…)? тогда на этом месте вывалится ошибка в тесте…

    • irisha79
      1 November 2013 at 14:44

      Rany :
      1.
      assertTextNotPresent
      Exception
      assertElementPresent
      result
      Incomplete
      select
      result
      Incomplete
      click
      id=N66596
      Вот фрагмент моего теста. Т.е. сначала проверка, что не содержится текста “Exception” (после загрузки страницы), затем – хочу проверить, что в поле “result” есть значение “Incomplete” , иначе если этого значения нет – смысл в дальнейшей части теста? А здесь второй командой, как я поняла, проверяется само наличие поля, но никак не наличие “Incomplete”. Вот и хочу узнать, как будет выглядеть такая проверка – если она нужна, конечно.
      2.
      Перед работой конкретно этого фильтра – данные на экране есть, полный список (по умолчанию значение All). Затем – селект по Incomplete, на экране результат в виде таблицы.
      “assertTextPresent | Incomplete” – это и скажет нам, что тест прошел успешно? Но ведь таблица же может быть и пустой – и это тоже нормальный результат (ну нету пока таких записей…)? тогда на этом месте вывалится ошибка в тесте…

  40. dasha
    19 February 2013 at 00:06

    Подскажите пожалуйста: есть выподающий список

    2013-02-20
    2013-02-21
    2013-02-22
    2013-02-25
    2013-02-26
    2013-02-27
    2013-02-28
    2013-03-01

    как средствами selenium ide выбрать случайное значение из этого списка????
    Заранее благодарен

    • 19 February 2013 at 00:57

      Средствами JavaScript.

      Вроде storeEval | магияПрограммированияНаJavaScript | randomResult

  41. Олег
    1 June 2013 at 16:17

    foreach (String Odktemp_ID in arrayodk) //витягуємо дані в зміну Fbtemp_ID
    {
    driver.Navigate().GoToUrl(“https://odnoklassniki.ru/profile/” + Odktemp_ID); //зайшли на сторінку повідомлення
    System.Threading.Thread.Sleep(3000);
    IWebElement el = driver.FindElement(By.XPath(“//span[text()=’написать сообщение’]“));
    el.Click();
    System.Threading.Thread.Sleep(3000);
    el = driver.FindElement(By.ClassName(“disc_rich_input_cont”));
    System.Threading.Thread.Sleep(3000);
    el = el.FindElement(By.ClassName(“disc_text_area”)).FindElement(By.ClassName(“gwt-RichTextArea”));
    System.Threading.Thread.Sleep(5000);
    el.FindElement(By.XPath(“//body”)).SendKeys(txbx_messege.Text.ToString()); //вот тут возникает ошибка (focusElement execution failed)
    //System.Threading.Thread.Sleep(3000);

    }
    Поставил паузу 5 секунд! все равно ошибка появляется, есть в Selenium wait, подскажите на моем коде как сним работать! помогите испаравить ошибку спасибо!

  42. Эльдар
    12 July 2013 at 16:25

    Алексей, доброго времени суток,
    Вы написали эту статью
    https://siderulezzz.wordpress.com/2011/08/12/12-2/

    У меня есть вопрос, как найти количество повторений слова, которое мы ищим на странице? То есть, если бы “Иван Столяров” было бы на странице несколько раз и нам надо было бы найти количество повторений, то как это можно сделать? Страница одна.

    • 12 July 2013 at 17:40

      Два шага:

      storeXpathCount | //*[contains(text(), ‘Иван Столяров’)] | variablea

      echo | ${variablea}

  43. Эльдар
    16 July 2013 at 14:30

    Алексей, спасибо за ответ,

    Однако в случае с такой штукой, как column visibility (грубо говоря), когда мы делаем колонку невидимой, соответственно слова не видно, через Xpath это слово похоже остается видимым, а мне нужно, чтобы просто эмитировалось нажатие сочетания “ctrl+F” и считалось количество повторений слова, которое мы ищем.

    Внизу я прикрепил действия для Selenium IDE, в котором видно, что после того, как мы делаем колонку “Rank” невидимой, количество слова “Rank”, посчитанное через Xpath, на странице не изменяется.

    Ссылка на сайт, где я пытаюсь разобраться с тем как искать количество повторений при изменении видимости колонок:
    http://jquerymobile.com/demos/1.3.0-beta.1/docs/tables/table-column-toggle.html

    open
    /demos/1.3.0-beta.1/docs/tables/table-column-toggle.html

    storeXpathCount
    //*[contains(text(), ‘Rank’)]
    VAR

    echo
    ${VAR}

    click
    //div[2]/div/a/span/span

    click
    //div[@id=’table-column-toggle-popup’]/fieldset/div/div/label/span/span[2]

    storeXpathCount
    //*[contains(text(), ‘Rank’)]
    VAR1

    echo
    ${VAR1}

  44. Igor
    19 September 2013 at 11:51

    Алексей, сможете подсказать, как присвоить значение поля ввода переменной. То есть вели в поле ввода некий текст, и этот текст нужно присвоить некой переменной.

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

    • 19 September 2013 at 13:30

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

      Так решено?

      • Igor
        19 September 2013 at 18:42

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

  45. Ivan
    20 September 2013 at 10:59

    Добрый день Алексей! Подскажите пожалуйста, можно ли запустить скрипт, написанный через Selenium recorder, при открытии FireFox?

  46. irisha79
    1 November 2013 at 14:53

    >>>>>select | id=showforumJump | Тестирование

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

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

    (Selenium IDE)
    select | UI[id…….] | \\40 (\\38) не помагает.
    sendKeysAndWait | UI[id…….] | \\40 (\\38) не помагает.

    • 1 November 2013 at 15:28

      Без изучения кода разобраться с этой задачей невозможно.

  47. Eric
    9 November 2013 at 15:37

    Eric :
    Здравствуйте.
    Вопрос: Можно ли найти в таблице определенный текст в строке и работать именно с этой строкой ?

    Т.е. есть к примеру таблица с 2-мя столбцами. 1-й столбец – это ID, 2-й – кнопка на редактирование этого ID. Кол-во строк в таблице каждый раз увеличивается. К примеру уже есть 3 записи. Я добавил 4-ю, где ID=eric555 и после меня ещё кто-то добавил например 2 записи.
    И вот в чем вопрос: Мне нужно нажать на кнопку “редактирование” именно в моей строке, но проблема в том, что при создании записи я ещё не знаю в какой строке она появится. Я знаю только ID.
    Заранее спасибо

    • 9 November 2013 at 17:54

      Можно. Но надо смотреть код, бо реализация может быть вообще невероятной…

  48. Tema
    14 January 2014 at 16:58

    Здрасвуйте. Такой вопрос:

    Ввожу c помощью type значение поля “сумма”, значение вводится. Заполняю все поля (с помощью того же type и select). В конце нажимаю “ок”

    Мне ввыводится сообщение о том что значение поля “сумма”=0 и поле обнуляется.
    Такое чувство что сайт не видет этого значения, хотя оно вводится. Или что не хватает нажатия “entera” после ввода type.

    На других страницах значения вводятся и работают.

  49. Helen
    24 January 2014 at 10:54

    Здравствуйте, Алексей!
    Ломаю голову,при запуске теста надо чтобы аторизация происходила админом, на гиде хранить логин и пароль нельзя. как мне быть? может есть какая функция чтобы админ вводил свои данные вручную, а далее тест продолжался. Но перед тем как залогиниться, надо провести ряд проверок

    • 24 January 2014 at 12:08

      Вставьте команду getEval | alert(‘Введи свои причиндалы и нажми ОК’) прямо перед нажатием на кнопку “Залогинить бастарда”.

  50. Ivan
    26 February 2014 at 00:18

    Доброго времени суток! =)
    Подскажите, если не трудно..
    Поставил htmlunit, хочу с его помощью выдернуть post_hash с, к примеру, https://vk.com/id1 =)

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

    Код:

    public static void homePage_Firefox() throws Exception {
    java.util.logging.Logger.getLogger(“com.gargoylesoftware.htmlunit”).setLevel(Level.OFF);
    final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);
    webClient.setJavaScriptTimeout(1000);
    webClient.setJavaScriptErrorListener(null);
    final HtmlPage page = webClient.getPage(new WebRequest(new URL(“https://vk.com/id1”), HttpMethod.GET));

    String textHtml = page.asXml();

    System.out.println(textHtml);
    webClient.closeAllWindows();
    }

Comment pages
  1. No trackbacks yet.

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

<span>%d</span> bloggers like this: