Вкратце

О чем тут

Когда-то я записывал тут всякие мелочи, которые постигались в ходе освоения ’Selenium IDE’ в качестве рулезной приблуды в руках функционального тестировщика. Со временем поменялась архитектура браузеров, ’Selenium IDE’ тоже переехал на другую основу и потерял основную для меня ценность — быть мелкой утилитой для записи кликов и действий в окне браузера в ходе ручного тестирования. Теперь это нечто, что живёт самостоятельно и больше раздражает, нежели помогает. Увы и в топку.

Со временем я залез в автоматизацию тестирования веб-приложений на уровне Selenium WebDriver, который управляется скриптами на Python. Мелочей много, и хорошо бы их записывать как-то просто и системно, — отсюда и блог. Я сегодняшний помогаю себе будущему.

В целом надо поменьше автоматизировать и побольше качать тест-дизайн и аналитику.

Аффтар

Лёша Лупан.

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

На большинство вопросов у меня нет ответов, не обессудьте и изыдъте.

192 thoughts on “Вкратце

  1. Алексей,

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

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

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

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

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

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

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

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

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

  2. То, что открывается при попытки авторизации через указанную форму – это не 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. # [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 окна или какой-то другой параметр?

    1. Иногда 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. Добрый день,

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

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

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

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

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

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

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

      2) По примеру http://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. подскажите и мне ,пожалуйста,ксли это возможно
    тестирую страницу
    на ней 4 вкладки users,roles,templates,sources
    каждую вкладку можно add,edit и тд
    вопрос вот в чем
    при тестировании 1 вкладки,что появляется по умолчанию съоду на странице все нажимается нормально
    дальше идут косяки
    чуть ниже названий вкладок кнопки + add X
    + получается нажать и что-то добавить,все остальное пишет element not found
    если же перейти например на вкладку роли,то там даже + не нажмется
    пишет не найден элемент

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. Конечно.

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

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

      2) echo | ${userLogin} |

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

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

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

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

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

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

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

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

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

        [error] Threw an exception: missing ; before statement

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

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

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

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

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

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

      3. Помогите со следующим номером в 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

        1. Хм.

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

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

          [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. Здравствуйте, а что может значить такая ошибка:
    [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. Ошибку выдает вот на такую команду:
    javascript{var text = “”; var possible = “abcdefghijklmnopqrstuvwxyz”; for( var i=0; i < 5; i++ ) text += possible.charAt(Math.floor(Math.random() *possible.length));}

      1. Да, проблема действительно была в кавычках. Спасибо за помощь

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

    1. А смысл?

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

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

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

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

        1. Давайте быть точнее.
          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>

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

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

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

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

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

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

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

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

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

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

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

    Спасибо.

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

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

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

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

      Что сделали?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. Хм.

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

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

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

      1. В опасном режиме тоже ничего не происходит!
        Дело в том что тесты записаны не с помощью 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. Из-за этого ничего не получается!

              1. Проблема решена – ошибка оказалась очень банальная – на решение натолкнула тема: http://software-testing.ru/forum/topic/16432/page__p__73054__hl__%2B%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0+%2B%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2__fromsearch__1#entry73054

                Дело было в путях к файлу, а конкретнее в слешах – когда происходит проверка на наличие файла на диске средствами php в пути должны быть “/”, а когда записываем в input file значение – слеши должны быть “\”

                Ошибок почему то не выдавалось – тесты проходили – просто в поле файла была пустота!

                Только теперь не знаю, что предоставляет возможность записывать в input file с помощью selenium.type – либо небезопасный режим *chrome, либо настройки профиля firefox как сказано здесь: http://cakebaker.wordpress.com/2006/03/29/file-upload-with-selenium/

                Думаю достаточно просто небезопасного режима)

                Спасибо ещё раз – отличный форум посоветовали!

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



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

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

  22. Алексей, здравствуйте!
    Недавно начала разбираться с 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
    название

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

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

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

    1. Сделайте сьют.

      В первом тест-кейсе вставляете начальный тест.

      Второй и далее – остальные.

      И запускаете сьют, а не отдельные тест-кейсы.

      Подробности:

      http://seleniumcamp.com/archive/selenium-camp-2011/materials/ – там прокрутите до “Selenium IDE как артефакт пикника на обочине”

      http://seleniumcamp.com/materials/ide/

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

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

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

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

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

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

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

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

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

    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

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

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

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

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

    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, то они откроются либо в новом окне, либо в новой вкладке и в обоих случаях селена ничего открытого не видит, думая, что находится на родительской странице.

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

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

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

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

        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
        Детский Мир – официальная группа

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

    2. Так.

      Если у ссылки есть имя (например, ‘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. Дело может оказаться нестабильным.
  30. Алексей, подскажите пожалуйста, какой командой заставить селениум ожидать на любое действие пользователя (на странице выбрать любой элемент).

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

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

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

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

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

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

            storeLocation
            urlvalue

            echo
            ${urlvalue}

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

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

            echo
            ${c}

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

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

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

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

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

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

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

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

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

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

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

      1)

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

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

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

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

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

      2)

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

  37. 1.

    assertTextNotPresent
    Exception

    assertElementPresent
    result
    Incomplete

    select
    result
    Incomplete

    click
    id=N66596

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

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

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

    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 выбрать случайное значение из этого списка????
    Заранее благодарен

  39. 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, подскажите на моем коде как сним работать! помогите испаравить ошибку спасибо!

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

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

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

    Однако в случае с такой штукой, как 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}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  48. Доброго времени суток! =)
    Подскажите, если не трудно..
    Поставил 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();
    }

Leave a reply to Igor Cancel reply