@@ -7,6 +7,12 @@ Introdução a testes funcionais com Selenium e Python
7
7
:slug: introducao-a-testes-funcionais-com-selenium-e-python
8
8
:author: Mário Chaves
9
9
10
+ :github: macndesign
11
+ :bitbucket: macndesign
12
+ :twitter: macndesign
13
+ :linkedin: macndesign
14
+ :facebook: macndesign
15
+ :site: http://www.xsd.com.br/blog/
10
16
11
17
12
18
@@ -22,10 +28,10 @@ Porquê usar a linguagem Python nos testes funcionais?
22
28
Como sabemos os testes funcionais são em sua grande parte desenvolvidos por Analistas de Testes e/ou Testadores.
23
29
Para que se tenha uma manutenção mais rápida e eficaz a medida que o código do projeto vai crescendo e ganhando mais funcionalidades, é interessante que os testes estejam coesos e de fácil entendimento. `IMHO <http://pt.wiktionary.org/wiki/IMHO >`_ Python é a linguagem que deixa seu código mais elegante, limpo e entendível.
24
30
25
- *"Python é uma linguagem de programação de alto nível , interpretada, imperativa, orientada a objetos, funcional,
31
+ *"Python é uma linguagem de programação de alto nível , interpretada, imperativa, orientada a objetos, funcional,
26
32
de tipagem dinâmica e forte." * `Wikipedia <http://pt.wikipedia.org/wiki/Python >`_
27
33
28
- Em uma rápida comparação de verbosidade entre Python e Java com o tão criticado "Hello, World!", podemos notar o
34
+ Em uma rápida comparação de verbosidade entre Python e Java com o tão criticado "Hello, World!", podemos notar o
29
35
que quero dizer quando citei *"IMHO Python é a linguagem que deixa seu código mais elegante, limpo e entendível" *.
30
36
31
37
@@ -50,7 +56,7 @@ Exemplo em Python 2.x
50
56
51
57
52
58
53
- Isso mesmo, os dois exemplos fazem a mesma coisa, porém, o exemplo em Java tem 104 caracteres enquanto o exemplo
59
+ Isso mesmo, os dois exemplos fazem a mesma coisa, porém, o exemplo em Java tem 104 caracteres enquanto o exemplo
54
60
em Python possui apenas 21 caracteres.
55
61
56
62
Mas, voltando ao que interessa, vamos ao passo-a-passo de como configurar seu ambiente e depois testar executando algo como exemplo.
@@ -60,7 +66,7 @@ Mas, voltando ao que interessa, vamos ao passo-a-passo de como configurar seu am
60
66
Montando o ambiente
61
67
===================
62
68
63
- Supondo que você usa Windows e não tem nada do que vamos precisar instalado, faça o download dos
69
+ Supondo que você usa Windows e não tem nada do que vamos precisar instalado, faça o download dos
64
70
seguintes itens:
65
71
66
72
Python 2.7.6 - https://www.python.org/downloads/
@@ -73,7 +79,7 @@ seguintes itens:
73
79
*Navegador Web mais recomendado para o uso do Selenium e onde será instalado o plugin SeleniumIDE *
74
80
75
81
PhantomJS v1.9 - https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.7-windows.zip
76
- *Navegador Headless que possibilita a execução dos testes em background, sem a necessidade de executar
82
+ *Navegador Headless que possibilita a execução dos testes em background, sem a necessidade de executar
77
83
toda a interface gráfica do navegador *
78
84
79
85
@@ -143,30 +149,35 @@ Biblioteca Selenium para o Python
143
149
Criando um teste simples com a famosa Selenium IDE lo/
144
150
======================================================
145
151
146
- Após instalar a Selenium IDE dentro do Firefox e reiniciar o navegador, clique no ícone da ferramenta que está no
152
+ Após instalar a Selenium IDE dentro do Firefox e reiniciar o navegador, clique no ícone da ferramenta que está no
147
153
canto superior direito do Navegador.
148
154
149
155
.. image :: images/test-ff-sel-btn.png
156
+ :alt: Botão para iniciar a Selenium IDE
150
157
151
158
Note que na Selenium IDE, a opção de gravar já vem selecionada por padrão.
152
159
153
160
.. image :: images/test-ff-sel-gravar-ligado.png
161
+ :alt: Botão de gravar ligado
154
162
155
163
E para nossa alegria, a URL do site atual que está em nosso Firefox, já está definida no campo "URL Base" da Selenium IDE.
156
164
157
165
Cliquei no link "Como apoiar o IFIC" e acessei a seguinte página.
158
166
159
167
.. image :: images/test-ff-sel-clicar-no-link.png
168
+ :alt: Clicando no link
160
169
161
170
Ao ver o que está acontecendo na Selenium IDE, notamos que ela está gravando tudo o que está acontecendo no navegador.
162
171
163
172
.. image :: images/test-ff-sel-initial-view.png
173
+ :alt: Visualização inicial
164
174
165
175
Retorno ao navegador e faço um simples assert para ver se ao entrar na página o título H1 está correto.
166
176
167
177
.. image :: images/test-ff-sel-assert-h1.png
178
+ :alt: Assert no H1
168
179
169
- Veja como é simples ver as propriedades que podem ser usadas para certificar que você realmente está na tela correta e
180
+ Veja como é simples ver as propriedades que podem ser usadas para certificar que você realmente está na tela correta e
170
181
verificar se os textos estão corretamente aplicados em seus devidos lugares.
171
182
172
183
Nesse exemplo eu verifico se o título H1 da página contém "Como Apoiar o IFIC", para isso foi necessário:
@@ -179,17 +190,19 @@ Nesse exemplo eu verifico se o título H1 da página contém "Como Apoiar o IFIC
179
190
Agora veja o que a Selenium IDE gravou:
180
191
181
192
.. image :: images/test-ff-sel-assert-h1-view.png
193
+ :alt: Vendo o resultado do assert no H1
182
194
183
195
Como era de se esperar, apenas o que você fez no navegador ;)
184
196
185
- *Note que se você já for um usuário experiente da Selenium IDE, souber usar os seletores e conhecer bem o código HTML
197
+ *Note que se você já for um usuário experiente da Selenium IDE, souber usar os seletores e conhecer bem o código HTML
186
198
da página, você poderá escrever todo o seu código na própria Selenium IDE e depois executar. *
187
199
188
200
Para executar o teste criado, basta clicar no botão "Play entire test suite" como na imagem abaixo:
189
201
190
202
.. image :: images/test-ff-sel-play-test.png
203
+ :alt: Botão para executar os testes
191
204
192
- Note que o teste foi executado com sucesso, pois está tudo verdinho :) . Logo abaixo existem algumas mensagens
205
+ Note que o teste foi executado com sucesso, pois está tudo verdinho :) . Logo abaixo existem algumas mensagens
193
206
na sequência que foram executadas.
194
207
195
208
@@ -200,33 +213,35 @@ Salvando/Exportando e executando os testes
200
213
Selenium IDE
201
214
------------
202
215
203
- Ao concluir seu teste você tem a opção de salvar e então executar futuramente para verificar
216
+ Ao concluir seu teste você tem a opção de salvar e então executar futuramente para verificar
204
217
se o sistema continua funcionando como deveria.
205
218
206
219
Para salvar é muito simples, se estiver no Windows ou Linux, basta dar um Ctrl+S e no Mac Command+S, escolher
207
220
uma pasta e clicar em Salvar.
208
221
209
222
.. image :: images/test-ff-sel-save.png
223
+ :alt: Salvando teste
210
224
211
- Sinceramente, se você sempre quiser executar seus testes usando o Mozilla Firefox eu aconselho usar a própria
212
- Selenium IDE para esse propósito, pois com ela você salva seus testes em HTML e os executa tranquilamente com
213
- opção de rodar todo um Test Case de uma vez. Observe que após salvar o teste ele fica disponível na coluna
225
+ Sinceramente, se você sempre quiser executar seus testes usando o Mozilla Firefox eu aconselho usar a própria
226
+ Selenium IDE para esse propósito, pois com ela você salva seus testes em HTML e os executa tranquilamente com
227
+ opção de rodar todo um Test Case de uma vez. Observe que após salvar o teste ele fica disponível na coluna
214
228
"Test Case" da Selenium IDE e você pode ir adicionando os demais testes a essa coluna para que sejam todos executados.
215
229
216
230
217
231
Exportando para uma linguagem de programação
218
232
--------------------------------------------
219
233
220
- Na Selenium IDE existe a opção de exportar seu teste para várias linguagens de programação como: Ruby, Python,
234
+ Na Selenium IDE existe a opção de exportar seu teste para várias linguagens de programação como: Ruby, Python,
221
235
Java e C#.
222
236
223
- Exportar seu teste para uma linguagem de programação pode ser bem útil para o caso de integrar seu teste
224
- ao código de teste desenvolvido pelos programadores já que os testes exportados pela Selenium IDE são
237
+ Exportar seu teste para uma linguagem de programação pode ser bem útil para o caso de integrar seu teste
238
+ ao código de teste desenvolvido pelos programadores já que os testes exportados pela Selenium IDE são
225
239
codificados utilizando a lib unittest, ou seja, na forma de testes unitários.
226
240
227
241
A imagem abaixo mostra como exportar o teste para uma das linguagens disponíveis:
228
242
229
243
.. image :: images/test-ff-sel-export-lang.png
244
+ :alt: Exportando o teste
230
245
231
246
No caso, Python 2 / unittest / Webdriver, mas o teste poderia ser exportado para qualquer outra linguagem disponível.
232
247
Clique nesse item e salve na pasta que desejar com um nome sucinto e seguido da extensão .py (por exemplo: test_como_apoiar.py)
@@ -251,23 +266,23 @@ Veja abaixo o código gerado pela exportação do teste para Python (48 linhas):
251
266
self .base_url = " http://www.ific.com.br/"
252
267
self .verificationErrors = []
253
268
self .accept_next_alert = True
254
-
269
+
255
270
def test_como_apoiar (self ):
256
271
driver = self .driver
257
272
driver.get(self .base_url + " /" )
258
273
driver.find_element_by_link_text(" Como apoiar o IFIC" ).click()
259
274
self .assertEqual(" Como Apoiar o IFIC" , driver.find_element_by_css_selector(" h1" ).text)
260
-
275
+
261
276
def is_element_present (self , how , what ):
262
277
try : self .driver.find_element(by = how, value = what)
263
278
except NoSuchElementException, e: return False
264
279
return True
265
-
280
+
266
281
def is_alert_present (self ):
267
282
try : self .driver.switch_to_alert()
268
283
except NoAlertPresentException, e: return False
269
284
return True
270
-
285
+
271
286
def close_alert_and_get_its_text (self ):
272
287
try :
273
288
alert = self .driver.switch_to_alert()
@@ -278,7 +293,7 @@ Veja abaixo o código gerado pela exportação do teste para Python (48 linhas):
278
293
alert.dismiss()
279
294
return alert_text
280
295
finally : self .accept_next_alert = True
281
-
296
+
282
297
def tearDown (self ):
283
298
self .driver.quit()
284
299
self .assertEqual([], self .verificationErrors)
@@ -367,16 +382,16 @@ Veja o mesmo código gerado pela exportação do teste para Java (73 linhas):
367
382
}
368
383
369
384
370
- Tendo a versão do teste escrita em Python posso simplesmente dar um clique duplo sobre o ícone do arquivo
371
- test_como_apoiar.py que instantaneamente é aberto o navegador (Mozilla Firefox) e executado todo teste
385
+ Tendo a versão do teste escrita em Python posso simplesmente dar um clique duplo sobre o ícone do arquivo
386
+ test_como_apoiar.py que instantaneamente é aberto o navegador (Mozilla Firefox) e executado todo teste
372
387
ao vivo.
373
388
374
389
Mas como já disse, se for para rodar o teste no Firefox, é melhor executar pela própria Selenium IDE.
375
390
376
391
É por isso que agora vamos saber porquê instalamos o PhantomJS.
377
392
378
- Com o PhantomJS temos a possibilidade de executar o browser em "Background", podemos chamar de modo "Headless",
379
- isso faz com que possamos executar toda a nossa suíte de testes sem precisar ligar o Mozilla Firefox e todo o
393
+ Com o PhantomJS temos a possibilidade de executar o browser em "Background", podemos chamar de modo "Headless",
394
+ isso faz com que possamos executar toda a nossa suíte de testes sem precisar ligar o Mozilla Firefox e todo o
380
395
peso de sua interface gráfica, para isso vamos alterar a primeira linha do método setUp() e trocar o webdriver Firefox para PhantomJS:
381
396
382
397
.. code-block :: python
@@ -394,6 +409,7 @@ Então vamos abrir o terminal, console ou cmd, como queira chamar, e navegar at
394
409
O arquivo é executado como na imagem abaixo:
395
410
396
411
.. image :: images/test-ff-change-webdriver.png
412
+ :alt: Teste executado com um webdriver headless
397
413
398
414
Bem amigos, a leitura foi uma breve descrição sobre os seguintes tópicos:
399
415
@@ -412,3 +428,4 @@ Qualquer dúvida pode entrar em contato:
412
428
* Google + `plus.google.com/+MárioChaves81 <https://plus.google.com/+M%C3%A1rioChaves81 >`_
413
429
414
430
Grande abraço!
431
+
0 commit comments