![]()

Watir é implementada e mantida por Bret Pettichord, Paul Rogers, Jonathan Kohl, Angrez Singh, Charley Baker e Zeljko Filipin. Watir é opensource e com seus comandos e funções particulares permite então que possamos controlar os objetos HTML e JavaScript presentes na aplicação Web, simulando os cliques em links, botões e os demais campos.
Pré-requisitos e instalação:
Pronto, neste ponto já temos tudo que precisamos instalado no computador.
Watir não utiliza da técnica conhecida como Record/Playback, onde o arquiteto de testes grava o script através do movimento do mouse e teclado. Os scripts são escritos mesmo “na unha”, portanto o recomendado é que o responsável pelo uso do Watir tenha algum conhecimento de lógica de programação e dos atributos das tags HTML. Esse conhecimento em desenvolvimento se torna importante, visto que, estamos falando de programação de scripts e para que possamos ter um produto final de qualidade, podem ser aplicados todos os conceitos e boas práticas de programação.
Fundamentos Básicos:
Comandos de Iniciação
| require 'watir' |
Carrega a biblioteca do Watir |
| ie = Watir::IE.start('http://localhost:8080') |
Inicia o Internet Explorer (IE) usando a URL desejada. |
| ie.close |
Fecha o IE. |
| ie = Watir::IE.attach(:title, 'title') |
Necessário para que o Waitr reconheça uma janela do IE que se abre a partir da janela principal e precisará ser manipulada, por exemplo. |
Acessando campos
| ie.text_field(:name, 'name').set('value') |
Permite se acessar um campo do tipo texto (text field) especificado pelo atributo “name” da tag e atribui a ele um valor (value) |
| ie.button(:value, 'value').click |
Clica em um botão especificado pela tag “value” |
| ie.button(:name, 'name').click |
Clica em um botão especificado pela tag “name” |
| ie.checkbox(:name, 'name').set |
Marca uma caixa de seleção (check box) especificada pela tag "name" |
| ie.object(:attribute, 'name').flash |
Pode ser usada com qualquer campo ou atributo. Este comando destaca o objeto pretendido na cor amarela. Utilizada geralmente para verificar se um determinado comando está encontrando o objeto na tela. |
Verificando conteúdos na página
| ie.text.include?('text') |
Retorna verdadeiro o falso se a página corrente contém o texto especificado ou falso caso não encontre o texto. Pode ser usada expressão regular. |
| ie.title |
Retorna o título da página corrente |
| ie.html |
Retorna todo o HTML do corpo da página. |
| ie.table(:id, 'recent_records).to_a |
Retorna um array contendo todo o texto que está em uma tabela. |
| ie.table(:id, 'recent_records')[2][1].text |
Retorna o texto da primeira coluna da segunda linha de uma tabela. |
Assertions
| assert_equal(expected, test_method) |
Compara o valor retornado com um valor esperado. |
| assert_match(regexp, test_method) |
Compara o valor retornado com uma expressão regular. |
| assert(expression) |
Verifica se uma expressão é verdadeira. |
Mão na massa:
Na linha 12 nós passamos para o browser o comando “goto” avisando através da variável test_site o endereço que queremos que ele abra.
Na linha 14 é inserido os conceitos de HTML, note que o que estamos fazendo é digitando uma palavra no campo de pesquisa do Google para saber o que digitar nesta linha vamos usar o IE development Toolbar, ou pode ser visualizado também no código fonte da página. Procure o que o programador do Google coloco na tag “name” do campo em que digitamos a pesquisa, na data em que escrevi o artigo era: “q”, isso pode ter sido alterado no momento do seu teste, portanto verifique e caso seja diferente substitua no código. Abaixo o trecho do HTML aonde encontrei o nome do componente:
Na linha 15, Eu informo ao IE que quero acessar um Botão (Button) e eu quero o botão que tem em sua tag name o texto “btnG” e o comando (ação) que darei nesse botão é um clique (click). Código HTML:
Na linha 17, fazemos uma verificação do resultado retornado com o nosso resultado esperado com o famoso IF, presente em quase todas as linguagens de programação. Usamos para verificação no browser o comando “text.include?”, note que os comandos do watir são bem sugestivos e de fácil compreensão. Nesse comando, passamos entre aspas o texto que queremos verificar se está presente na tela. Atenção, pois a verificação é case sensitive (diferencia maiúsculas de minúsculas).
Na linha 18, usaremos o comando “puts” que serve para se escrever na tela, não no browser, na tela que estamos rodando a aplicação, pode ser na janela do MS-DOS ou no editor SciTe. Essa linha será executada se a verificação feita pela linha 17 tiver sucesso.
Caso a verificação da linha 17 não obtenha o resultado esperado, então entramos no ELSE e é executada a linha número 20. Note que caso a linha 18 seja executada, a linha 20 não será, e vice versa.
Na linha 21 temos um END que se refere ao IF e não ao nosso script, caso não tivéssemos o IF não precisaríamos do END, ou seja, no final de um script não é necessário um comando END.
Se você digitou seu código no bloco de notas ou outro editor, salve o arquivo com o nome googleSerach.rb no seu computador, abra o MS-DOS, vá até o diretório que salvou o arquivo e digite simplesmente: googleSerch.rb aperte ENTER, aguarde e não se assuste, seu computador não ficou louco, é apenas o Watir trabalhando. J
Nesse momento espero que você tenha com este pequeno exemplo percebido as várias possibilidade de uso do watir. Quando rodei pela primeira vez meu script fiquei impressionado com a velocidade e facilidade devido aos comandos sugestivos e facilidade de programação. O Watir é capaz de manipular praticamente todos os componentes de uma página, seja ela um botão, link, campo de texto, lista de seleção, radio, checkbox, etc.
As informações apresentadas abaixo devem ser usadas seguindo uma estrutura de concatenação (unindo as partes separando cada um por . “ponto”), lembrando que SEMPRE que se for acessar algum componente no IE, é necessário começar o comando com o manipulador criado, em nosso exemplo foi a variável ie, que é a variável que recebe a nova instancia do browser.
1) Componente: text_field – Campo de texto:
Formas de localização do componente na tela: text_field(como, conteudo)
ie.text_field(:id,'user_name') # localiza o campo pelo ID
ie.text_field(:name,'address') # localiza o campo pelo NAME
ie.text_field(:index,2) # localiza o segundo campo na tela
Ações:
set(“texto”) – Escreve texto no campo
clear – Limpa o conteúdo do campo
verify_contains(“texto”) – verifica se texto está digitado no campo e retorna verdadeiro ou falso
to_s – Retorna na tela os atributos do componente, nome, ID, maxlength, tipo, etc.
dragContentsTo(como, conteúdo) – move o conteúdo do campo para outro campo
append(“texto”) – Adiciona texto no final do texto que já está escrito no campo
2) Componente: button – Botão:
Formas de localização do componente na tela: button(como, conteudo)
ie.button(:id,'user_name') # localiza o botão pelo ID
ie. button(:name,'address') # localiza o botão pelo NAME
ie. button(:index,2) # localiza o segundo botão na tela
ie.button(:caption, 'Login') # localiza o botão pelo que está escrito no mesmo
Ações:
click – clica no botão indicado
3) Componente: checkbox – Caixa de seleção:
Formas de localização do componente na tela: checkbox(como, conteudo, [value=nil])
ie.checkbox(:id,'user_name') # localiza o checkbox pelo ID
ie.checkbox(:name,'address') # localiza o checkbox pelo NAME
ie.checkbox(:index,2) # localiza o segundo checkbox na tela
ie.checkbox(:name,”dia”, “sabado”) # localiza o checkbox que tem o nome: dia
e o valor: sabado, muito usado pois alguns checkbox tem o mesmo nome, porem valores diferentes
Ações:
set – seleciona o checkbox indicado
clear – remove a seleção do checkbox indicado
4) Componente: image – Imagens:
Formas de localização do componente na tela: image(como, conteudo)
ie.image(:src, “images/myPic.jpg”) # acessa pelo SRC
ie.image(:index,2) # acessa a segunda imagem da tela
ie.image(:alt, "Clique aqui") # acessa pelo alt da imagem
Ações:
fileCreatedDate – retorna a data de criação da imagem
fileSize – retorna o tamanho da imagem
height – retorna a altura da imagem
width – retorna a largura da imagem
save – Salva a imagem no seu computador, usar: save(c:\dirnome\somename.gif), se existir uma imagem com mesmo nome no diretório ele sobrescreve.
5) Componente: link :
Formas de localização do componente na tela: checkbox(como, conteudo)
ie.link(:url, “login.asp”) #acessa pela url
ie.link(:index,2) #acessa o segundo link da tela
ie.link(:title, "Picture") #acessa pelo título
ie.link(:text, 'Click Me') #acessa pelo texto do link
Ações:
click – clica no link
link_string_creator – retorna em uma string os valores do link, pode ser acessado separadamente na variável através de índices, isto é: variável[0], variável[1], etc
link_has_image – verifica se uma imagem é usada como parte do linkl, útil pois para clicar em imagem como link é um comando diferente
6) Componente: SelectList – Lista de seleção, dropdownlist, listbox:
Formas de localização do componente na tela: select_list(como, conteudo)
ie.select_list(:id, 'currency') # acessa pelo ID
ie.select_list(:name, 'country') # acessa pelo nome
ie.select_list(:index, 2) #acessa o segundo select da tela
Ações:
clearSelection – Limpa a seleção
getAllContents – retorna o conteúdo do select em um array, retorna um array vazio caso não contenha dados no select, muito útil para verificar se foi carregado algum dado no select
getSelectedItems – Retorna o(s) itens selecionados em um array.
includes?(texto) – verifica se texto está na lista e retorna verdadeiro ou falso
select(item) – Seleciona item
selected?(item) – Verifica se item está selecionado e retorna verdadeiro ou falso
set(item) – Faz o mesmo que o select(item)
7) Componente: Table – Tabela:
Formas de localização do componente na tela: table(como, conteudo)
ie.table(:id, 'currency') # acessa pelo ID
ie.table(:index, 2) #acessa a segunda tabela da tela
Ações:
[x] – Retorna/acessa a linha x da tabela
column_count – retorna o número de colunas de uma tabela ou de uma linha da tabela, concatenanto com o comando [x]
column_values(X) – retorna um arranjo com todos os valores da coluna X
highlight(:set) – esse comando colore o fundo da tabela de amarelo e fica em destaque na tela
row_count – Retorna o número de linhas de uma tabela
row_values(X) – Retorna em um array os valores de uma linha X
to_a – retorna o conteúdo da tabela em um arranjo de 2 dimensões
to_s – retorna todos os atributos do componente, name, id, value, date, src, width, etc.
8) Ações gerais: todos – Algumas ações utilizadas em quase todos os componentes:
exist? – verifica se o componente existe e retorna verdadeiro ou falso
flash – faz o componente piscar na tela, útil para verificar se o componente está sendo encontrado
to_s – retorna todos os atributos do componente, name, id, value, date, src, width, etc.
focus – coloca o foco no elemento
after_text – retorna o texto que existe antes do componente, útil para verificar o nome do campo em formulários por exemplo
before_text – retorna o texto que está após um determinado componente
methods – retorna todos os métodos (ações) disponíveis para um determinado componente
parent – retorna/acessa o componente pai
9) Ações: Browser (Internet Explorer) – usado: ie.açao
IE.new – abre uma nova janela do Internet Explorer
goto(“endereço”) – direciona o Internet Explorer para um dado endereço
attach(como, “conteudo”) – Retorna o endereço de uma nova janela que se abriu para uma variável, para que se possa manipula-la, o como pode ser, :url ou :title.
close – fecha uma janela específica do internet explorer
close_all – fecha todas as janelas abertas do Internet Explorer
close_other – fecha uma janela que não seja a específicada
bring_to_front – coloca a janela do Internet Explorer em primeiro plano
focus – coloca o foco em uma janela especificada do Internet Explorer
front? – verifica se o Internet Explorer é a janela que esta na frente da tela
maximize – Maximiza a janela
minimize – Minimiza a janela
restore – aciona para restaurar a janela
send_keys – envia comandos (CTRL + A, DEL, etc) para a janela, a documentação completa do comando pode ser vista aqui: http://www.autoitscript.com/autoit3/docs/appendix/SendKeys.htm
forward – aciona para avançar no Internet Explorer
back – aciona para voltar no Internet Explorer
text.include? “texto” – procura por texto na tela e retorna verdadeiro ou falso
refresh – atualiza a pagina
speed – Aumenta ou diminui a velocidade com que os objetos são acessados, inclusive a velocidade com que o texto é escrito na tela o uso é: ie.speed = :fast ou :slow
show_active – exibe o to_s do objeto que está com o foco
show_divs – exibe os divs da tela
show_forms – exibe informações sobre todos os formulários da tela
show_images – exibe informações sobre todas as imagens da tela
show_links – exibe todos os links presentes na página
show_spans – exibe os spans da tela
show_tables – exibe as tabelas da tela
status – retorna o texto que está na barra de status
title – retorna o título da janela
url – retorna a URL que a página está
visible= - esconde a janela do internet Explorer ou faz a mesma aparecer após ser escondida, uso: ie.visible = true, ou false.
Visible – retorna a visibilidade atual da janela
Bem pessoal, desculpe pelo texto ter ficado grande, mas tentei ser o mais explicativo possível e espero que a grande maioria tenha compreendido o uso da ferramenta e possa já ir efetuando vários testes e conhecendo melhor a ferramenta.
Estou trabalhando já na continuidade do artigo e espero poder abordar alguns temas mais avançados, para isso quem tem interesse em dar continuidade no aprendizado, precisa praticar um pouco do que foi passado neste artigo.
Estou a disposição (na medida do possível) para tirar algumas dúvidas e receber críticas, elogios e sugestões.
Abraço a todos e até a próxima.
Raphael Soares. (rafsopd@gmail.com)
Referências:
- Rangel, Eustáquio. Ruby: conhecendo a linguagem. São Paulo: Brasport, 2006. 207 p.
| Anexo | Tamanho |
|---|---|
| google_search.rb | 806 bytes |