Javascript.RU

Юнит-тесты уровня браузера на связке Selenium + PHP.

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

Selenium предоставляет уникальную возможность проводить тестирование "от лица пользователя", на уровне операций браузера.

С помощью Selenium можно покрыть кросс-браузерными тестами сложный javascript-интерфейс.

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

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

Selenium - это HTTP-сервер, написанный на java (на основе Jetty).

Он принимает команды в простом текстовом формате. Причем, можно как набирать команды в "серверной консоли", так и посылать их, присоединившись к порту 4444.

Интеграция с языками программирования - это классы, которые предоставляют методы для удобной посылки команд серверу.

Например, вызов метода open("http://javascript.ru") посылает селениум-серверу на порт 4444 команду вида cmd=open&1=http://javascript.ru, а селениум-сервер, в свою очередь, отправит ее на исполнение в браузер.

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

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

Для запуска автоматического тестирования Selenium нам понадобятся:

  1. Java 1.5+
  2. PHPUnit и Testing_Selenium из PEAR:
    pear channel-discover pear.phpunit.de
    pear install channel://pear.phpunit.de/PHPUnit
    # на момент написания статьи версия 0.4.3 последняя бета
    pear install channel://pear.php.net/Testing_Selenium-0.4.3
    
  3. Selenium: качайте последнюю версию с http://selenium-rc.openqa.org/download.html

В архиве selenium-remote-control содержатся API для разных языков программирования и сервер selenium-server.

Мы стартуем сервер в интерактивном (ключ -interactive) режиме, который позволяет запускать команды непосредственно из консоли.

# В каталоге с selenium-server запускаем
# java -jar selenium-server.jar -interactive
# предполагатся, что java - на пути PATH

C:\...\selenium-server-1.0-beta-1>java -jar selenium-server.jar -interactive
14:23:08.312 INFO - Java: Sun Microsystems Inc. 10.0-b22
14:23:08.312 INFO - OS: Windows XP 5.1 x86
14:23:08.312 INFO - v1.0-beta-1 [2201], with Core v1.0-beta-1 [1994]
14:23:08.390 INFO - Version Jetty/5.1.x
14:23:08.406 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
14:23:08.406 INFO - Started HttpContext[/selenium-server,/selenium-server]
14:23:08.406 INFO - Started HttpContext[/,/]
14:23:08.406 INFO - Started SocketListener on 0.0.0.0:4444
14:23:08.406 INFO - Started org.mortbay.jetty.Server@201f9
Entering interactive mode... type Selenium commands here (e.g: cmd=open&1=http://www.yahoo.com)

Итак, селениум-сервер запустился и слушает порт 4444. Последняя строка демонстрирует пример команды.

Общий вид команд: cmd=(ИМЯ)&1=(Параметр1)&2=(Параметр2)...&sessionId=(СЕССИЯ)

Опция -interactive разрешает серверу принимать команды из консоли.
Поэтому можно тут же, из консоли, проверить, работает ли селениум - открыть http://www.google.com браузером Internet Explorer.

Для начала работы с селениум нужно открыть новую сессию. В сессии указывается тип браузера (*iexplore, *firefox, *opera и т.п.) и урл, с которого этот браузер начнет работу.

Будем тестировать в Internet Explorer, начнем работу с google.com.

Для этого введем команду getNewBrowserSession с аргументами *iexplore и http://www.google.com:

cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com

Откроется Internet Explorer с длинным URL вида http://www.google.com/selenium-server/core/...

cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
14:23:22.921 INFO - ---> Requesting http://localhost:4444/selenium-server/driver?cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com
14:23:23.000 INFO - Checking Resource aliases
14:23:23.000 INFO - Command request: getNewBrowserSession[*iexplore, http://www.google.com] on session null
14:23:23.000 INFO - creating new remote session
14:23:23.343 INFO - Allocated session 42eb52b4dcfb453ab6938b4be8736b2b for http://www.google.com, launching...
14:23:23.343 INFO - Backing up registry settings...
14:23:24.250 INFO - Modifying registry settings...
14:23:24.640 INFO - Launching Internet Explorer...
14:23:27.421 INFO - Got result: OK,42eb52b4dcfb453ab6938b4be8736b2b on session 42eb52b4dcfb453ab6938b4be8736b2b

Вывод селениума сообщил, что создана сессия "Allocated session 42eb52b4dcfb453ab6938b4be8736b2b", и команда открытия успешно выполнена: "Got result: OK"

Все дальнейшие операции в этой сессии должны происходить в рамках исходного домена http://www.google.com.

Есть способы обойти это ограничение, запустив Selenium в привилегированном режиме: *iehta вместо *iexplore, или воспользовавшись другим способом, описанным в http://selenium-rc.openqa.org/experimental.html.

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

Механизм работы Selenium

Selenium работает исключительно на уровне javascript, без привязки к API, DLL и прочим внутренностям браузера.

Запуская браузер командой cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.com, Selenium ставит себя (localhost:4444) в настройках прокси. Собственно, эта настройка - и есть всё отличие в поведении браузера, запущенного через Селениум.

Селениум-сервер, работая как прокси, перехватывает все URL, которые начинаются с /selenium-server/ (в рамках исходного домена) и отдает свои страницы.

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

На страничке, которая открылась в браузере, есть длинный идентификатор: 42eb52b4dcfb453ab6938b4be8736b2b - это сессия. Все дальнейшие команды, которые вы отправите селениум-серверу с этой сессией, будут выполнены в этом браузере. При этом неважно откуда они пришли: по порту 4444 или вручную из консоли.

Для перехода на URL служит команда open. Не забываем указать сессию:

cmd=open&1=http://www.google.com&sessionId=42eb52b4dcfb453ab6938b4be8736b2b

Google открылся. С виду все хорошо. Но глянем на консоль:

cmd=open&1=http://www.google.com&sessionId=42eb52b4dcfb453ab6938b4be8736b2b
14:37:32.843 INFO - ---> Requesting http://localhost:4444/selenium-server/driver?cmd=open&1=http://www.google.com&sessionId=42eb52b4dcfb453ab6938b4be8736b2b
14:37:32.859 INFO - Command request: open[http://www.google.com, ] on session 42eb52b4dcfb453ab6938b4be8736b2b
14:37:38.078 INFO - Got result: Разрешение отклонено on session 42eb52b4dcfb453ab6938b4be8736b2b

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

Когда-то я потратил небольшое энное количество времени в поисках - что не так и почему оно не пашет.

Разгадка оказалось простой. Google самостоятельно перенаправил браузер с http://www.google.com на http://www.google.ru. А сессия была запущена на google.com. Поэтому, следуя политике безопасности Same Origin, браузер показал селениуму фигу.

Чтобы такого не было, следует с самого начала выбрать нужный домен правильно. В нашем случае правильный выбор - www.google.ru. И в дальнейшем избегать кросс-доменных редиректов.

Для тестирования поисковика Google мы используем новые команды Selenium. Их список и описание которых можно найти в документации.

Алгоритм теста поисковика Google:

  1. запустить браузер
    cmd=getNewBrowserSession&1=*iexplore&2=http://www.google.ru
    

    Selenium выдаст сессию. Для краткости, обозначим ее 12345.

  2. открыть страницу
    cmd=open&1=http://www.google.ru/&sessionId=12345
    
  3. заполнить поле с именем q строкой поиска:
    cmd=type&1=q&2=selenium&sessionId=12345
    
  4. кликнуть на кнопку "поиск" (ее id=btnG)
    cmd=click&1=btnG&sessionId=12345
    
  5. проверить при помощи XPath, есть ли (isElementPresent) ссылки со словом Selenium
    cmd=isElementPresent&1=//a[contains(text(),"Selenium")]
    ...
    Got result: OK,true on session 12345
    

    да, такие ссылки есть

  6. завершить тестирование
    cmd=testComplete&sessionId=12345
    

    При таком завершении селениум сам закроет браузер и аккуратно удалит все временные файлы.

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

    Пример такого теста есть в архиве селениума в каталоге selenium-php-client-driver. Например, GoogleTest.php. Но версия из архива на русском google работать не будет, поэтому вот модифицированный вариант:

    <?php
    // GoogleTest.php
    // должны быть установлены PEAR-пакеты
    // сам PEAR должен быть в include_path
    require_once 'Testing/Selenium.php';
    require_once 'PHPUnit/Framework/TestCase.php';
    
    class GoogleTest extends PHPUnit_Framework_TestCase
    {
        private $selenium;
    
        public function setUp()
        {
            $this->selenium = new Testing_Selenium("*iexplore", "http://www.google.ru");
            $this->selenium->start();
        }
    
        public function tearDown()
        {
            $this->selenium->stop();
        }
    
        public function testGoogle()
        {
            $this->selenium->open("/");
            $this->selenium->type("q", "hello world");
            $this->selenium->click("btnG");
            $this->selenium->waitForPageToLoad(10000);
            // русский текст в кодировке UTF-8 !
            $this->assertRegExp("/Поиск в Google/", $this->selenium->getTitle());
        }
    }
    

    Итак, проверив что Selenium-сервер работает, запускаем тест из директории с файлом GoogleTest.php :

    C:\...>phpunit GoogleTest.php
    PHPUnit 3.2.21 by Sebastian Bergmann.
    
    .
    
    Time: 7 seconds
    
    OK (1 test)
    
    C:\...>
    

    В классе была всего одна функция, имя которой начинается на test.., поэтому тест один.

    Если что-то не работает, то подробный лог будет в консоли selenium-сервера.

    Авторизация - один из самых критичных сервисов сайта. Будем тестировать авторизацию на сервере http://mail.ru.

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

    Схема теста по шагам:

    1. Зайти на заглавную
    2. Заполнить логин-пароль и кликнуть на Войти
    3. Проверить, что появилась кнопка Выход
    4. Кликнуть на выход, проверить что появилась кнопка Войти

    Заметим, что mail.ru редиректит на домен win.mail.ru. Чтобы тестирование работало - нужно сразу зайти на win.mail.ru, аналогично тесту для Google.

    Код файла MailTest.php:

    <?php
    // MailTest.php
    
    require_once 'Testing/Selenium.php';
    require_once 'PHPUnit/Framework/TestCase.php';
    
    class MailTest extends PHPUnit_Framework_TestCase
    {
        protected $selenium;
    
        // XPATH-локатор для кнопки "Войти"
        protected $enterLocator = "//input[@type='submit' and @value='Войти']";
        
        // XPATH-локатор для кнопки "Выйти"
        protected $exitLocator = "//input[@type='submit' and @value=' Выход ']";
        
        /*
         * инициализация теста
        */
        public function setUp()
        {
            // Если браузера нет на пути PATH, нужно указать полный путь
            $opera = "*opera C:\Program Files\Opera 9\opera.exe";        
            
            $ie = "*iexplore";
            
            // в процессе авторизации сервер mail.ru перенаправляет на домен win.mail.ru
            // чтобы тест работал корректно, нужно сразу зайти на win.mail.ru.
            $this->selenium = new Testing_Selenium($ie, "http://win.mail.ru");
            $this->selenium->start();
            
            // таймаут по умолчанию 30 секунд.
            // поставим 600 сек, т.к команда open ждет, пока браузер загрузит картинки
            $this->selenium->setTimeout(600000);
           
        }
    
    
        /*
         * тест авторизации 
        */
        public function testMail() {
            
            $this->selenium->open("/");
            
            // команда open выполняется синхронно, ожидая полной загрузки страницы
            
            // если браузер уже залогинен (например, режим "запомнить меня")
            if ($this->selenium->isElementPresent($this->exitLocator)) {
                // выйти
                $this->logout();
            }
            
            $this->login();
            $this->logout();        
        }
        
        /*
        * Выйти из сайта
        */
        public function logout() {
            
    
            // нажать на кнопку "выход"
            $this->selenium->click($this->exitLocator);
            
            // команда click, как и почти все команды, выполняется асинхронно.
            
            // надо подождать загрузки страницы, ждем 600 сек максимум
            $this->selenium->waitForPageToLoad(600000);
    
            // проверить, что появилась кнопка "войти"
            $this->assertTrue($this->selenium->isElementPresent($this->enterLocator));        
        }
        
        /*
        * Войти в сайт
        */
        public function login()
        {
            $this->selenium->type("Login", 'selenium_test');
            $this->selenium->type("Password", '123456');
            $this->selenium->click($this->enterLocator);        
            $this->selenium->waitForPageToLoad(10000);
            
            // проверить, что появилась кнопка "выйти"
            $this->assertTrue($this->selenium->isElementPresent($this->exitLocator));
            
        }
        
        /*
         * Завершение теста
        */
        public function tearDown()
        {
            $this->selenium->stop();
        }
    
    }
    

    Если что-то по тесту вдруг неочевидно - задайте Ваш вопрос в комментариях, я дополню описание.

    При практической работе с Selenium Вы столкнетесь с большим количеством фич и багов. Не пугайтесь. Вы не один такой. Вот некоторые из них.

    Для работы с Firefox 3 на момент написания статьи придется скачать последний снапшот Selenium RC, т.к версия 1.0-beta1 его запускать не умеет.

    Впрочем, с последним снапшотом хватает других глюков.

    Альтернативный вариант - запускать браузер с нужным профилем и прокси, используя тип *custom.

    Кроме того, некорректно завершенные (например, по ctrl-c) сессии Firefox оставляют во временной директории профили вида custom*. Их можно убивать. Иногда селениум ругается, что там какой-то лок-файл и запустить Firefox нельзя. Тогда все эти профили надо обязательно убить.

    По умолчанию Selenium не показывает окошки подтверждения confirm и автоматом жмет на них OK.

    Есть методы, которые меняют это поведение.

    В любом случае, нужно обязательно вызвать метод getConfirmation сразу после появления подтверждения.
    Иначе последующие команды selenium'а не будут выполнены браузером.

    Чтобы протестировать загрузку файла - нужно обойти ограничение безопасности в Javascript. По умолчанию javascript не может менять значение <input type="file">.

    В Firefox можно дать Selenium привилегии на загрузку файла, добавив вызов:

    netscape.security.PrivilegeManager.enablePrivilege("UniversalFileRead")
    

    в файл selenium-api.js в начало функции Selenium.prototype.doType.

    Кроме того, чтобы запрос привилегии сработал в "неподписанном" скрипте - нужно поставить в Firefox настройку "signed.applets.codebase_principal_support" в значение "true", например, найдя ее на страничке about:config.

    И тогда загрузки будут работать.

    Альтернативный выход - запустить браузер в экспериментальном привилегированном режиме (chrome/iehta/...) или через Proxy Injector. Но тогда готовьтесь к дополнительному набору глюков.

    Также по теме: Testing File Uploads with Selenium RC and Firefox.

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

    1. Основной сайт Selenium RC: http://selenium-rc.openqa.org/.
      Обратите внимание на секцию Tutorial.
    2. В вики, куда постепенно мигрирует документация, находится FAQ.
    3. Дока по командам selenium и по локаторам элементов: Selenium Core Reference
    4. Много полезных расширений и дополнительных команд для селениум. Must Read: Contributed User-Extensions

    Рецептами решения глюков щедро поделится google и сайт поддержки OpenQA.

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

    • Пожалуй, единственное средство для удобной автоматизированной эмуляции действий посетителя
    • Кросс-браузерное
    • Есть способы интеграции с множеством языков и систем тестирования. Для PHP - это PHPUnit.
    • Довольно глючная вещь. Заранее готовьтесь к борьбе с непонятками.
    • Почти не умеет работать с поддоменами. Редирект посетителя на другой домен обычно ломает тест.

    P.S В этой статье нет ни слова о Selenium IDE. Это не потому что оно того не заслуживает. Наоборот - Selenium IDE требует отдельной хорошей статьи.

    Успешного автоматизированного тестирования!


Автор: Анджела (не зарегистрирован), дата: 13 ноября, 2008 - 15:54
#permalink

Авторизация - один из самых критичных сервисов сайта. Будем тестировать авторизацию на сервере http://mail.ru. отлично.


Автор: Макс_Харьков (не зарегистрирован), дата: 19 ноября, 2008 - 16:59
#permalink

Selenium не всегда дружит с jquery - были великие траблы с jquery.ui.dialog и валидацией... Особенно убило, что он никак не хочет ждать, пока появится элемент (waitForPageToLoad не рулит, ибо страница загружена, а он каким-то магическим образом смотрит на дом-деревце документа). Пока решено использовать sleep в тестах, но это проблемы не решает - ибо если брать с запасом - время теста ахуенно (пардон за мой французский) разрастается (тест 2-х фич - авторизации и регистрации проходит около минуты). Что будет при наращивании функционала - я не знаю. Может - будет написан скрипт найтли билда. Посмотрим


Автор: unreger (не зарегистрирован), дата: 16 марта, 2009 - 13:39
#permalink

просто слип надо обернуть циклом и делать sleep(500)
потом selenium.getHtmlSource()
и выходить как только появится


Автор: dap (не зарегистрирован), дата: 21 ноября, 2008 - 10:15
#permalink

не слышал про селениеум ничего. просветили.


Автор: Злата (не зарегистрирован), дата: 6 декабря, 2008 - 03:24
#permalink

конечно не просто, по помогли разобраться


Автор: Арсен (не зарегистрирован), дата: 11 февраля, 2009 - 22:22
#permalink

Здравствуйте, не понял где нужно набирать следующее

C:\...>phpunit GoogleTest.php
PHPUnit 3.2.21 by Sebastian Bergmann.
 
.
 
Time: 7 seconds
 
OK (1 test)
 
C:\...>

Автор: Илья Кантор, дата: 13 февраля, 2009 - 10:30
#permalink

В директории с файлом GoogleTest.php (добавил об этом в статью)


Автор: Alexei (не зарегистрирован), дата: 24 апреля, 2009 - 11:41
#permalink

А как можно запустить selenium на другом порту с использованием phpunit?


Автор: Гость (не зарегистрирован), дата: 24 апреля, 2009 - 22:03
#permalink

java -jar selenium-server -help


Автор: Гость (не зарегистрирован), дата: 18 мая, 2009 - 08:29
#permalink

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


Автор: Илья Кантор, дата: 18 мая, 2009 - 10:52
#permalink

Логирование осуществляет оболочка, запустившая селениум, любым избранным вами способом.


Автор: Гость (не зарегистрирован), дата: 26 мая, 2009 - 09:42
#permalink

В примере указывается , что можно определить появился ли объетк или нет, а можно определить при помощи xpath локатора, появился ли класс?


Автор: BFox (не зарегистрирован), дата: 11 июня, 2009 - 14:54
#permalink

Спасибо за статью, но не подскажите, как вызвать определенную функцию (например только логин в вашем примере) или запустить все три теста в определенной последовательности и например с передачей параметров с одного теста другому


Автор: Илья Кантор, дата: 12 июня, 2009 - 11:02
#permalink

Этим занимается внешняя обертка. В статье это PHPUnit + модуль для Selenium.


Автор: Тестер (не зарегистрирован), дата: 15 октября, 2009 - 17:06
#permalink

А не подскажете как можно научить селениум запоминать сессию?
Т.е. я делаю login, проверяю страницу, затем запускаю другой тестовый метод, который должен проверять другую страницу и selenium ломается(типа: element not found) т.е. я так понял в рамках одной сессии выполнился метод,а другой метод(хотя там не было ни log out, ни login) не может выполниться....
что можно сделать?


Автор: Илья Кантор, дата: 15 октября, 2009 - 23:02
#permalink

При первом запросе - получаете session id в селениум, а далее - при каждом новом запросе - передавайте selenium текущий идентификатор, как описано в статье.
Тогда действия будут выполняться в одной сессии браузера и с одними куками..


Автор: Гость (не зарегистрирован), дата: 6 ноября, 2009 - 12:33
#permalink

Есть небольшой вопрос. Как можно заставить selenium выбрать значение из выпадающего списка.Скрипт падает на моменте выбора значения
# [info] Executing: |select | Q_QuestionnaireQuestionNo2389_1 | label=Мужской |
# [error] Option with label 'Мужской' not found
помогите разобраться плз)))


Автор: contains (не зарегистрирован), дата: 4 июня, 2010 - 13:54
#permalink

Selenium IDE
там есть кнопочка Find
я обычно ей пользуюсь
тогда если элемент есть на форме он моргает зеленым ободком

в твоем случае судя по всему "2389_1" - уникальное рандомное значение
я пользуюсь xpath локаторам потому, что они боле-менее универсальны
есть такая клевая функция contains()
попробуй заюзать ее в xpath


Автор: jsch (не зарегистрирован), дата: 6 мая, 2010 - 14:03
#permalink

незаускайте selenium-server.jar находящийся по адрему в котором присутсует восклицательный знак!!!
один из каталогов начинался с восклицательного знака - сервер загружался но интерективно ыессия не запускалась
один из каталогов заканчивался восклицательным знаком - сервер незагружался вообще
целый день убил на это Sad


Автор: Гость (не зарегистрирован), дата: 16 ноября, 2010 - 14:28
#permalink

так это любой jar в такой папке не запуститься) старая бага


Автор: pekec (не зарегистрирован), дата: 24 июня, 2010 - 15:09
#permalink

getHtmlSource не всегда возвращает адекватный HTML
в результате assertRegExp выбрасывает ассерт
в браузере в этот момент все правильно и адекватно отображено
че делать ?


Автор: aleksand (не зарегистрирован), дата: 27 сентября, 2010 - 18:46
#permalink

Спасибо за статью, но не подскажите как можно отдельно вызвать определённую функцию?


Автор: Maxim V (не зарегистрирован), дата: 14 декабря, 2010 - 01:01
#permalink

как обработать недействительный сертификат?

если запускать с дефолтным firefox, то надо вручную добавлять исключение

если делаю новый профиль firefox (firefox -P) и затем указываю его "java -jar selenium-server.jar -firefoxProfileTemplate /home/****/.mozilla/firefox/7re9l8yb.selenium"
то при запуске phpunit - firefox открывает http://localhost:4444/selenium-server/core/Blank.html?start=true


Автор: kalashnikoff (не зарегистрирован), дата: 19 декабря, 2010 - 23:25
#permalink

Расскажите, пожалуйста, подробнее как запустить GoogleTest.php (к примеру).Читал много про PHPUnit и Pear,не могу только собрать все в кучу!!Помогите с этим разобраться.


Автор: Berezovii (не зарегистрирован), дата: 31 января, 2011 - 13:35
#permalink

Разошлю ваше текст на более 12000 досок объявления в интернет. Рассылка по уникальной базе досок. Мы приведем вам посетителей в ваш сайт. Специальное услуга по рекламе для интернет магазинов. При долгосрочном сотрудничестве скидки. rassilkaservis.ru


Автор: kdszoom (не зарегистрирован), дата: 11 марта, 2011 - 12:32
#permalink

Спасибо за Статейкуё!


Автор: Гостья(почти из будущего:)) (не зарегистрирован), дата: 24 мая, 2011 - 15:08
#permalink

Спасибо за статью
Есть вопрос :
Прохожу руками по сайту - редирект происходит нормально
Прохожу селениумом - на одном этапе постоянно "ломается" url - часть параметров запроса становится не после ?, а после смещается сразу после .html
Как бороться?


Автор: Mr.Heart (не зарегистрирован), дата: 5 июля, 2011 - 16:50
#permalink

Добротно написано. Спасибо за статью.


Автор: Tobur (не зарегистрирован), дата: 14 июля, 2011 - 18:01
#permalink

может все таки Функциональные-тесты уровня браузера на связке Selenium + PHP. А не Юнит, м?


Автор: Vita, дата: 16 августа, 2011 - 15:48
#permalink

Отличная статья,полезная.
У меня вопрос,а если элемент не имеет ID, как к нему обратиться?
Например, имеются кнопки:

<div class="keypad-row">
<button class="keypad-key" type="button">А</button>
<button class="keypad-key" type="button">Б</button>
<button class="keypad-key" type="button">В</button>
<button class="keypad-key" type="button">Г</button>
<button class="keypad-key" type="button">Д</button>
<button class="keypad-key" type="button">Е</button>
<button class="keypad-key" type="button">Ё</button>
<button class="keypad-key" type="button">Ж</button>
<button class="keypad-key" type="button">З</button>
<button class="keypad-key" type="button">И</button>
<button class="keypad-key" type="button">Й</button>
</div>
<div class="keypad-row">
<button class="keypad-key" type="button">К</button>
<button class="keypad-key" type="button">Л</button>
<button class="keypad-key" type="button">М</button>
<button class="keypad-key" type="button">Н</button>
<button class="keypad-key" type="button">О</button>
<button class="keypad-key" type="button">П</button>
<button class="keypad-key" type="button">Р</button>
<button class="keypad-key" type="button">С</button>
<button class="keypad-key" type="button">Т</button>
<button class="keypad-key" type="button">У</button>
<button class="keypad-key" type="button">Ф</button>
</div> ...

Как написать правило для выбора нескольких из них? у них же нет id/


Автор: Cornel (не зарегистрирован), дата: 9 ноября, 2011 - 18:24
#permalink

In this case you have to use XPath or CSS Path. Google it.


Автор: ШЩФЫРЛУОМ (не зарегистрирован), дата: 25 апреля, 2012 - 10:07
#permalink

//button[contains(text(),'У')]


Автор: san4o (не зарегистрирован), дата: 12 октября, 2011 - 10:39
#permalink

интерестный обзор. новичкам генерить код я бы советовал в selenium IDE и можно сразу получить тест готовый для употребления ... да только вот в последних версиях IDE почемуто подумали что мало людей тестируют веб приложения с помощью основного языка веб програмирования и не сделали поддержку генерации php (phpunit) кода...


Автор: Saymong (не зарегистрирован), дата: 1 февраля, 2012 - 15:55
#permalink

Огромное спасибо за статью. ТС супер


Автор: Гость (не зарегистрирован), дата: 14 марта, 2012 - 19:29
#permalink

Итак, проверив что Selenium-сервер работает, запускаем тест из директории с файлом GoogleTest.php :

01 C:\...>phpunit GoogleTest.php

а можно подробней как запускать тест?
что прописывается после С:\....???????????

и второе, запускаем из директории -это значит открыли ту папку, где у нас хранится файл проекта GoogleTest.php и в консоле пишу C:\...>phpunit GoogleTest.php


Автор: Гость (не зарегистрирован), дата: 3 апреля, 2012 - 10:07
#permalink

Последний комментарий в точку...
Где должен находиться тест GoogleTest.php и что вместо многоточий после "С:\"?


Автор: Гость (не зарегистрирован), дата: 3 октября, 2012 - 10:28
#permalink

Создала тест - мучала IDEA и java. все ок, все работает, но в конце сеста у меня открывается страница где просто текстом описывается успешность работы, без айди и css. Не могу разобраться, как сделать поиск на текст в окне браузера xPath-ом или есть функция поиска именно текста? зарание спасибо.


Автор: Гость (не зарегистрирован), дата: 1 апреля, 2013 - 23:11
#permalink

C:\...>phpunit GoogleTest.php - епт народ... ну че за детский сад... куда положили файлик с тестами, оттуда и запускайте его, хоть с диска Z:\some\path\name\phpunit YourTest.php


Автор: Гость (не зарегистрирован), дата: 16 июля, 2016 - 13:45
#permalink

Ребята а подскажите как эмулировать движения мышкой?


Автор: drive26 (не зарегистрирован), дата: 29 ноября, 2018 - 21:55
#permalink

Автор: katedaisy (не зарегистрирован), дата: 2 октября, 2019 - 13:27
#permalink

I understand these difficulties, because I am studying them so I know
red ball 4


Автор: suka chu (не зарегистрирован), дата: 16 октября, 2019 - 10:40
#permalink

Thank you for sharing this great tutorial, I love your posts. shell shockers


Автор: Гость (не зарегистрирован), дата: 25 ноября, 2019 - 11:09
#permalink

basketball legends: А сессия была запущена на google.com. Поэтому, следуя политике безопасности Same Origin, браузер показал селениуму фигу.


Автор: run 3 game (не зарегистрирован), дата: 8 января, 2020 - 18:53
#permalink

Thanks for the informative post! slope


Автор: Dolly (не зарегистрирован), дата: 8 января, 2020 - 18:58
#permalink

Автор: enable flash in chrome (не зарегистрирован), дата: 15 января, 2020 - 05:36
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed, thanks candy crush soda


Автор: Sophie Miller (не зарегистрирован), дата: 6 февраля, 2020 - 15:12
#permalink

Автор: gadgets (не зарегистрирован), дата: 8 февраля, 2020 - 09:12
#permalink

After exploring a handful of the articles on your website, I seriously like your way of writing a blog. I bookmarked it to my bookmark site list and will be checking back in the near future. Take a look at my web site too and let me know how you feel.
spectrum router login


Автор: goal ken (не зарегистрирован), дата: 27 февраля, 2020 - 07:05
#permalink

This is a great thing, I think everyone feels this information is very valuable, thank you happy wheels


Автор: Samantha Charles (не зарегистрирован), дата: 28 февраля, 2020 - 09:42
#permalink

Thanks for your article! I have read through some similar topics! However, your post has given me a very special impression, unlike other posts. I hope you continue to have valuable articles like this or more to share with everyone! WiFi Rental


Автор: Гостьduck (не зарегистрирован), дата: 14 апреля, 2020 - 06:49
#permalink

Great article. It helps a lot for my work. Thanks for sharing these effective and helpful ways.
vex 3


Автор: binjin (не зарегистрирован), дата: 14 апреля, 2020 - 07:09
#permalink

Your feedback helps me a lot, A very meaningful event, I hope everything will go well temple run


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:47
#permalink

Wow the blog you give us is amazing, no wonder many people want to read this. https://celebrityinsider.org/


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:48
#permalink

I will recomend this blog to all of my friends. Great article.
https://happygamer.com/


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:50
#permalink

Thank you for this inspiring blog. I wait for more
https://ballstepded.com/


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:50
#permalink

I learned so much from this blog. Good inforamtion. https://fixoserror.com/


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:51
#permalink

I wait for more.Great article.
https://premiereretail.com


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:51
#permalink

I stumbled across this blog.Great article. https://tecsprint.com


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:52
#permalink

Thank you for this amazing blog. Congratulations.
https://howtolose10poundsinaweek.com


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:52
#permalink

The things i see here are very informative. Keep going. https://bargainistafashionista.com


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:53
#permalink

I can say that is one of the best articles out on the internet. https://bankncard.com


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:53
#permalink

I readed all the article. So informative https://vhan.net


Автор: Гость (не зарегистрирован), дата: 10 сентября, 2020 - 16:22
#permalink

This is one of the best sites i have found on the internet until now. Nice article keep going.
https://millikenconstructioninc.com/


Автор: Гость (не зарегистрирован), дата: 11 сентября, 2020 - 16:15
#permalink

Thanks for the information, very clear and simple. I will try to use it.Love the way you write. Working my way through your article links
https://vvhen.to/


Автор: Гость (не зарегистрирован), дата: 15 сентября, 2020 - 12:09
#permalink

This is one of the best articles i found on the blogs around the internet. I am really interested in seeing more of this. Keep going with the great work!
https://gzgjskpzz1m.ga


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 10:56
#permalink

First of all ,you have picked a very unique theme . I think i might design something similar for a future project that i want to build .
On top of that ,i in truth enjoy most of your content pieces and your different point of view.
Thank you https://seoconsultants24.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 11:34
#permalink

Nice information, many thanks to the author. It is incomprehensible to me now, but in general, the usefulness and significance is overwhelming.https://seokarma24.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 15:20
#permalink

I have reviewed the article many times and I find it very impressive. The information is extremely useful especially the last part I care about that information very much. I have been looking for this certain information for a long time.
https://packseo.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2020 - 16:58
#permalink

I’m gone to tell my little brother, that he should
also pay a quick visit this blog on regular basis to take updated from hottest information.
https://connectorseo.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2020 - 17:06
#permalink

You have made some really good points there. I looked on the web to find out
more about the issue and found most individuals will go along with your views on this website
https://digitalseo24h.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2020 - 17:13
#permalink

Fantastic blog! Do you have any helpful hints for aspiring writers?
I’m hoping to start my own site soon but I’m a little lost on everything.
https://sweetseo24h.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2020 - 18:16
#permalink

I am hoping the same best effort from you in the future as well. In fact your creative writing skills has inspired me.
https://fancyseo24h.blogspot.com/


Автор: JS Junior (не зарегистрирован), дата: 28 сентября, 2020 - 23:30
#permalink

Thanks for your guide to using the webdriver selenium. With the help of your code, I managed to make an automatic program for my site with free windows 10 themes


Автор: JSJuniors (не зарегистрирован), дата: 29 сентября, 2020 - 00:50
#permalink

Thanks for your guide to using the web driver. Using your code, I was able to automatically test my site with free windows 10 themes for errors


Автор: Гость (не зарегистрирован), дата: 29 сентября, 2020 - 16:25
#permalink

You have made some really good points there. I looked on the web to find out
more about the issue and found most individuals will go along with your views on this website
https://phoenixseogeek.com/


Автор: Гость (не зарегистрирован), дата: 1 октября, 2020 - 21:53
#permalink

First of all ,you have picked a very unique theme . I think i might design something similar for a future project that i want to build .
On top of that ,i in truth enjoy most of your content pieces and your different point of view.
Thank you


Автор: Гость (не зарегистрирован), дата: 1 октября, 2020 - 21:56
#permalink

Nice information, many thanks to the author. It is incomprehensible to me now, but in general, the usefulness and significance is overwhelming.
https://zgjskpzz1m.ga/


Автор: basketball legends (не зарегистрирован), дата: 9 ноября, 2020 - 11:19
#permalink

This topic is very interesting and I am interested but do not know where to find, thankfully you create this topic, hope everyone will help me run 3


Автор: loctala (не зарегистрирован), дата: 9 ноября, 2020 - 11:21
#permalink

Your feedback helps me a lot, A very meaningful event, I hope everything will go well basketball legends


Автор: koka (не зарегистрирован), дата: 9 ноября, 2020 - 11:36
#permalink

Your feedback helps me a lot, A very meaningful event, I hope everything will go well happy wheels


Автор: 먹튀검증 (не зарегистрирован), дата: 14 ноября, 2020 - 17:18
#permalink

I am happy to find 먹튀검증


Автор: 대출 (не зарегистрирован), дата: 14 ноября, 2020 - 17:19
#permalink

your distinguished way of writing the post. Now you make it easy for me to understand and implement the concept.대출


Автор: 안전놀이터 (не зарегистрирован), дата: 3 декабря, 2020 - 07:39
#permalink

What a nice comment!Nice to meet you. I live in 안전한놀이터 a different country from you. Your writing will be of great help to me and to many other people living in our country. I was looking for a post like this, but I finally found 안전놀이터.


Автор: 안전놀이터 (не зарегистрирован), дата: 3 декабря, 2020 - 07:39
#permalink

I think a lot of articles related to 안전놀이터 are disappearing someday. That's why it's very hard to find, but I'm very fortunate to read your writing. When you come to my site, I have collected articles related to this. My site name is 메이저놀이터.


Автор: 안전놀이터 (не зарегистрирован), дата: 3 декабря, 2020 - 07:39
#permalink

I think a lot of articles related to 안전놀이터 are disappearing someday. That's why it's very hard to find, but I'm very fortunate to read your writing. When you come to my site, I have collected articles related to this. My site name is 메이저놀이터.


Автор: 안전놀이터 (не зарегистрирован), дата: 3 декабря, 2020 - 07:39
#permalink

We are looking for a lot of data on this item. In the meantime, this is the perfect article I was looking for 안전놀이터.What I see with my own eyes is the same article when I lead about 토토커뮤니티사이트. and I was looking for. The content is very similar to my article, so can you come to my 토토커뮤니티 and compare it?


Автор: 안전놀이터 (не зарегистрирован), дата: 3 декабря, 2020 - 07:39
#permalink

Hello! Nice to meet you. First of all, I thank you very much for 안전놀이터 providing us with this variety of information. I also run a site with a lot of information. In general, there are a lot of materials related to 토토커뮤니티. If you have time, please visit my site 토토커뮤니티사이트!


Автор: 안전놀이터 (не зарегистрирован), дата: 3 декабря, 2020 - 07:40
#permalink

Your information was very useful to me. That's exactly what I've been looking for 안전놀이터!


Автор: Гость (не зарегистрирован), дата: 10 декабря, 2020 - 20:10
#permalink

This is highly information, crisp and clear. You have a way of writing compelling information that sparks much interest.
https://larkenequity.com/ https://larkenequity.com//


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2020 - 17:19
#permalink

Wow very good post, please dont stop posting things like this because ie really enjoy this
https://hrma-llc.com/
https://hrma-llc.com/


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2020 - 17:33
#permalink

You are a very persuasive writer. I can see this in your article. You have a way of writing compelling information that sparks much interest.
https://nuestropsicologoenmadrid.com/
https://nuestropsicologoenmadrid.com/


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2020 - 18:16
#permalink

I wish more authors of this type of content Wow.!This is highly information, crisp and clear. You have a way of writing compelling information that sparks much interest.!!!
https://cremationconsultancy.com/ https://cremationconsultancy.com//


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2020 - 18:52
#permalink

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post!
https://i-repaircenter.nl/
https://i-repaircenter.nl/


Автор: Гость (не зарегистрирован), дата: 14 декабря, 2020 - 20:22
#permalink

I really thank you for the valuable info on this great subject and look forward to more great posts. Thanks a lot for enjoying this beauty article with me.
https://zoekmachineservices.nl/
https://zoekmachineservices.nl/


Автор: Гость (не зарегистрирован), дата: 15 декабря, 2020 - 16:09
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed
https://hetonderdelenhuis-emmen.nl/ https://hetonderdelenhuis-emmen.nl/


Автор: Гость (не зарегистрирован), дата: 15 декабря, 2020 - 16:28
#permalink

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post!
https://casinoonline-bet.com/
https://casinoonline-bet.com/


Автор: Гость (не зарегистрирован), дата: 15 декабря, 2020 - 16:40
#permalink

Great post! I am actually getting ready to across this information, is very helpful my friend. Also great blog here with all of the valuable information you have. Keep up the good work you are doing here
https://restorationdoctorva.com/
https://restorationdoctorva.com/


Автор: Гость (не зарегистрирован), дата: 15 декабря, 2020 - 17:49
#permalink

You are a very persuasive writer. I can see this in your article. You have a way of writing compelling information that sparks much interest.
https://fixoserror.com/
https://fixoserror.com/


Автор: Гость (не зарегистрирован), дата: 16 декабря, 2020 - 18:22
#permalink

Wow very good post, please dont stop posting things like this because ie really enjoy this
https://vvhen.to/
https://vvhen.to/


Автор: Гость (не зарегистрирован), дата: 16 декабря, 2020 - 21:24
#permalink

You are a very persuasive writer. I can see this in your article. You have a way of writing compelling information that sparks much interest.
https://millikenconstructioninc.com/
https://millikenconstructioninc.com/


Автор: Гость (не зарегистрирован), дата: 21 декабря, 2020 - 17:26
#permalink

You are a very persuasive writer. I can see this in your article. You have a way of writing compelling information that sparks much interest.
https://findcosmeticsurgeons.net/
https://findcosmeticsurgeons.net/


Автор: shemales in edinburgh (не зарегистрирован), дата: 24 августа, 2021 - 14:54
#permalink

shemales in edinburgh is great web place for free chat contacts in UK


Автор: Гость (не зарегистрирован), дата: 21 декабря, 2020 - 18:52
#permalink

I high appreciate this post. It’s hard to find the good from the bad sometimes, but I think you’ve nailed it!
https://safetytechnology.com
https://safetytechnology.com


Автор: Гость (не зарегистрирован), дата: 21 декабря, 2020 - 18:53
#permalink

I loved your post so much I became a fan of you, promise that you will continue to share such good and knowledgeable posts even further, we will be waiting for your post thank you.
https://bestpestcontrolservices.com.au
https://bestpestcontrolservices.com.au


Автор: Гость (не зарегистрирован), дата: 22 декабря, 2020 - 18:46
#permalink

It is wonderful to be here with everyone, I have a lot of knowledge from what you share, to say thank you, the information and knowledge here helps me a lot
https://bankncard.com/
https://bankncard.com/


Автор: Гость (не зарегистрирован), дата: 22 декабря, 2020 - 19:12
#permalink

Thank you so much for sharing this great blog.Very inspiring and helpful too.Hope you continue to share more of your ideas.I will definitely love to read.
https://bargainistafashionista.com/
https://bargainistafashionista.com/


Автор: Гость (не зарегистрирован), дата: 22 декабря, 2020 - 19:24
#permalink

Your information was very useful to me. That's exactly what I've been looking for
https://howtolose10poundsinaweek.com/
https://howtolose10poundsinaweek.com/


Автор: Гость (не зарегистрирован), дата: 22 декабря, 2020 - 19:42
#permalink

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post.!
https://tecsprint.com/
https://tecsprint.com/


Автор: Гость (не зарегистрирован), дата: 22 декабря, 2020 - 19:56
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.
https://premiereretail.com/
https://premiereretail.com/


Автор: Гость (не зарегистрирован), дата: 22 декабря, 2020 - 23:50
#permalink

The post is written in very a good manner and it contains many useful information for me.
https://happygamer.com/
https://happygamer.com/


Автор: Гость (не зарегистрирован), дата: 24 декабря, 2020 - 21:08
#permalink

Now with coronavirus is really interesting to read things liek this on the internet when you stay at home
https://closetsphoenix.com/
https://closetsphoenix.com/


Автор: Гость (не зарегистрирован), дата: 24 декабря, 2020 - 22:02
#permalink

Wow very good post, please dont stop posting things like this because ie really enjoy this
https://caboplatinum.com/
https://caboplatinum.com/


Автор: Гость (не зарегистрирован), дата: 25 декабря, 2020 - 15:05
#permalink

Thank you so much for sharing this great blog.Very inspiring and helpful too.Hope you continue to share more of your ideas.I will definitely love to read.
https://zacjohnson.com/
https://zacjohnson.com/


Автор: Гость (не зарегистрирован), дата: 25 декабря, 2020 - 15:27
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.
https://blogreign.com/
https://blogreign.com/


Автор: Гость (не зарегистрирован), дата: 25 декабря, 2020 - 17:39
#permalink

The post is written in very a good manner and it contains many useful information for me.
https://blogging.org/
https:https://blogging.org/


Автор: Гость (не зарегистрирован), дата: 25 декабря, 2020 - 17:47
#permalink

Very inspiring and helpful
https://blogninja.com/
https://blogninja.com/


Автор: Гость (не зарегистрирован), дата: 25 декабря, 2020 - 18:23
#permalink

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post.!
https://phoenixseogeek.com/
https://phoenixseogeek.com/


Автор: Гость (не зарегистрирован), дата: 26 декабря, 2020 - 15:34
#permalink

Thank you for such a well written article. It’s full of insightful information and entertaining descriptions. Your point of view is the best among many.
https://extremevaporizers.com/
https://extremevaporizers.com/


Автор: Гость (не зарегистрирован), дата: 26 декабря, 2020 - 15:56
#permalink

this is really nice to read..informative post is very good to read..thanks a lot!
https://usemybee.com/
https://usemybee.com/


Автор: Гость (не зарегистрирован), дата: 28 декабря, 2020 - 15:45
#permalink

Now with coronavirus is really interesting to read things liek this on the internet when you stay at home
https://spacnetwork.com/
https://spacnetwork.com/


Автор: Гость (не зарегистрирован), дата: 1 января, 2021 - 22:01
#permalink

Buying in bulk will always be a better business decision than buying only a few nowhere and there. I would do it on a regular basis so that I can save a lot of money which in turn I will turn those profits to benefit the company as a whole rather than having only a few benefits from the success of a company. Besides, you are going to save a lot on shipping also because all your items will be in just one box. With that said, if you want, you can click Qualquer que seja o site to get the game which is now available on https://toyblast.onl/.


Автор: Гость (не зарегистрирован), дата: 7 января, 2021 - 17:41
#permalink

Very interesting discussion glad that I came across such informative post. Keep up the good work friend
https://pestcontrolcanberraarea.com.au
https://pestcontrolcanberraarea.com.au


Автор: Гость (не зарегистрирован), дата: 12 января, 2021 - 22:20
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed
https:https://emergencydental247.com/ https://emergencydental247.com/o/


Автор: Гость (не зарегистрирован), дата: 12 января, 2021 - 22:21
#permalink

It’s hard to find the good from the bad sometimes, but I think you’ve nailed it!
audigitalsolutions.com
audigitalsolutions.com


Автор: Гость (не зарегистрирован), дата: 12 января, 2021 - 22:25
#permalink

Great website and the content you shared is very informational and useful.
https://microjobs24.de https://microjobs24.de


Автор: Tarun Sharma (не зарегистрирован), дата: 22 января, 2021 - 17:46
#permalink

One of the best post I have ever read. I honestly congratulate to you for this post this is really helpful for me. https://matkaguessing.in/


Автор: Гость (не зарегистрирован), дата: 22 января, 2021 - 19:42
#permalink

It is wonderful to be here with everyone, I have a lot of knowledge from what you share, to say thank you, the information and https://audigitalsolutions.com/
https://audigitalsolutions.com/


Автор: children's lighting (не зарегистрирован), дата: 23 января, 2021 - 11:38
#permalink

Nice information, many thanks to the author.


Автор: children's lighting (не зарегистрирован), дата: 23 января, 2021 - 11:38
#permalink

Nice information, many thanks to the author.


Автор: Гость (не зарегистрирован), дата: 27 января, 2021 - 12:37
#permalink

Now with coronavirus is really interesting to read things liek this on the internet when you stay at home
https://plasticpalletsales.com
https://plasticpalletsales.com


Автор: Гость (не зарегистрирован), дата: 27 января, 2021 - 17:25
#permalink

I have bookmarked your blog, the articles are way better than other similar blogs.. thanks for a great blog!
https://megabonuscasino.nl/
https://megabonuscasino.nl/


Автор: Гость (не зарегистрирован), дата: 27 января, 2021 - 17:51
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed
https://vosairservices.com/
https://vosairservices.com/


Автор: Гость (не зарегистрирован), дата: 28 января, 2021 - 15:31
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.
https://entutorado.com/
https://entutorado.com/


Автор: Lalit Sharma (не зарегистрирован), дата: 30 января, 2021 - 13:09
#permalink

Honestly I found something new from this beautiful post. I am really thankful to you for this awesome post. https://matkaplay.net


Автор: Vinay Pathak (не зарегистрирован), дата: 5 февраля, 2021 - 15:15
#permalink

Love to read this amazing and helpful post. I would like to thanks to you for this beautiful post.
https://navratnaonline.com/


Автор: Jayesh (не зарегистрирован), дата: 6 февраля, 2021 - 06:30
#permalink


This is so much impressive. Atleast different from other thought and I am happy for your information. Well do and write more about this topic.


Автор: Гость (не зарегистрирован), дата: 10 февраля, 2021 - 14:31
#permalink

Hey there, You have done a fantastic job. I will definitely digg it and personally recommend to my friends. I am confident they'll be benefited from this website.
https://atlanticflagpole.com
https://atlanticflagpole.com


Автор: Гость (не зарегистрирован), дата: 10 февраля, 2021 - 14:34
#permalink

Hey there, You have done a fantastic job. I will definitely digg it and personally recommend to my friends. I am confident they'll be benefited from this website.
https://atlanticflagpole.com
https://atlanticflagpole.com


Автор: Гость (не зарегистрирован), дата: 12 февраля, 2021 - 19:24
#permalink

I appreciate, lead to I found just what I used to be taking a look for. You've ended my four day lengthy hunt! God Bless you man. Have a nice day. Bye
https://gold4vanilla.com/
https://gold4vanilla.com/


Автор: Гость (не зарегистрирован), дата: 18 февраля, 2021 - 13:04
#permalink

It is appropriate time to make a few plans for the future and it's time to be happy. I've learn this publish and if I may just I want to counsel you some attention-grabbing things or tips. Maybe you could write subsequent articles regarding this article. I wish to learn even more issues approximately it!
https://schmidtchristmasmarket.com/
https://schmidtchristmasmarket.com/


Автор: Гость (не зарегистрирован), дата: 3 марта, 2021 - 12:24
#permalink

Hi I am so delighted I found your webpage, I really found you by mistake, while I was browsing on Bing for something else, Anyhow I am here now and would just like to say many thanks for a remarkable post and a all round enjoyable blog (I also love the theme/design), I don’t have time to go through it all at the minute but I have bookmarked it and also included your RSS feeds, so when I have time I will be back to read much more, Please do keep up the excellent work.
https://eureka-examens.nl/
https://eureka-examens.nl/


Автор: Гость (не зарегистрирован), дата: 3 марта, 2021 - 12:36
#permalink

Hello, i believe that i noticed you visited my weblog so i came to return the favor?.I'm attempting to in finding issues to improve my web site!I suppose its adequate to make use of some of your ideas!!
https://cbtresultaatuitopleiden.nl/
https://cbtresultaatuitopleiden.nl/


Автор: İnstagram takipçi satın al (не зарегистрирован), дата: 4 марта, 2021 - 00:08
#permalink

Ucuz takipçi ve tamamı türk gerçek takipçi satın almak için instagram takipçi satın al sayfasına gidebilirsin. İnstagram takipçi satın al sayesinde sizde takipçi satın alabilirsiniz.


Автор: 온라인바둑이 (не зарегистрирован), дата: 9 марта, 2021 - 09:37
#permalink

Unbelievable!! The problem I was thinking about was solved.온라인바둑이You are really awesome.


Автор: 토토사이트 (не зарегистрирован), дата: 9 мая, 2021 - 13:40
#permalink

Howdy! Do you know if they make any plugins to assist with SEO? I’m trying to get my blog to rank for some targeted keywords but I’m not seeing very good results. If you know of any please share. Cheers! 토토사이트


Автор: crazy shooters (не зарегистрирован), дата: 7 июня, 2021 - 20:59
#permalink

very good content .... goo ahead


Автор: francisco (не зарегистрирован), дата: 9 июня, 2021 - 05:58
#permalink

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


Автор: ding dong (не зарегистрирован), дата: 28 июня, 2021 - 12:25
#permalink

It's a confident artist that lets the guest vocalist shine. His smile is so generous in acknowledging her vocal gymnastics. friday night funkin


Автор: Sex Chat East Midlands (не зарегистрирован), дата: 29 июня, 2021 - 10:05
#permalink

Sex Chat East Midlands is the best web place for casual sex chat on the UK check out right now and you will not regret it


Автор: london sex contacts (не зарегистрирован), дата: 29 июня, 2021 - 12:23
#permalink

If you are lookin for casual sex contacts in UK you must to visit london sex contacts


Автор: casual sex south england (не зарегистрирован), дата: 29 июня, 2021 - 17:02
#permalink

casual sex south england is the most popular web place for free sexy chat with local ladies in UK


Автор: Online Matka Games (не зарегистрирован), дата: 2 августа, 2021 - 06:46
#permalink

I am like to you know that your unique concept really helpful for me and I am surely share this thought to my community.


Автор: Rishi Mittal (не зарегистрирован), дата: 2 августа, 2021 - 06:47
#permalink

Thank you very much for this unique information. I am really thankful to you for this concept. Highly recommend to read this post. Online Matka Play


Автор: over (не зарегистрирован), дата: 11 августа, 2021 - 09:33
#permalink

Excellent Post regarding Thank you so much for the explanation about blog commenting thejacketzone.com


Автор: uk sex chat (не зарегистрирован), дата: 24 августа, 2021 - 12:28
#permalink

You must to visit our web platform for your own sexy chat pleasure in United Kingdom uk sex chat


Автор: 먹튀사이트 (не зарегистрирован), дата: 28 августа, 2021 - 13:11
#permalink

Many thanks for the article, I have a lot of spray lining knowledge but always learn something new. Keep up the good work and thank you again. 먹튀사이트


Автор: tweets games (не зарегистрирован), дата: 21 сентября, 2021 - 00:12
#permalink

thanks for sharing this post i love your post. visit: and play this my fav game also:


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
14 + 1 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum