Dalek.js — простое функциональное тестирование веб-приложений

    Вы знаете, что такое Selenium и/или PhantomJS? И с чем их едят? Тогда, возможно, вам будет интересен проект Dalek.js — кроссбраузерная утилита для тестирования веб-приложений.

    Dalek.js позволяет писать тесты, которые ходят по веб-страничкам, щелкают ссылки, заполняют формы, отправляют данные и делают скриншоты. То же самое и даже больше делают тесты, написанные с использованием Selenium'а или Phantom.js, в чем подвох?



    Но! Посмотрите, как прост этот тест.
    test.js
    module.exports = {
      'Page title is correct': function (test) {
        test
         .open('http://google.com')
         .assert.title().is('Google', 'It has title')
         .done();
        }
    };
    

    Открываем google.com в браузере и убеждаемся, что в заголовке страницы действительно написано 'Google'.

    Чтобы его запустить необходимо:
    а ) установить Dalek.js и драйвера для желаемых браузеров (PhantomJS работает из коробки) в директорию заранее созданного проекта node (хотя сам проект по сути не нужен)
    Например: Dalek.js + Chrome Driver
    $ npm install dalek-cli -g
    $ npm install dalekjs --save-dev
    $ npm install dalek-browser-chrome --save-dev
    

    б) и выполнить команду:
    $ dalek test.js    //для тестирования в PhantomJS
    $ dalek test.js  -b chrome    //для тестирования в Chrome
    


    Еще простой тест из документации:
    module.exports = {
    'Amazon does its thing': function (test) {
      test
        .open('http://www.amazon.com/')
        .type('#twotabsearchtextbox', 'Blues Brothers VHS')
        .click('.nav-submit-input')
        .waitForElement('#result_0')
        .assert.text('#result_0 .newaps a span').is('The Blues Brothers')
        .done();
    }
    };
    

    На Amazon'е ищем видеокассету Blues Brothers и убеждаемся, что в результатах поиска действительно есть искомое.

    Не буду дальше копипастить официальную документацию и примеры (всё подробно и понятно на www.dalekjs.com ), а попрошу поддержать проект вашим вниманием. Почему?

    Решив освоить использование PhantomJS для тестирования взамен Selenium, стал искать на каком фреймворке (Mocha,Jasmine,...) будет удобнее писать тесты. Слово за слово, и вот Google дал ссылку на этот проект. Написать тест и запустить его сначала в визуальном режиме (на Chrome), а затем в консольном (на PhantomJS ) получилось очень быстро.

    Считаю, что Dalek.js имеет несколько удобных фишек: chain-стиль вызовов функций с минимумом параметров, не требует супершаманских танцев с установкой, неплохо документирован. У проекта большое количество открытых багов и обещаний добавить функциональности (например, как минимум, хочется движений мыши, загрузки файлов в формы).

    Внимание сообщества в виде увеличения количества звездочек на GitHub'е и твитов в медиапространстве может быть хоть немного поспособствует активности разработки Dalek.js, который пилят уже примерно год несколько ребят из Германии, как считаете?

    Оф.сайт Dalek.js
    Dalek.js на GitHub
    Dalek.js в Твиттере
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 26

      +1
      так уже есть же.
      nightwatchjs.org/
        0
        Для NightWatch.js вроде как Selenium Server нужен (если я правильно понял процесс установки nightwatchjs.org/guide)?

        Хотя если поразбираться, то, может оказаться так, что бинарник в 5Мб, который устанавливается при «npm install dalek-browser-chrome --save-dev» как раз и есть запускаемый Selenium при тестах, но определенно я с этим на этапе установки dalek'а вообще не заморачивался, за что ему большое спасибо.

        А вам спасибо за альтернативу.
          +1
          Спасибо тебе добрый человек. Просто манна небесная.
          +26
          А есть метод .exterminate()?
            +3
            Нету( Как и .explain()
            Могли бы как алиас для логгера сделать)
            +10
            Если бы я и назвал что-то «Dalek», то это был бы какой-нибудь троян, который ползает по серверам и уничтожает сайты вместе с бэкапами.
              +3
              До вашего комментария как-то не думал над названием Dalek.js. «Далек» да и «далек». А тут почитал в Википедии, а оно вот как. Теперь понятно почему местами в документации упоминается Doctor Who.
                +1
                Уничтожить… Уничтожить…
                  +9
                  Название Dalek это вообще единственное, зачем я залез в этот пост :) Доктор популярен)
                  +5
                  А может это девушка, которая готовила суфле…
                  +10
                  Интересует вопрос, насколько хорошо оно справляется с лестницами?
                    0
                    Для любителей безголовых ребят всегда есть:
                    http://casperjs.org/
                      0
                      CasperJS я видел,
                      в Dalek'е понравилось, что можно при написании теста быстро прогонять его под Chrome, а дальше регулярно автоматом гонять под PhantomJS.
                      +3
                      Посмотрите на webdriver.io/. Он использует Selenium с похожим на Dalek синтаксисом, но при этом не навязывает свой тест фреймворк.
                        0
                        спасибо, тесты получаются очень похожими.
                          +1
                          webdriver.io — так же использует Selenium при этом нужно отдельно запускать его явно.
                          Из документации не сразу понятно какие браузеры он поддерживает и как их указывать.

                          Я наткнулся на dalek.js еще осенью когда он был версии 0,03.
                          Чем понравился dalek.js:
                          + отдельный веб драйвер для каждого браузера
                          + chainable syntax
                          + не нужны телодвижения для запуска Selenium (из офф документации dalek не завязан на Selenium формально)

                          из минусов:
                          — API не стабилен
                          — очень много не работающих и не реализованных на то время фич. начиная от загрузки файлов и заканчивая ожиданием закрузки контента (похоже уже реализованном в текущих версиях)
                            +2
                            >webdriver.io — так же использует Selenium при этом нужно отдельно запускать его явно.

                            Это так. При запуске же через Grunt запуск Selenium берет на себя соответствующий плагин.

                            >Из документации не сразу понятно какие браузеры он поддерживает и как их указывать.

                            Он поддерживает то же, что и Selenium. На webdriver.io/ вторая строка в примере кода: «var options = { desiredCapabilities: { browserName: 'chrome' } }»,
                            а ссылка на более подробное описание конфигурационного объекта сразу под примером кода: code.google.com/p/selenium/wiki/JsonWireProtocol#Basic_Terms_and_Concepts
                            Не вижу, какие тут могут быть проблемы с пониманием.

                            Dalek я не пробовал, и сейчас, глядя на состояние проекта на гитхабе, такого желания не возникает.
                          –6
                          Dalekjs пользуется доступом в ваши аккаунты.
                          Так что будьте осторожны.
                          Например, зайдете на youtube под своим аккаунтом, а потом обнаружите что вы подписаны на десяток левых каналов.
                            +3
                            Безусловно интересная штука Dalek.js, но, кажется, немного смешались кони, люди:

                            Решив освоить использование PhantomJS для тестирования взамен Selenium, стал искать на каком фреймворке (Mocha,Jasmine,...) будет удобнее писать тесты. Слово за слово, и вот Google дал ссылку на этот проект.

                            PhantomJS — просто «безголовый» браузер, который можно использовать и с Selenium.
                            Selenium — средство скорее приёмочного тестирования.
                            Mocha, Jasmine, QUnit сами по себе скорее библиотеки для unit-тестирования, чем для приёмочного, так как у них не всё так радужно, например, с асинхронностью (да, номинально есть поддержка, но при менее тривиальных сценариях приходится дописывать костыли и городить огород).
                            Посему читается как-то так: «Решив освоить двигатель для езды взамен автомобиля, стал искать на каком кресле (обычное, „ковш“,...) будет удобнее ездить. Слово за слово, и вот Google дал ссылку на отличный руль и педали.»
                              +2
                              А еще вот случай был: мои знакомые решили организовать фотостудию, стали плотно заниматься этим вопросом, слово за слово и в итоге купили GoPro и теперь снимают свадебные видео от первого лица.: )

                              Согласен, что есть немного бардака в моей голове и как следствие в формулировках.

                              А вот что порекомендуете для приемочного тестирования, что более-менее работает асинхронно, коли у mocha, jasmine, qunit с этим проблемы?
                                0
                                А чем именно не устраивает Selenium? Просто QUnit, например, со связкой AngularJS + RequireJS пришлось дружить руками. Да и называется он QUnit потому, что изначально предназначен для тестирования модулей, а не поведения в браузере.
                              +2
                              Dalek когда-то тоже показался интересным, решил использовать в проекте. Через неделю из-за критичного для меня отсутствия возможности загрузки файлов вкупе с болью от синтаксиса на больших тестах в итоге переписал на Casper.js + Phantom.js. А ещё собственный драйвер далека ведёт себя странно на одних и тех же тестах для разных браузеров (тут, признаюсь, не с чем сравнивать, может быть это и нормальное поведение).
                                0
                                Вот поэтому я попросил сообщество как-то подбодрить разработчиков, ибо проект интересен, но его недоделанность отталкивает в сторону других проектов. И у меня протестировать, используя firefox, не получилось — просто открывается браузер и никакого движения.
                                +1
                                Только мне дизайн dalekjs.com напомнил лихие 2000-е? )
                                  0
                                  substack тоже оттуда.
                                    0
                                    Но согласитесь, что выглядит прикольно? Не всем же сайтам быть на стандартном bootstrap'е )

                                  Only users with full accounts can post comments. Log in, please.