Top Banner
Automatizando Tarefas com o Watir-Webdriver aka. Minha guerra com o portal da Cielo
97

Automatizando Tarefas com o Watir-Webdriver - Case

Jun 11, 2015

Download

Software

lucasprim

Apresentação de um case de uso da gem watir-webdriver para solucionar um problema com o site da cielo.
Apresentado na Trilha Ruby da TDC 2014.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Automatizando Tarefas com o Watir-Webdriver - Case

Automatizando Tarefas com o Watir-Webdriver

aka. Minha guerra com o portal da Cielo

Page 2: Automatizando Tarefas com o Watir-Webdriver - Case

Lucas Prim

Page 3: Automatizando Tarefas com o Watir-Webdriver - Case

Administrador

Page 4: Automatizando Tarefas com o Watir-Webdriver - Case

Meio Engenheiro

Page 5: Automatizando Tarefas com o Watir-Webdriver - Case

Developer for fun and profit há 14 anos.

Page 6: Automatizando Tarefas com o Watir-Webdriver - Case

Professor Boiada

Page 7: Automatizando Tarefas com o Watir-Webdriver - Case

Co-Founder e CTO do Kimitachi

Page 8: Automatizando Tarefas com o Watir-Webdriver - Case

Meu objetivo aqui:

Falar rapidamente de um problema que resolvemos usando a ferramenta watir-

webdriver em 4 partes.

Page 9: Automatizando Tarefas com o Watir-Webdriver - Case

Parte I: O Inimigo

Page 10: Automatizando Tarefas com o Watir-Webdriver - Case

Cielo"Responsável pelo credenciamento de estabelecimentos comerciais, e pela

captura, transmissão, processamento e liquidação financeira das transações realizadas com cartões de crédito e débito"

Imagens: http://www.x-jetpacks.com/wp-content/uploads/death-star.png http://kldsuportville.com.br/index/wp-content/uploads/2013/12/cartao.png

Page 11: Automatizando Tarefas com o Watir-Webdriver - Case

Cielo"Responsável pelo credenciamento de estabelecimentos comerciais, e pela

captura, transmissão, processamento e liquidação financeira das transações realizadas com cartões de crédito e débito"

Imagens: http://www.x-jetpacks.com/wp-content/uploads/death-star.png http://kldsuportville.com.br/index/wp-content/uploads/2013/12/cartao.png

Page 12: Automatizando Tarefas com o Watir-Webdriver - Case

Site da CieloUm verdadeiro inferno!

Page 13: Automatizando Tarefas com o Watir-Webdriver - Case

Site da CieloUm verdadeiro inferno!

Page 14: Automatizando Tarefas com o Watir-Webdriver - Case

FrameceptionFrames dentro de frames

Page 15: Automatizando Tarefas com o Watir-Webdriver - Case

Teclado VirtualQue muda a ordem dos números!!!

Page 16: Automatizando Tarefas com o Watir-Webdriver - Case

Código CrípticoJavascript inline, nomes com chaves, ids do tipo

“portlet_13_1_btnEntrar"

Page 17: Automatizando Tarefas com o Watir-Webdriver - Case

Código CrípticoJavascript inline, nomes com chaves, ids do tipo

“portlet_13_1_btnEntrar"

Page 18: Automatizando Tarefas com o Watir-Webdriver - Case

Não funciona no ChromeWhat a shame…

Page 19: Automatizando Tarefas com o Watir-Webdriver - Case

Não funciona no ChromeWhat a shame…

Page 20: Automatizando Tarefas com o Watir-Webdriver - Case

Está sujeito a coisas bizarras(Isso aconteceu enquanto eu montava a apresentação)

Page 21: Automatizando Tarefas com o Watir-Webdriver - Case

O melhor de tudo!Erros randômicos durante o processamento!!!

Page 22: Automatizando Tarefas com o Watir-Webdriver - Case

O melhor de tudo!Erros randômicos durante o processamento!!!

Page 23: Automatizando Tarefas com o Watir-Webdriver - Case

Parte II: A Missão

Page 24: Automatizando Tarefas com o Watir-Webdriver - Case

“Eu preciso das informações da Cielo

todas em Excel!"

Page 25: Automatizando Tarefas com o Watir-Webdriver - Case

Precisávamos construir um screen scraper que:

Page 26: Automatizando Tarefas com o Watir-Webdriver - Case

Entrasse na cielo

Page 27: Automatizando Tarefas com o Watir-Webdriver - Case

Entrasse na cielo

Page 28: Automatizando Tarefas com o Watir-Webdriver - Case

Passasse pelos processos de login (incluindo o teclado virtual

que muda a posição dos números)

Page 29: Automatizando Tarefas com o Watir-Webdriver - Case

Passasse pelos processos de login (incluindo o teclado virtual

que muda a posição dos números)

Page 30: Automatizando Tarefas com o Watir-Webdriver - Case

Gerasse o relatório de vendas do dia

Page 31: Automatizando Tarefas com o Watir-Webdriver - Case

Gerasse o relatório de vendas do dia

Page 32: Automatizando Tarefas com o Watir-Webdriver - Case

Entrasse em cada um dos grupamentos loucos

que a cielo faz

Page 33: Automatizando Tarefas com o Watir-Webdriver - Case

Entrasse em cada um dos grupamentos loucos

que a cielo faz

Page 34: Automatizando Tarefas com o Watir-Webdriver - Case

Fizesse um “chupa-cabra” nos dados

Page 35: Automatizando Tarefas com o Watir-Webdriver - Case

Fizesse um “chupa-cabra” nos dados

Page 36: Automatizando Tarefas com o Watir-Webdriver - Case

Exportasse os dados para excel

Page 37: Automatizando Tarefas com o Watir-Webdriver - Case

Exportasse os dados para excel

Page 38: Automatizando Tarefas com o Watir-Webdriver - Case

Repetisse o processo todos os dias

Page 39: Automatizando Tarefas com o Watir-Webdriver - Case

Repetisse o processo todos os dias

Page 40: Automatizando Tarefas com o Watir-Webdriver - Case
Page 41: Automatizando Tarefas com o Watir-Webdriver - Case

Parte III: Planejamento

Page 42: Automatizando Tarefas com o Watir-Webdriver - Case

Três alternativas:

Page 43: Automatizando Tarefas com o Watir-Webdriver - Case

1. Mechanize

Page 44: Automatizando Tarefas com o Watir-Webdriver - Case
Page 45: Automatizando Tarefas com o Watir-Webdriver - Case

2. Selenium

Page 46: Automatizando Tarefas com o Watir-Webdriver - Case
Page 47: Automatizando Tarefas com o Watir-Webdriver - Case

3. Watir

Page 48: Automatizando Tarefas com o Watir-Webdriver - Case

3. Watir

Page 49: Automatizando Tarefas com o Watir-Webdriver - Case

3. Watir

Page 50: Automatizando Tarefas com o Watir-Webdriver - Case

Na verdade eu usei o Watir Webdriver (O Watir usa ele para

fazer testes automatizados)

Page 51: Automatizando Tarefas com o Watir-Webdriver - Case
Page 52: Automatizando Tarefas com o Watir-Webdriver - Case

Roda no Firefox, IE, Chrome e Safari.

Page 53: Automatizando Tarefas com o Watir-Webdriver - Case
Page 54: Automatizando Tarefas com o Watir-Webdriver - Case

É ridículo de instalar

Page 55: Automatizando Tarefas com o Watir-Webdriver - Case
Page 56: Automatizando Tarefas com o Watir-Webdriver - Case

Tem uma DSL muito foda bacana

Page 57: Automatizando Tarefas com o Watir-Webdriver - Case

Sério, saca só essa DSL:

Page 58: Automatizando Tarefas com o Watir-Webdriver - Case

b = Watir::Browser.new!b.goto ‘http://www.cielo.com.br'

Page 59: Automatizando Tarefas com o Watir-Webdriver - Case

b = Watir::Browser.new!b.goto ‘http://www.cielo.com.br'!form = b.form id: ‘consulta-estabelecimento'

Page 60: Automatizando Tarefas com o Watir-Webdriver - Case

b = Watir::Browser.new!b.goto ‘http://www.cielo.com.br'!form = b.form id: ‘consulta-estabelecimento’!inputs = form.inputs(type: ‘text')

Page 61: Automatizando Tarefas com o Watir-Webdriver - Case

b = Watir::Browser.new!b.goto ‘http://www.cielo.com.br'!form = b.form id: ‘consulta-estabelecimento’!inputs = form.inputs(type: ‘text’)!inputs.first.set(‘aww yeah!’)

aww yeah!

Page 62: Automatizando Tarefas com o Watir-Webdriver - Case

b = Watir::Browser.new!b.goto ‘http://www.cielo.com.br'!form = b.form id: ‘consulta-estabelecimento’!inputs = form.inputs(type: ‘text’)!inputs.first.set(‘aww yeah!’)!inputs.last.set(‘mah oee!’)!

mah oee!

aww yeah!

Page 63: Automatizando Tarefas com o Watir-Webdriver - Case

b = Watir::Browser.new!b.goto ‘http://www.cielo.com.br'!form = b.form id: ‘consulta-estabelecimento’!inputs = form.inputs(type: ‘text’)!inputs.first.set(‘aww yeah!’)!inputs.last.set(‘mah oee!’)!form.input(type: ‘submit’).click!

mah oee!

aww yeah!

Page 64: Automatizando Tarefas com o Watir-Webdriver - Case

b = Watir::Browser.new!b.goto ‘http://www.cielo.com.br'!form = b.form id: ‘consulta-estabelecimento’!inputs = form.inputs(type: ‘text’)!inputs.first.set(‘aww yeah!’)!inputs.last.set(‘mah oee!’)!form.input(type: ‘submit’).click!

Page 65: Automatizando Tarefas com o Watir-Webdriver - Case

E tem muito mais:!• Executa javascript lindamente (me salvou do teclado

virtual) • Acessa frameceptions facilmente • Faz drag and drop • Suporta chamadas ajax com “Wait until present” ou

“Wait While Present” • Tem comandos do tipo “tables”, “as”, “lis”, “uls”,

enfim, o negócio vai muito naturalmente! • Read the docs: http://rubydoc.info/gems/watir-

webdriver/frames

Page 66: Automatizando Tarefas com o Watir-Webdriver - Case

Parte IV: Execução

Page 67: Automatizando Tarefas com o Watir-Webdriver - Case

Fizemos um design básico:

Page 68: Automatizando Tarefas com o Watir-Webdriver - Case

Fizemos um design básico:

Page!• Realiza as interações

com as diferentes páginas (cada page object sabe da sua página)

Page 69: Automatizando Tarefas com o Watir-Webdriver - Case

Fizemos um design básico:

Page!• Realiza as interações

com as diferentes páginas (cada page object sabe da sua página)

Parser!• Extrai e limpa os

valores extraídos das páginas, transformando-os em objetos nativos (Hashes e Arrays na maioria)

Page 70: Automatizando Tarefas com o Watir-Webdriver - Case

Fizemos um design básico:

Page!• Realiza as interações

com as diferentes páginas (cada page object sabe da sua página)

Parser!• Extrai e limpa os

valores extraídos das páginas, transformando-os em objetos nativos (Hashes e Arrays na maioria)

Exporter!• Recebe os dados em

objetos nativos e exporta para excel

Page 71: Automatizando Tarefas com o Watir-Webdriver - Case

Task

Fizemos um design básico:

Page!• Realiza as interações

com as diferentes páginas (cada page object sabe da sua página)

Parser!• Extrai e limpa os

valores extraídos das páginas, transformando-os em objetos nativos (Hashes e Arrays na maioria)

Exporter!• Recebe os dados em

objetos nativos e exporta para excel

Page 72: Automatizando Tarefas com o Watir-Webdriver - Case

Implementamos e botamos para rodar e…

Page 73: Automatizando Tarefas com o Watir-Webdriver - Case

Implementamos e botamos para rodar e…

Page 74: Automatizando Tarefas com o Watir-Webdriver - Case

Implementamos e botamos para rodar e…

Page 75: Automatizando Tarefas com o Watir-Webdriver - Case

Esquecemos das coisas bizarras do site da

cielo…

Page 76: Automatizando Tarefas com o Watir-Webdriver - Case

Criamos mais um objeto no nosso design:

Page 77: Automatizando Tarefas com o Watir-Webdriver - Case

Criamos mais um objeto no nosso design:

NavigationStack!• Ordena e executa a navegação

programada na task. • Em caso de erro na execução, volta

os passos necessários (browser.back) e tenta novamente até o fluxo programado funcionar!

Page 78: Automatizando Tarefas com o Watir-Webdriver - Case

Adicionamos mais um ingrediente com o

Headless

Page 79: Automatizando Tarefas com o Watir-Webdriver - Case

E pronto!

Page 80: Automatizando Tarefas com o Watir-Webdriver - Case

O sistema rodou por um tempo até nosso CFO descobrir um serviço

da cielo chamado EDI que exporta os dados sozinho :)

Page 81: Automatizando Tarefas com o Watir-Webdriver - Case

Mas ficou a lição: Serviço de corno na web se

resolve facilmente com o…

Page 82: Automatizando Tarefas com o Watir-Webdriver - Case

Watir-Webdriver

Page 83: Automatizando Tarefas com o Watir-Webdriver - Case

Obrigado!

Lucas Prim!CTO & Co-Founder @ Kimitachi !

[email protected] @lucasprim

Page 84: Automatizando Tarefas com o Watir-Webdriver - Case

Parece que sobrou tempo…

Page 85: Automatizando Tarefas com o Watir-Webdriver - Case

Chega a ser divertido brincar com o watir!

Page 86: Automatizando Tarefas com o Watir-Webdriver - Case

Vamos fazer um hacker news fetcher, que notifica no growl

quando o post tiver > 200 points.

Page 87: Automatizando Tarefas com o Watir-Webdriver - Case
Page 88: Automatizando Tarefas com o Watir-Webdriver - Case

require 'watir-webdriver'

Page 89: Automatizando Tarefas com o Watir-Webdriver - Case

require 'watir-webdriver'

browser = Watir::Browser.new(‘chrome')

Page 90: Automatizando Tarefas com o Watir-Webdriver - Case

require 'watir-webdriver'

browser = Watir::Browser.new(‘chrome')browser.goto('http://news.ycombinator.com')

Page 91: Automatizando Tarefas com o Watir-Webdriver - Case

require 'watir-webdriver'

browser = Watir::Browser.new(‘chrome')browser.goto('http://news.ycombinator.com')

main_table = browser.tables.first

Page 92: Automatizando Tarefas com o Watir-Webdriver - Case

require 'watir-webdriver'

browser = Watir::Browser.new(‘chrome')browser.goto('http://news.ycombinator.com')

main_table = browser.tables.firstnews_list_section = main_table.trs[3]news_table = news_list_section.tables.first

Page 93: Automatizando Tarefas com o Watir-Webdriver - Case

require 'watir-webdriver'

browser = Watir::Browser.new(‘chrome')browser.goto('http://news.ycombinator.com')

main_table = browser.tables.firstnews_list_section = main_table.trs[3]news_table = news_list_section.tables.first

news = news_table.trs.map do |item|content = item.text.split("\n")content[1]

end.compact

Page 94: Automatizando Tarefas com o Watir-Webdriver - Case

require 'watir-webdriver'

browser = Watir::Browser.new(‘chrome')browser.goto('http://news.ycombinator.com')

main_table = browser.tables.firstnews_list_section = main_table.trs[3]news_table = news_list_section.tables.first

news = news_table.trs.map do |item|content = item.text.split("\n")content[1]

end.compact

browser.close

Page 95: Automatizando Tarefas com o Watir-Webdriver - Case
Page 96: Automatizando Tarefas com o Watir-Webdriver - Case

Have Fun :D

Page 97: Automatizando Tarefas com o Watir-Webdriver - Case

Obrigado!

Lucas Prim!CTO & Co-Founder @ Kimitachi !

[email protected] @lucasprim