Ruby | Fé no Caos

Archive

Posts Tagged ‘Ruby’

Instalando Ruby e Watir para automação

May 7th, 2009 5 comments

Primeiramente (e resumidamente), o que são essas coisas?

  1. 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.
  2. 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:

  1. Baixar o instalador para Windows aqui – está disponível um instalador que é só ficar apertando “Próximo” até acabar.
  2. 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 🙂