SlideShare a Scribd company logo
1 of 17
Download to read offline
PhantomJS
O fantasminha camarada




       Henrique Gogó
       @henriquegogo
O que é PhantomJS?

   Um "browser" webkit com API JavaScript
       completa que roda no console.

Suporte nativo a vários padrões web standards:
 DOM, seletores CSS, JSON, Ajax, Canvas e
                     SVG.
Para que serve?
  Rodar testes funcionais (de JavaScript) com
frameworks como Jasmine, QUnit ou CasperJS.

  Acessar e manipular páginas com acesso
 completo ao DOM e bibliotecas de JS como
                 jQuery.
Por que não WebRat?

    WebRat é um simulador de browser com
 capacidade de DOM, seletores CSS, de fácil
integração com RSpec, Cucumber, Test::Unit e
                   outros.

            Mas e o JavaScript?
Por que não Selenium?

 Selenium é contém uma API para você realizar
testes de aceitação em diversos browsers. Para
   isso ele levanta uma instância do browser.
Usando PhantomJS como
    engine JavaScript do Capybara

  https://github.com/jonleighton/poltergeist


require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
Ou simplesmente QUnit

$ phantomjs run-qunit.js test/index.html


Tests completed in 1528 milliseconds.
1223 tests of 1223 passed, 0 failed.
QUnit


test("a basic test example", function() {
  ok( true, "this test is fine" );
  var value = "hello";
  equal( value, "hello", "We expect value to be
hello" );
});
Exemplos
//teste.js
var page = new WebPage();
var url = "http://www.gogs.com.br/";
page.open(url, function (status) {
    //Página carregada
    phantom.exit();
});

$ phantomjs teste.js
Manipulação de DOM
var page = new WebPage();
console.log('Seu user agent é:' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent';
page.open('http://www.httpuseragent.org', function (status) {
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
        var ua = page.evaluate(function () {
            return document.getElementById('myagent').innerText;
        });
        console.log(ua);
    }
    phantom.exit();
});
Listener de requisições
var url = phantom.args[0];

var page = new WebPage();
page.onResourceRequested = function (request) {
   console.log('Request ' + JSON.stringify(request,
undefined, 4));
};
page.onResourceReceived = function (response) {
   console.log('Receive ' + JSON.stringify(response,
undefined, 4));
};
page.open(url);
page.render()
$ phantomjs rasterize.js http://www.google.com.br google.png
Blá   Blá   Blá!
Blá   Blá   Blá!
Blá   Blá   Blá!
Blá   Blá   Blá!
Blá   Blá   Blá!
Então...

Quer fazer testes de aceitação com fidelidade à
   engine WebKit (Chrome, Safari, Mobile
                  browsers)?

   Quer testar JavaScript sem precisar abrir
                  browser?

 Quer integrar com Ruby usando Capybara, ou
outras plataformas como C# (usando Chutzpah)?
PhantomJS
Perguntas?



              @henriquegogo

             www.gogs.com.br

More Related Content

What's hot

Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxThiago Paes
 
performance em jQuery apps
performance em jQuery appsperformance em jQuery apps
performance em jQuery appsDavidson Fellipe
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURLricardophp
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraCaelum
 
Javascript aplicado
Javascript aplicadoJavascript aplicado
Javascript aplicadoNuno Simaria
 
Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stackSidney Roberto
 
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSDesenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSRomulo Fagundes
 
Workshop de Selenium WebDriver.
Workshop de Selenium WebDriver.Workshop de Selenium WebDriver.
Workshop de Selenium WebDriver.GTS-CE
 
Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)kidh0
 
Como tratar múltiplos JSONps com o mesmo callback name? - FloripaJS
Como tratar múltiplos JSONps com o mesmo callback name? - FloripaJSComo tratar múltiplos JSONps com o mesmo callback name? - FloripaJS
Como tratar múltiplos JSONps com o mesmo callback name? - FloripaJSVinicius Kiatkoski Neves
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
XSS (Cross site scripting)
XSS (Cross site scripting)XSS (Cross site scripting)
XSS (Cross site scripting)Eduardo Bohrer
 
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...Rodrigo Peleias
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)Carlos Santos
 
Sist operacionais 7
Sist operacionais 7Sist operacionais 7
Sist operacionais 7Nauber Gois
 

What's hot (20)

Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com Nginx
 
performance em jQuery apps
performance em jQuery appsperformance em jQuery apps
performance em jQuery apps
 
Conhecendo mundo Node.js
Conhecendo mundo Node.jsConhecendo mundo Node.js
Conhecendo mundo Node.js
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURL
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
 
Javascript aplicado
Javascript aplicadoJavascript aplicado
Javascript aplicado
 
Apt_vagrant_chef_olavo_queiroz
Apt_vagrant_chef_olavo_queirozApt_vagrant_chef_olavo_queiroz
Apt_vagrant_chef_olavo_queiroz
 
Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stack
 
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JSDesenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
Desenvolvendo com Node.JS - Mongoose + MongoDB + Vue.JS
 
Workshop de Selenium WebDriver.
Workshop de Selenium WebDriver.Workshop de Selenium WebDriver.
Workshop de Selenium WebDriver.
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)Ajax (Asynchronous Javascript And Xml)
Ajax (Asynchronous Javascript And Xml)
 
Como tratar múltiplos JSONps com o mesmo callback name? - FloripaJS
Como tratar múltiplos JSONps com o mesmo callback name? - FloripaJSComo tratar múltiplos JSONps com o mesmo callback name? - FloripaJS
Como tratar múltiplos JSONps com o mesmo callback name? - FloripaJS
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
XSS (Cross site scripting)
XSS (Cross site scripting)XSS (Cross site scripting)
XSS (Cross site scripting)
 
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
Desenvolvimento de aplicações assíncronas, orientadas a eventos e poliglotas ...
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
 
Sist operacionais 7
Sist operacionais 7Sist operacionais 7
Sist operacionais 7
 
Tutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e UsoTutorial Dwr - Configuração e Uso
Tutorial Dwr - Configuração e Uso
 
Rest workshop
Rest workshopRest workshop
Rest workshop
 

Viewers also liked

Internet y navegador web
Internet y navegador webInternet y navegador web
Internet y navegador webAlirod19
 
Navegadores de internet
Navegadores de internet Navegadores de internet
Navegadores de internet mveb123
 
Navegadores de internet cris
Navegadores de internet crisNavegadores de internet cris
Navegadores de internet criscris13mago
 
Avaliação Heurística dos Principais Navegadores
Avaliação Heurística dos Principais NavegadoresAvaliação Heurística dos Principais Navegadores
Avaliação Heurística dos Principais NavegadoresAllan Denis
 
Desenvolvimento inteligente com Google Chrome DevTools
Desenvolvimento inteligente com Google Chrome DevToolsDesenvolvimento inteligente com Google Chrome DevTools
Desenvolvimento inteligente com Google Chrome DevToolsFábio Assunção
 
Dificuldades Diagnosticas em PAAF de mama - Marilia Cechella
Dificuldades Diagnosticas em PAAF de mama - Marilia CechellaDificuldades Diagnosticas em PAAF de mama - Marilia Cechella
Dificuldades Diagnosticas em PAAF de mama - Marilia Cechellamcechella
 
Desenvolvendo chrome extensions
Desenvolvendo chrome extensionsDesenvolvendo chrome extensions
Desenvolvendo chrome extensionsRodolfo Dias
 
Guia do F12: Chrome Developer Tools
Guia do F12: Chrome Developer ToolsGuia do F12: Chrome Developer Tools
Guia do F12: Chrome Developer ToolsLeonardo Tegon
 
Testando SAP com Selenium
Testando SAP com SeleniumTestando SAP com Selenium
Testando SAP com SeleniumEduardo Souza
 
8.2 Cell Respiration
8.2 Cell Respiration8.2 Cell Respiration
8.2 Cell Respirationdabagus
 
Zinc and zinc nickel plating
Zinc and zinc nickel platingZinc and zinc nickel plating
Zinc and zinc nickel platingcamzurv
 
Chromium (effects on health)
Chromium (effects on health)Chromium (effects on health)
Chromium (effects on health)gazelec
 
elimination reaction, addition reaction, oxydation reactions
elimination reaction, addition reaction, oxydation reactionselimination reaction, addition reaction, oxydation reactions
elimination reaction, addition reaction, oxydation reactionspravesh kumar
 
Effect of Nanoporous Anodic Aluminum Oxide (AAO) Characteristics On Solar Abs...
Effect of Nanoporous Anodic Aluminum Oxide (AAO) Characteristics On Solar Abs...Effect of Nanoporous Anodic Aluminum Oxide (AAO) Characteristics On Solar Abs...
Effect of Nanoporous Anodic Aluminum Oxide (AAO) Characteristics On Solar Abs...A Behzadmehr
 
Alternativas Evolucion Para Forms Report
Alternativas Evolucion Para Forms ReportAlternativas Evolucion Para Forms Report
Alternativas Evolucion Para Forms Reportaitorvasco
 
Operação lava jato denúncias contra oas
Operação lava jato denúncias contra oasOperação lava jato denúncias contra oas
Operação lava jato denúncias contra oasJosé Ripardo
 

Viewers also liked (20)

Navegadores
NavegadoresNavegadores
Navegadores
 
World Wide Web y Navegadores
World Wide Web y Navegadores World Wide Web y Navegadores
World Wide Web y Navegadores
 
Internet y navegador web
Internet y navegador webInternet y navegador web
Internet y navegador web
 
Navegadores de internet
Navegadores de internet Navegadores de internet
Navegadores de internet
 
Navegadores de internet cris
Navegadores de internet crisNavegadores de internet cris
Navegadores de internet cris
 
Avaliação Heurística dos Principais Navegadores
Avaliação Heurística dos Principais NavegadoresAvaliação Heurística dos Principais Navegadores
Avaliação Heurística dos Principais Navegadores
 
Desenvolvimento inteligente com Google Chrome DevTools
Desenvolvimento inteligente com Google Chrome DevToolsDesenvolvimento inteligente com Google Chrome DevTools
Desenvolvimento inteligente com Google Chrome DevTools
 
Dificuldades Diagnosticas em PAAF de mama - Marilia Cechella
Dificuldades Diagnosticas em PAAF de mama - Marilia CechellaDificuldades Diagnosticas em PAAF de mama - Marilia Cechella
Dificuldades Diagnosticas em PAAF de mama - Marilia Cechella
 
Desenvolvendo chrome extensions
Desenvolvendo chrome extensionsDesenvolvendo chrome extensions
Desenvolvendo chrome extensions
 
Guia do F12: Chrome Developer Tools
Guia do F12: Chrome Developer ToolsGuia do F12: Chrome Developer Tools
Guia do F12: Chrome Developer Tools
 
Browser Mobile - Chrome
Browser Mobile - ChromeBrowser Mobile - Chrome
Browser Mobile - Chrome
 
Testando SAP com Selenium
Testando SAP com SeleniumTestando SAP com Selenium
Testando SAP com Selenium
 
8.2 Cell Respiration
8.2 Cell Respiration8.2 Cell Respiration
8.2 Cell Respiration
 
Zinc and zinc nickel plating
Zinc and zinc nickel platingZinc and zinc nickel plating
Zinc and zinc nickel plating
 
Mesin AOP / PLASMA
Mesin AOP / PLASMAMesin AOP / PLASMA
Mesin AOP / PLASMA
 
Chromium (effects on health)
Chromium (effects on health)Chromium (effects on health)
Chromium (effects on health)
 
elimination reaction, addition reaction, oxydation reactions
elimination reaction, addition reaction, oxydation reactionselimination reaction, addition reaction, oxydation reactions
elimination reaction, addition reaction, oxydation reactions
 
Effect of Nanoporous Anodic Aluminum Oxide (AAO) Characteristics On Solar Abs...
Effect of Nanoporous Anodic Aluminum Oxide (AAO) Characteristics On Solar Abs...Effect of Nanoporous Anodic Aluminum Oxide (AAO) Characteristics On Solar Abs...
Effect of Nanoporous Anodic Aluminum Oxide (AAO) Characteristics On Solar Abs...
 
Alternativas Evolucion Para Forms Report
Alternativas Evolucion Para Forms ReportAlternativas Evolucion Para Forms Report
Alternativas Evolucion Para Forms Report
 
Operação lava jato denúncias contra oas
Operação lava jato denúncias contra oasOperação lava jato denúncias contra oas
Operação lava jato denúncias contra oas
 

Similar to PhantomJS - O 'browser' headless para testes e automação

Apresentação sobre MVVMC
Apresentação sobre MVVMCApresentação sobre MVVMC
Apresentação sobre MVVMCAlisson Agiani
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScriptThiago Poiani
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end seleniumQualister
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EERodrigo Cândido da Silva
 
ODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryMarketing Digital ODIG
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com AjaxAdler Medrado
 
jQuery e ASP.Net MVC a dupla dinâmica
jQuery e ASP.Net MVC a dupla dinâmicajQuery e ASP.Net MVC a dupla dinâmica
jQuery e ASP.Net MVC a dupla dinâmicaVictor Cavalcante
 
Fisl 11 - Ecossistema Ruby on Rails
Fisl 11 - Ecossistema Ruby on RailsFisl 11 - Ecossistema Ruby on Rails
Fisl 11 - Ecossistema Ruby on RailsFabio Akita
 
Como criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersComo criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersElias Nogueira
 
PHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkPHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkRafael Dohms
 
Testando frontend utilizando ferraments JS
Testando frontend utilizando ferraments JSTestando frontend utilizando ferraments JS
Testando frontend utilizando ferraments JSFernando Fabricio
 

Similar to PhantomJS - O 'browser' headless para testes e automação (20)

Apresentação sobre MVVMC
Apresentação sobre MVVMCApresentação sobre MVVMC
Apresentação sobre MVVMC
 
Html5
Html5Html5
Html5
 
introdução a ajax
introdução a ajaxintrodução a ajax
introdução a ajax
 
Servlets e JSP
Servlets e JSPServlets e JSP
Servlets e JSP
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScript
 
Plack
PlackPlack
Plack
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end selenium
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
 
ODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQueryODIG - Javascript, DOM Elements e jQuery
ODIG - Javascript, DOM Elements e jQuery
 
servlet-introducao
servlet-introducaoservlet-introducao
servlet-introducao
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
Minicurso de PHP Com Ajax
Minicurso de PHP Com AjaxMinicurso de PHP Com Ajax
Minicurso de PHP Com Ajax
 
jQuery e ASP.Net MVC a dupla dinâmica
jQuery e ASP.Net MVC a dupla dinâmicajQuery e ASP.Net MVC a dupla dinâmica
jQuery e ASP.Net MVC a dupla dinâmica
 
GUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EEGUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EE
 
Fisl 11 - Ecossistema Ruby on Rails
Fisl 11 - Ecossistema Ruby on RailsFisl 11 - Ecossistema Ruby on Rails
Fisl 11 - Ecossistema Ruby on Rails
 
Como criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containersComo criar e executar testes paralelos web usando Selenium e containers
Como criar e executar testes paralelos web usando Selenium e containers
 
PHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkPHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao Framework
 
Java Web Fácil com VRaptor
Java Web Fácil com VRaptorJava Web Fácil com VRaptor
Java Web Fácil com VRaptor
 
Testando frontend utilizando ferraments JS
Testando frontend utilizando ferraments JSTestando frontend utilizando ferraments JS
Testando frontend utilizando ferraments JS
 
Web Performance Client Side
Web Performance Client SideWeb Performance Client Side
Web Performance Client Side
 

More from Henrique Gogó

JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no FrontendHenrique Gogó
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosHenrique Gogó
 
Backbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webBackbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webHenrique Gogó
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Henrique Gogó
 
Criando aplicações JavaScript com CouchApp + Sammy.js
Criando aplicações JavaScript com CouchApp + Sammy.jsCriando aplicações JavaScript com CouchApp + Sammy.js
Criando aplicações JavaScript com CouchApp + Sammy.jsHenrique Gogó
 
Urls amigáveis em JavaScript com Sammy JS
Urls amigáveis em JavaScript com Sammy JSUrls amigáveis em JavaScript com Sammy JS
Urls amigáveis em JavaScript com Sammy JSHenrique Gogó
 

More from Henrique Gogó (10)

Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Introdução React.js
Introdução React.jsIntrodução React.js
Introdução React.js
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no Frontend
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectados
 
Backbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webBackbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações web
 
NoSQL + Node.js
NoSQL + Node.jsNoSQL + Node.js
NoSQL + Node.js
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
 
Criando aplicações JavaScript com CouchApp + Sammy.js
Criando aplicações JavaScript com CouchApp + Sammy.jsCriando aplicações JavaScript com CouchApp + Sammy.js
Criando aplicações JavaScript com CouchApp + Sammy.js
 
Conhecendo o CouchDB
Conhecendo o CouchDBConhecendo o CouchDB
Conhecendo o CouchDB
 
Urls amigáveis em JavaScript com Sammy JS
Urls amigáveis em JavaScript com Sammy JSUrls amigáveis em JavaScript com Sammy JS
Urls amigáveis em JavaScript com Sammy JS
 

PhantomJS - O 'browser' headless para testes e automação

  • 1. PhantomJS O fantasminha camarada Henrique Gogó @henriquegogo
  • 2. O que é PhantomJS? Um "browser" webkit com API JavaScript completa que roda no console. Suporte nativo a vários padrões web standards: DOM, seletores CSS, JSON, Ajax, Canvas e SVG.
  • 3. Para que serve? Rodar testes funcionais (de JavaScript) com frameworks como Jasmine, QUnit ou CasperJS. Acessar e manipular páginas com acesso completo ao DOM e bibliotecas de JS como jQuery.
  • 4. Por que não WebRat? WebRat é um simulador de browser com capacidade de DOM, seletores CSS, de fácil integração com RSpec, Cucumber, Test::Unit e outros. Mas e o JavaScript?
  • 5. Por que não Selenium? Selenium é contém uma API para você realizar testes de aceitação em diversos browsers. Para isso ele levanta uma instância do browser.
  • 6. Usando PhantomJS como engine JavaScript do Capybara https://github.com/jonleighton/poltergeist require 'capybara/poltergeist' Capybara.javascript_driver = :poltergeist
  • 7. Ou simplesmente QUnit $ phantomjs run-qunit.js test/index.html Tests completed in 1528 milliseconds. 1223 tests of 1223 passed, 0 failed.
  • 8. QUnit test("a basic test example", function() { ok( true, "this test is fine" ); var value = "hello"; equal( value, "hello", "We expect value to be hello" ); });
  • 9. Exemplos //teste.js var page = new WebPage(); var url = "http://www.gogs.com.br/"; page.open(url, function (status) { //Página carregada phantom.exit(); }); $ phantomjs teste.js
  • 10. Manipulação de DOM var page = new WebPage(); console.log('Seu user agent é:' + page.settings.userAgent); page.settings.userAgent = 'SpecialAgent'; page.open('http://www.httpuseragent.org', function (status) { if (status !== 'success') { console.log('Unable to access network'); } else { var ua = page.evaluate(function () { return document.getElementById('myagent').innerText; }); console.log(ua); } phantom.exit(); });
  • 11. Listener de requisições var url = phantom.args[0]; var page = new WebPage(); page.onResourceRequested = function (request) { console.log('Request ' + JSON.stringify(request, undefined, 4)); }; page.onResourceReceived = function (response) { console.log('Receive ' + JSON.stringify(response, undefined, 4)); }; page.open(url);
  • 12. page.render() $ phantomjs rasterize.js http://www.google.com.br google.png
  • 13. Blá Blá Blá! Blá Blá Blá! Blá Blá Blá! Blá Blá Blá! Blá Blá Blá!
  • 14. Então... Quer fazer testes de aceitação com fidelidade à engine WebKit (Chrome, Safari, Mobile browsers)? Quer testar JavaScript sem precisar abrir browser? Quer integrar com Ruby usando Capybara, ou outras plataformas como C# (usando Chutzpah)?
  • 16.
  • 17. Perguntas? @henriquegogo www.gogs.com.br