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 🙂