SlideShare uma empresa Scribd logo
1 de 11
Baixar para ler offline
T
estes Funcionais	
Watir Webdriver + Ruby
Ruby
Dinâmica
Interpretada
OO
Java vs Ruby
public int retornaSum(int num1, int num2) {	
	
return num1 + num2;	
}

public void forExample() {	
	
String[] nomes = {"Meddle", "The Wall”,”DSOT","Pulse"};	

!

	
	
	
}	

for (int i = 0; i < nomes.length; i++) {	
	
System.out.println(nomes[i]);	
}	

!

def retorna_sum(num1, num2)
num1 + num2
end

!

def for_example
array = ["Meddle","The Wall","DSOT","Pulse"]

!
!
!

array.length.times do |x|
puts array[x]
end
#mesmo output
array.length.times { |x| puts array[x] }

end

!
	
	
	
	
	
	

!
public void forEachExample() {	
	
String[] nomes = {"Meddle", "The Wall”,"DSOT","Pulse"};	
	
for(String nome: nomes) {	
	
	
System.out.println(nome);	
	
}	
	
	
}

def for_each_example
array = ["Meddle","The Wall","DSOT","Pulse"]

!
!

end

array.each { |x| puts x }
public void javaHash() {	
	
HashMap<String,String> album = new HashMap<String, String>();	
	
album.put("nome", "Meddle");	
	
	
	
System.out.println(album.get("nome"));	
	
	
}

!
	
	
	
	
	
	
	
	
	
	
	

def ruby_hash
album = {:nome => "Meddle", :banda => "Pink Floyd"}
#album = {nome: "Meddle", banda: "Pink Floyd"}

!
!

puts hash[:nome]

end

!
public void arrayBool() {	
	
Boolean[] arrayBool= {false,false,true,false};	
	
Boolean resultado = false;	
	
	
	
for (int i = 0; i < arrayBool.length; i++) {	
	
	
if (arrayBool[i])	
	
	
	
resultado = true;	
	
}	
	
	
	
System.out.println(resultado);	
}

def arrayBool
arrayBool = [false, false, true, false]

!
!

end

puts arrayBool.any?
#puts arrayBool.all?
Ruby Class
class Pessoa
attr_accessor :name, :last_name

!

!

!

def initialize(name, last_name)
self.name = name
self.last_name = last_name
end
def full_name
self.name + " " + self.last_name
end

end

!

p = Pessoa.new("rafael", "lima")
puts p.full_name
Basic Watir
require 'watir-webdriver'

!
browser
!

= Watir::Browser.new :firefox

browser.goto "http://demo.moodle.net/login/index.php"
browser.text_field(id: 'username').set 'admin'
browser.text_field(id: 'password').set 'sandbox'
browser.button(id: 'loginbtn').click
puts browser.p(id: 'frontpagesettings').exists? && browser.span(xpath: "//span[text()='Site
administration']").exists?
Page Object Pattern
Cada página da aplicação terá uma Page
Object
Elimina duplicação
Fácil de manter
Robusto
Instalação
instalar Rbenv ou RVM
Ruby
windows
unix
instalar o bundler (link)
montar estrutura de arquivos igual ao

“page_object_tree.txt” ou instalar o testgen
executar "bundle install" no root do projeto
executar “bundle exec cucumber” no root do projeto
T
estGen
Gem que cria monta o projeto automaticamente
Repositório
Gem install testgen
Executar "testgen project <project_name> -pageobject-driver=watir --with-lib"
Referência
Códigos e apresentação
https://github.com/rafalima/watir_webdriver
Watir-webdriver
http://watirwebdriver.com/
http://watir.com/
Page Object
https://github.com/watir/watir-webdriver/wiki/Page-Objects
https://github.com/cheezy/page-object
Contato

email pessoal: rafalima07@gmail.com
email profissional: rlima@thoughtworks.com

Mais conteúdo relacionado

Mais procurados

Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03thomasdacosta
 
Estrutura de Dados - Aula 06
Estrutura de Dados - Aula 06Estrutura de Dados - Aula 06
Estrutura de Dados - Aula 06thomasdacosta
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04thomasdacosta
 
[Curso Java Basico] Aula 63: printf
[Curso Java Basico] Aula 63: printf[Curso Java Basico] Aula 63: printf
[Curso Java Basico] Aula 63: printfLoiane Groner
 
Estruturas de dados em Python
Estruturas de dados em PythonEstruturas de dados em Python
Estruturas de dados em PythonRicardo Paiva
 
[Curso Java Basico - Exceptions] Aula 48: multiplos catch
[Curso Java Basico - Exceptions] Aula 48: multiplos catch[Curso Java Basico - Exceptions] Aula 48: multiplos catch
[Curso Java Basico - Exceptions] Aula 48: multiplos catchLoiane Groner
 
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
[Curso Java Basico] Aulas 75-84: Strings e StringBuilderLoiane Groner
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysLoiane Groner
 
Programa 3
Programa 3Programa 3
Programa 3yito24
 
Threads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaThreads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaHelder da Rocha
 
[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: Varargs[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: VarargsLoiane Groner
 
pgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLpgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLelliando dias
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e FuturesHelder da Rocha
 
Threads 10: CompletableFuture
Threads 10: CompletableFutureThreads 10: CompletableFuture
Threads 10: CompletableFutureHelder da Rocha
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04thomasdacosta
 
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - ETipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - EPaulo Henrique Lerbach Rodrigues
 

Mais procurados (20)

Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03
 
Estrutura de Dados - Aula 06
Estrutura de Dados - Aula 06Estrutura de Dados - Aula 06
Estrutura de Dados - Aula 06
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Efeitos De TurbulêNcia
Efeitos De TurbulêNciaEfeitos De TurbulêNcia
Efeitos De TurbulêNcia
 
[Curso Java Basico] Aula 63: printf
[Curso Java Basico] Aula 63: printf[Curso Java Basico] Aula 63: printf
[Curso Java Basico] Aula 63: printf
 
Estruturas de dados em Python
Estruturas de dados em PythonEstruturas de dados em Python
Estruturas de dados em Python
 
[Curso Java Basico - Exceptions] Aula 48: multiplos catch
[Curso Java Basico - Exceptions] Aula 48: multiplos catch[Curso Java Basico - Exceptions] Aula 48: multiplos catch
[Curso Java Basico - Exceptions] Aula 48: multiplos catch
 
String e IO
String e IOString e IO
String e IO
 
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
[Curso Java Basico] Aulas 75-84: Strings e StringBuilder
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
 
programação c 10 aula
programação c 10 aulaprogramação c 10 aula
programação c 10 aula
 
Programa 3
Programa 3Programa 3
Programa 3
 
Threads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaThreads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão Mútua
 
[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: Varargs[Curso Java Basico] Aula 62: Varargs
[Curso Java Basico] Aula 62: Varargs
 
Python
PythonPython
Python
 
pgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLpgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQL
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 
Threads 10: CompletableFuture
Threads 10: CompletableFutureThreads 10: CompletableFuture
Threads 10: CompletableFuture
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - ETipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
Tipos Primitivos - Preparatório Certificação - OCAJP7 - Aula 2 - E
 

Semelhante a Testes Funcionais com Ruby e Watir

Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosGregorio Kusowski
 
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exceptionLoiane Groner
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?Denis Costa
 
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...Danilo J. S. Bellini
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao rubyFrancis Wagner
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04thomasdacosta
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
JavaScript - De verdade
JavaScript - De verdadeJavaScript - De verdade
JavaScript - De verdadeLuis Vendrame
 
Grails: Java produtivo e divertido
Grails: Java produtivo e divertidoGrails: Java produtivo e divertido
Grails: Java produtivo e divertidoLucas Teixeira
 

Semelhante a Testes Funcionais com Ruby e Watir (20)

Threads
ThreadsThreads
Threads
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
[Curso Java Basico - Exceptions] Aula 52: criando sua propria exception
 
Javascript
JavascriptJavascript
Javascript
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
 
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
 
App scala
App scalaApp scala
App scala
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Tdc2010 web
Tdc2010 webTdc2010 web
Tdc2010 web
 
Trabalho vetores
Trabalho vetoresTrabalho vetores
Trabalho vetores
 
iOS 8 com swift
iOS 8 com swiftiOS 8 com swift
iOS 8 com swift
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Javascript
Javascript Javascript
Javascript
 
JavaScript - De verdade
JavaScript - De verdadeJavaScript - De verdade
JavaScript - De verdade
 
JQuery
JQuery JQuery
JQuery
 
Grails: Java produtivo e divertido
Grails: Java produtivo e divertidoGrails: Java produtivo e divertido
Grails: Java produtivo e divertido
 

Mais de Rafael Lima

BDD em Testes de Serviço
BDD em Testes de ServiçoBDD em Testes de Serviço
BDD em Testes de ServiçoRafael Lima
 
Micro service quality
Micro service qualityMicro service quality
Micro service qualityRafael Lima
 
Qualidade de Software em Micro Serviços
Qualidade de Software em Micro ServiçosQualidade de Software em Micro Serviços
Qualidade de Software em Micro ServiçosRafael Lima
 
[QaOps] Git explained | tree structure
[QaOps] Git explained | tree structure[QaOps] Git explained | tree structure
[QaOps] Git explained | tree structureRafael Lima
 
[QaOps] Explicando git | estrutura de árvore
[QaOps] Explicando git | estrutura de árvore[QaOps] Explicando git | estrutura de árvore
[QaOps] Explicando git | estrutura de árvoreRafael Lima
 
[QaOps] ]Integração Contínua | Estrategia de pipeline
[QaOps] ]Integração Contínua | Estrategia de pipeline[QaOps] ]Integração Contínua | Estrategia de pipeline
[QaOps] ]Integração Contínua | Estrategia de pipelineRafael Lima
 
[QaOps] Continuouss Integration | Pipeline strategy
[QaOps] Continuouss Integration | Pipeline strategy[QaOps] Continuouss Integration | Pipeline strategy
[QaOps] Continuouss Integration | Pipeline strategyRafael Lima
 
Quebrando as barreiras DevOps
Quebrando as barreiras DevOpsQuebrando as barreiras DevOps
Quebrando as barreiras DevOpsRafael Lima
 
Quebrando as barreiras
Quebrando as barreirasQuebrando as barreiras
Quebrando as barreirasRafael Lima
 

Mais de Rafael Lima (9)

BDD em Testes de Serviço
BDD em Testes de ServiçoBDD em Testes de Serviço
BDD em Testes de Serviço
 
Micro service quality
Micro service qualityMicro service quality
Micro service quality
 
Qualidade de Software em Micro Serviços
Qualidade de Software em Micro ServiçosQualidade de Software em Micro Serviços
Qualidade de Software em Micro Serviços
 
[QaOps] Git explained | tree structure
[QaOps] Git explained | tree structure[QaOps] Git explained | tree structure
[QaOps] Git explained | tree structure
 
[QaOps] Explicando git | estrutura de árvore
[QaOps] Explicando git | estrutura de árvore[QaOps] Explicando git | estrutura de árvore
[QaOps] Explicando git | estrutura de árvore
 
[QaOps] ]Integração Contínua | Estrategia de pipeline
[QaOps] ]Integração Contínua | Estrategia de pipeline[QaOps] ]Integração Contínua | Estrategia de pipeline
[QaOps] ]Integração Contínua | Estrategia de pipeline
 
[QaOps] Continuouss Integration | Pipeline strategy
[QaOps] Continuouss Integration | Pipeline strategy[QaOps] Continuouss Integration | Pipeline strategy
[QaOps] Continuouss Integration | Pipeline strategy
 
Quebrando as barreiras DevOps
Quebrando as barreiras DevOpsQuebrando as barreiras DevOps
Quebrando as barreiras DevOps
 
Quebrando as barreiras
Quebrando as barreirasQuebrando as barreiras
Quebrando as barreiras
 

Testes Funcionais com Ruby e Watir

  • 3. Java vs Ruby public int retornaSum(int num1, int num2) { return num1 + num2; } public void forExample() { String[] nomes = {"Meddle", "The Wall”,”DSOT","Pulse"}; ! } for (int i = 0; i < nomes.length; i++) { System.out.println(nomes[i]); } ! def retorna_sum(num1, num2) num1 + num2 end ! def for_example array = ["Meddle","The Wall","DSOT","Pulse"] ! ! ! array.length.times do |x| puts array[x] end #mesmo output array.length.times { |x| puts array[x] } end ! ! public void forEachExample() { String[] nomes = {"Meddle", "The Wall”,"DSOT","Pulse"}; for(String nome: nomes) { System.out.println(nome); } } def for_each_example array = ["Meddle","The Wall","DSOT","Pulse"] ! ! end array.each { |x| puts x }
  • 4. public void javaHash() { HashMap<String,String> album = new HashMap<String, String>(); album.put("nome", "Meddle"); System.out.println(album.get("nome")); } ! def ruby_hash album = {:nome => "Meddle", :banda => "Pink Floyd"} #album = {nome: "Meddle", banda: "Pink Floyd"} ! ! puts hash[:nome] end ! public void arrayBool() { Boolean[] arrayBool= {false,false,true,false}; Boolean resultado = false; for (int i = 0; i < arrayBool.length; i++) { if (arrayBool[i]) resultado = true; } System.out.println(resultado); } def arrayBool arrayBool = [false, false, true, false] ! ! end puts arrayBool.any? #puts arrayBool.all?
  • 5. Ruby Class class Pessoa attr_accessor :name, :last_name ! ! ! def initialize(name, last_name) self.name = name self.last_name = last_name end def full_name self.name + " " + self.last_name end end ! p = Pessoa.new("rafael", "lima") puts p.full_name
  • 6. Basic Watir require 'watir-webdriver' ! browser ! = Watir::Browser.new :firefox browser.goto "http://demo.moodle.net/login/index.php" browser.text_field(id: 'username').set 'admin' browser.text_field(id: 'password').set 'sandbox' browser.button(id: 'loginbtn').click puts browser.p(id: 'frontpagesettings').exists? && browser.span(xpath: "//span[text()='Site administration']").exists?
  • 7. Page Object Pattern Cada página da aplicação terá uma Page Object Elimina duplicação Fácil de manter Robusto
  • 8. Instalação instalar Rbenv ou RVM Ruby windows unix instalar o bundler (link) montar estrutura de arquivos igual ao “page_object_tree.txt” ou instalar o testgen executar "bundle install" no root do projeto executar “bundle exec cucumber” no root do projeto
  • 9. T estGen Gem que cria monta o projeto automaticamente Repositório Gem install testgen Executar "testgen project <project_name> -pageobject-driver=watir --with-lib"
  • 10. Referência Códigos e apresentação https://github.com/rafalima/watir_webdriver Watir-webdriver http://watirwebdriver.com/ http://watir.com/ Page Object https://github.com/watir/watir-webdriver/wiki/Page-Objects https://github.com/cheezy/page-object
  • 11. Contato email pessoal: rafalima07@gmail.com email profissional: rlima@thoughtworks.com