Instalando Ruby e Watir para automação
Primeiramente (e resumidamente), o que são essas coisas?
- Ruby é uma linguagem de programação que vem sido bastante adotada nos últimos anos, devido a uma série de caracterÃsticas que não cabem a mim elencar aqui.
- Watir é uma biblioteca para a linguagem Ruby que permite interagir com o Internet Explorer, Firefox (a partir da versão 1.6, com a fusão da biblioteca FireWatir) e até o Safari (usando uma biblioteca derivada) para simular a experiência de navegação do usuário no sistema.
Apesar do desgosto que muitos de nós temos pelo Internet Explorer (alguns até pelo Windows), sabemos que tudo *deve* funcionar no Internet Explorer por dominar o mercado de browsers atualmente (por mais quanto tempo?).
Como instalar:
- Baixar o instalador para Windows aqui – está disponÃvel um instalador que é só ficar apertando “Próximo” até acabar.
- Abrir uma janela do prompt de comando (Iniciar -> Executar -> cmd) e digitar “gem install watir -y”, sem as aspas. Após baixar a lista de bibliotecas e dependências, estaremos prontos para o primeiro exemplo de código.
O instalador do Ruby instala também o SciTE, um editor de código bem simples mas que faz o trabalho.
Todo guia de instalação do Ruby/Watir mostra como acessar o Google e fazer uma busca, bem simples assim. Que tal fazer um exemplo diferente, usando o site modinha de todo gadget freak muambeiro?
Abaixo veremos dois casos de teste para a funcionalidade “busca avançada” da loja Deal Extreme. Primeiramente, vamos procurar por sabres de luz e, depois, pela paz mundial. É só copiar e colar.
require "rubygems"
require "watir"
require "test/unit"
require "test/unit/assertions"
include Test::Unit::Assertions
class TC_DX_Search < Test::Unit::TestCase
def setup
#Abre o Internet Explorer
@ie = Watir::IE.new
@ie.set_fast_speed
end
def test_adv_search
#Abre o site da Deal Extreme
@ie.goto "http://www.dealextreme.com/"
#Confere se estamos na página certa
assert(@ie.title.include?("DealExtreme: Cool Gadgets at the Right Price"))
#Clica no link com o texto "advanced search"
@ie.link(:text, /advanced search/).click
#Confere se estamos na página certa
assert(@ie.title, "DealExtreme: Advanced Search")
#Preenche o campo de produto
@ie.text_field(:id, "txtAdvSearchTerm").set "Lightsabre LED"
#Seleciona a categoria do produto
@ie.select_list(:id, "searchCategory").select "Flashlights, Lasers"
#Marca a opção para buscar somente itens em estoque
@ie.checkbox(:id, "InStockOnly").set
#Clica no botão de busca
@ie.button(:id, "searchbutton").click
#Confere se retornou algum resultado
assert(@ie.elements_by_xpath("//div[@id='olddiv']/div/h3/a").length > 0)
#Mostra a lista de itens retornados
@ie.elements_by_xpath("//div[@id='olddiv']/div/h3/a").each do |result|
puts result.innerText
end
end
def test_adv_search_no_results
#Comentários no outro teste
@ie.goto "http://www.dealextreme.com/"
assert(@ie.title.include?("DealExtreme: Cool Gadgets at the Right Price"))
@ie.link(:text, /advanced search/).click
assert(@ie.title, "DealExtreme: Advanced Search")
@ie.text_field(:id, "txtAdvSearchTerm").set "The world peace"
@ie.select_list(:id, "searchCategory").select "- All Categories -"
@ie.checkbox(:id, "InStockOnly").set
@ie.button(:id, "searchbutton").click
#Não podemos comprar a paz mundial...
assert(@ie.text.include?("No product was found relating to your search"))
end
end
Salve como demo.rb e rode o script (F5 no SciTE). Se tudo der certo, veremos o seguinte resultado:
Loaded suite demo Started Mini Lightsabre LED Keychain (4*AG3) .. Finished in 68.328 seconds. 2 tests, 6 assertions, 0 failures, 0 errors
Imagino que o código seja autoexplicativo com a ajuda dos comentários. Em posts futuros veremos melhor sobre XPath, assertions, TestCase e mais.
Em caso de dúvidas, comente 🙂