Episódio 56: Splinter
Castálio Podcast
Portuguese - December 07, 2014 00:00 - 31.1 MB - ★★★★ - 3 ratingsTechnology linux open source software livre brasil castálio Homepage Download Apple Podcasts Google Podcasts Overcast Castro Pocket Casts RSS feed
No episódio de hoje, eu e o Elyézer conversamos um pouco sobre o
Splinter, uma ferramente muito interessante para quem trabalha com a
automatização de aplicativos web com python.
Na Red Hat, eu e Elyézer trabalhamos na automatização de testes
funcionais do produto Satellite 6, certificando que todos recursos
expostos pelas camadas de API, CLI (linha de comando) e UI (interface
web gráfica) funcionam conforme as expectativas do design. Uma opção
para efetuar estes testes seria fazer um mutirão no trabalho e testar
tudo manualmente... mas isso é coisa de iniciante, e todo engenheiro de
automatização que se preze eventualmente tenta automatizar tudo.
Apesar de usarmos o Selenium para efetuar testes de interface
gráfica, o Splinter é uma excelente alternativa para quem deseja
experimentar uma forma bem simples e fácil de interagir com um navegador
web (o tal do 'browser'), e é justamente por causa desta facilidade
que o episódio de hoje é dedicado ao Splinter.
Durante nosso bate-papo, outras ferramentas são mencionadas, como o
Selenium IDE, um add-on para o Firefox que permite gravar e
reproduzir interações com um navegador, e o Selenium WebDriver, uma
interface que permite interagir com um navegador usando uma linguagem de
programação.
Para reforçar o material, também criamos um pequeno "projeto exemplo"
onde discutimos sobre o uso do Splinter para detectar, catalogar e
enviar notícias pendentes do Facebook para o seu celular. Para um
exemplo mais concreto, vamos abrir um navegador Firefox e visitar o
site do Castálio, e checar na página de arquivos o nome do último
episódio:
from splinter import Browser
browser = Browser('firefox')
browser.driver.maximize_window()
browser.visit('http://castalio.info/')
browser.find_link_by_href('http://castalio.info/archives.html').click()
element = browser.find_by_css('#archives p a').first
print(element.text)
browser.screenshot(name='castalio')
browser.quit()
Como vocês podem ver, o código acima ate mesmo tira um screenshot da
pagina que foi aberta no navegador e salva no arquivo de sistemas:
O bacana é que o método que tira screenshots foi
contribuição
minha. :)
Agora, vamos fazer a mesma coisa, mas desta vez usando o Selenium
WebDriver:
from selenium import webdriver
browser = webdriver.Firefox()
browser.maximize_window()
browser.get('http://castalio.info/')
browser.find_element_by_css_selector(
'a[href="http://castalio.info/archives.html"]'
).click()
element = browser.find_element_by_css_selector('#archives p:first-child a')
print(element.text)
browser.save_screenshot('webdriver-castalio.png')
browser.close()
Na nossa opinião, dentre as vantagens em usar o Splinter, gostamos
do fato que existem vários métodos para interagir com elementos de uma
página web que são bem completos e exigem menos linhas de código
comparado com o Selenium. Outra coisa que é bem atraente são os
nomes dos métodos, que são bem explícitos sobre qual o resultado que
será retornado. Por exemplo, para buscar elementos, temos os métodos:
browser.find_by_css('h1')
browser.find_by_xpath('//h1')
browser.find_by_tag('h1')
browser.find_by_name('name')
browser.find_by_id('firstheader')
browser.find_by_value('query')
Os metodos acima retornam uma lista de elementos, se encontrados, o que
facilita encontrar elementos por índice. O Splinter também adiciona
dois métodos (syntatic sugar) que permitem acessar o primeiro e
ultimo elemento de uma lista:
browser.find_by_name('name').first
browser.find_by_name('name').last
Buscando por links é super fácil:
links_found = browser.find_link_by_text('Link for Example.com')
links_found = browser.find_link_by_partial_text('for Example')
links_found = browser.find_link_by_href('http://example.com')
links_found = browser.find_link_by_partial_href('example')
E para fechar com chave de ouro, você pode "encadear" suas buscas para
efetuar várias ações em uma só linha de código:
divs = browser.find_by_tag("div")
within_elements = divs.first.find_by_name("name")
Ainda pretendemos trazer um dos desenvolvedores do projeto Splinter
para aprendermos um pouco mais sobre a história do projeto, seu design e
seu futuro... mas isso vai ficar para um próximo episódio!
Escute Agora
Links
Splinter
Selenium
Selenium IDE
Selenium WebDriver
Satellite 6
Música: Ain't Gonna Give Jelly
Roll
by Red Hook Ramblers is licensed under a
Creative Commons Attribution-NonCommercial-NoDerivatives (aka Music Sharing)
License.