Mudanças entre as edições de "Guia de automatização de testes"

De MSTECH wiki
Ir para: navegação, pesquisa
(Principais funções)
 
(26 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
  Versão 0.1 - Em desenvolvimento
+
  Versão 1.0 de 07/12/2016
  
 
==Introdução==
 
==Introdução==
Linha 8: Linha 8:
  
 
Ambos são aceitáveis, mas a forma "automatização" é preferível por ser um substantivo deverbal de "automatizar", enquanto "automação" é um aportuguesamento do termo inglês "automation".
 
Ambos são aceitáveis, mas a forma "automatização" é preferível por ser um substantivo deverbal de "automatizar", enquanto "automação" é um aportuguesamento do termo inglês "automation".
 +
 +
==Materiais de suporte==
 +
 +
* [[Funções do Selenium IDE]]
 +
* [[Expressão regular e XPath]]
  
 
==Ferramentas==
 
==Ferramentas==
  
 
===Selenium IDE===
 
===Selenium IDE===
 +
 +
====Sobre o Selenium IDE====
 +
 +
Selenium IDE é um ambiente de desenvolvimento integrado para os testes com Selenium. Foi desenvolvido como uma extensão do Firefox e permite gravar, editar e depurar os testes.
 +
 +
====Instalação====
 +
 +
O Selenium IDE está disponível em https://addons.mozilla.org/pt-br/firefox/addon/selenium-ide/
 +
 +
====Plugins====
 +
 +
O Selenium IDE possui muitos plugins que adicionam novas e úteis funcionalidades. Os plugins estão disponíveis para download em http://www.seleniumhq.org/download/ . Segue a lista dos principais plugins:
 +
 +
* Flow Control (https://addons.mozilla.org/pt-br/firefox/addon/flow-control/) - This is a plugin for Selenium IDE incorporating the flow control extension.
 +
 +
* SelBlocks (https://addons.mozilla.org/pt-br/firefox/addon/selenium-ide-sel-blocks) - This is a language extension for Selenium IDE that provides javascript-like conditionals, looping, callable functions, error catching, and JSON/XML driven parametrization.
 +
 +
====Principais funções====
 +
 +
As funções do Selenium IDE tem a seguinte estrutura: <code>função(parâmetro1 , parâmetro2)</code>.
 +
 +
A função é selecionada no campo <code>Comando</code>.
 +
 +
O parâmetro1 é informado no campo <code>Alvo</code>.
 +
 +
O parâmetro2 é informado no campo <code>Valor</code>.
 +
A quantidade de parâmetros depende da função selecionada.
 +
 +
Segue a lista com as principais funções:
 +
 +
{| {{table}} class="wikitable"
 +
| align="center" style="background:#f0f0f0;"|'''Função'''
 +
| align="center" style="background:#f0f0f0;"|'''Descrição'''
 +
| align="center" style="background:#f0f0f0;"|'''Exemplo'''
 +
|-
 +
|open('''URL''')
 +
|Abre uma URL
 +
|open(http>//www.google.com)
 +
|-
 +
|type('''locator''','''value''')
 +
|Insere um valor no elemento informado
 +
|
 +
|-
 +
|echo('''message''')
 +
|Exibe uma mensagem ou variável. Útil para debug.
 +
|echo(${variavelA})
 +
|-
 +
|click('''locator''')
 +
|Clica em um elemento
 +
|
 +
|-
 +
|storeText('''locator''','''variável''')
 +
|Armazena um texto em uma variável
 +
|
 +
|-
 +
|store('''expression''', '''variableName''')
 +
|Armazena uma valor em uma variável
 +
|store(SeleniumIDE,variableA)
 +
|-
 +
|storeEval('''script''','''variável''')
 +
|Armazena o resultado de um script em variável
 +
|storeEval(storedVars['variableA'].toUpperCase() , uppercase)
 +
|-
 +
|fireEvent('''locator''', '''enventName''')
 +
|Simula um evento (focus, blur)
 +
|
 +
|-
 +
|sendKeys('''locator''', '''value''')
 +
|Simula o evento keystroke em um elemento, como se digitasse o valor tecla por tecla.
 +
|
 +
|-
 +
|assertText('''locator''', '''pattern''')
 +
|Confere se o texto está no elemento informado
 +
|
 +
|-
 +
|assertValue('''locator''','''pattern''')
 +
|Confere se o texto está no elemento informado
 +
|
 +
|-
 +
|assertTextPresent('''pattern''')
 +
|Retorna verdadeiro se o texto da tela corresponder ao texto informado
 +
|
 +
|-
 +
|assertAttribute('''attibuteLocator''','''pattern''')
 +
|Faz a asserção do pattern informado no atributo. Retorna verdadeiro se a asserção for correta.
 +
|
 +
|-
 +
|waitForTextNotPresent('''pattern''')
 +
|Aguarda o texto informado não estar disponível na tela
 +
|
 +
|-
 +
|waitForValue('''locator''','''pattern''')
 +
|Aguarda um valor em um elemento
 +
|
 +
|-
 +
|forXml('''file''')
 +
|Caminho do arquivo XML.
 +
|forXml(file://C:/testdata.xml)
 +
|-
 +
|endForXml()
 +
|Finaliza o For do Xml. É colocado no final do bloco de código iniciado pelo comando forXml.
 +
|
 +
|-
 +
|}
 +
 +
====Adicionando novas funções====
 +
 +
Você pode adicionar novas funções no Selenium IDE. Para isso, você deve criar a função em javascript e adicionar seu caminho no campo <Code>Opções > Opções > Extensões do Selenium Core (user-extensions.js)</code>.
 +
 +
Algumas funções úteis podem ser encontradas em [[Funções do Selenium IDE]]
 +
 +
====Localizando elementos com XPath====
 +
 +
O XPath é uma linguagem de consulta, semelhante a expressão regular, para pesquisa em documentos com estrutura XML (como HTML por exemplo). É um recurso extremamente útil e muito utilizado durante a criação de scripts de testes de software em plataforma web. Caracteres:
 +
 +
/ (barra): Pesquisa a partir da raiz da árvore.
 +
 +
// (duas barras): Pesquisa em toda a árvore.
 +
 +
[ ] (colchetes): Definição das propriedades de um elemento.
 +
 +
@ (arroba)Propriedade do elemento.
 +
 +
<nowiki>*</nowiki> (asterisco): Todos os elementos.
 +
 +
 +
''Exemplo'': <code>//div[@id="pswd_info"]/ul/li[@id="letra"]@class</code>
 +
 +
''Descrição'': Está pesquisando em toda a árvore uma DIV que tenha o atributo ID igual a "pswd_info". Encontrada a DIV, vai até a primeira UL, depois pesquisa pela LI que contenha o atributo ID igual a "letra". Encontrado esse elemento, está setando o atributo class.
 +
 +
====Data driven com XML====
 +
 +
O Selenium IDe permite a realização de data driven com  arquivo XML através do plugin SelBlocks. Este plugin adiciona as funções <code>forXml</code> e <code>endForXml</code>.
 +
 +
O arquivo XML deve estar formatado. Segue um exemplo:
 +
 +
<syntaxhighlight lang="xml" line="1" >
 +
<testdata>
 +
<vars cpf="22852240521" email="testeemail1@mstech.com.br" nome="ANDRE ALUNO TESTE 01" />
 +
<vars cpf="36758316556" email="testeemail2@mstech.com.br" nome="ANDRE ALUNO TESTE 02" />
 +
</testdata>
 +
</syntaxhighlight>
 +
 +
Dentro do Selenium IDE, basta referenciar as variáveis. Seguindo o exemplo acima, ficaria <code>${cpf}</code>, <code>${email}</code> e <code>${nome}</code>.
 +
  
  
 
===Selenium Webdriver===
 
===Selenium Webdriver===
  
 +
====Sobre o Selenium Webdriver====
 +
 +
O WebDriver é a classe base do Selenium. A partir dela, podemos realizar diversas funcionalidades de navegação; por exemplo: abrir um browser, fechar um browser, fechar uma aba de um browser, entre outras.
 +
 +
WebElement é uma classe do Selenium representando um elemento HTML. As principais operações de interação em uma página são realizadas através desta interface; por exemplo: interações com caixas de texto, botões, links, entre outras. Dentro dessa classe, podemos utilziar o método findElements. Este método permite localizar os elementos dentro de uma página. Porém, para localizar o elemento, precisaremos também da classe By, que determina o meio (ID, name, class, xpath) pelo qual o iremos encontrar.
 +
 +
====Requisitos====
 +
 +
* Java JDK
 +
* Eclipse Java EE IDE (https://eclipse.org/downloads/)
 +
* Selenium Client & WebDriver Language Bindings (Java) (http://www.seleniumhq.org/download/)
 +
* FirefoxDriver (geckodriver) (https://github.com/mozilla/geckodriver/releases)
 +
* ChromeDriver (https://sites.google.com/a/chromium.org/chromedriver/downloads)
 +
 +
====Configurando libraries====
 +
 +
* Instalar o Eclipse
 +
* Acessar File > New > Java Project e inserir o nome do projeto
 +
* Botão direito no projeto criado > Build path > Configure build path > Aba Libraries > Add external JARS
 +
* Selecione todos os arquivos do Selenium Client & WebDriver Language Bindings
 +
* Botão direito no projeto criado > Build path > Configure build path > Aba Libraries > Add Library e selecione JUnit
 +
 +
====Configurando o Chromedriver e Geckodriver (Firefox)====
 +
 +
'''Importante''': é necessário adicionar os arquivos chromedriver.exe e geckodriver.exe na variável de ambiente PATH.
 +
 +
Para o Firefox:
 +
 +
<syntaxhighlight lang="java" line="1" >
 +
import org.openqa.selenium.firefox.FirefoxDriver;
 +
 +
private WebDriver driver;
 +
@Before
 +
public void setUp()
 +
{
 +
      System.setProperty("webdriver.gecko.driver", "C:\\geckodriver-v0.11.1-win64\\geckodriver.exe");
 +
              driver = new FirefoxDriver();
 +
      driver.get("http://www.google.com");
 +
        }
 +
</syntaxhighlight>
 +
 +
Para o Chrome:
 +
 +
<syntaxhighlight lang="java" line="1" >
 +
 +
import org.openqa.selenium.chrome.ChromeDriver;
 +
 +
private WebDriver driver;
 +
@Before
 +
public void setUp()
 +
{
 +
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver_win32\\chromedriver.exe");
 +
driver = new ChromeDriver();
 +
driver.get("http://www.google.com");
 +
}
 +
</syntaxhighlight>
 +
 +
====Chamadas====
 +
 +
<code>@Before</code>: é executado antes de qualquer Caso de Teste, por exemplo, abrir uma página em um browser.
 +
 +
<code>@Test</code>: é utilizado para identificar que é Caso de Teste.
 +
 +
<code>@After</code>: todas as ações que estão contidas nele são executadas após cada Caso de Teste rodar; por exemplo: fechar browser.
 +
 +
====Principais funções====
 +
 +
{| {{table}} class="wikitable"
 +
| align="center" style="background:#f0f0f0;"|'''Função'''
 +
| align="center" style="background:#f0f0f0;"|'''Descrição'''
 +
|-
 +
|driver.get(“'''url'''”);
 +
|Abrir o browser
 +
|-
 +
|driver.navigate().refresh();
 +
|Atualizar a página
 +
|-
 +
|driver.quit();
 +
|Fechar a página
 +
|-
 +
|driver.findElement(By.id(“'''Entrar'''”)).click();
 +
|Clica no botão
 +
|-
 +
|driver.manage().window().maximize();
 +
|Maximizar janela
 +
|-
 +
|driver.findElement(By.id(“'''Nome'''”)).clear();
 +
|Apaga informações de um campo
 +
|-
 +
|WebElement elemento = driver.findElement(By.id(“'''ID do elemento'''”));
 +
|Encontrar elemento pelo ID
 +
|-
 +
|WebElement element = driver.findElement(By.className(“'''nome classe'''”));
 +
|Encontrar elemento pela classe
 +
|-
 +
|assertTrue('''topicosrecentes'''.isDisplayed());
 +
|Validar se o elemento está exibido na página
 +
|-
 +
|assertTrue(menusobre.getText().contains(“'''SOBRE'''”));
 +
|Validar se o nome do elemento contém o texto
 +
|-
 +
|assertTrue(tagwebdriver.getText().equals(“'''Webdriver'''”));
 +
|Validar se o nome do elemento é igual o texto
 +
|-
 +
|driver.findElement(By.id(“'''ConfirmaNome'''”)).isDisplayed();
 +
|É usado para que o usuário possa visualizar se o elemento está visível para o utilizador
 +
|-
 +
|driver.findElement(By.id(“'''ConfirmaNome'''”)).isEnabled();
 +
|Usado para verificar se o elemento está ativo na tela em determinado momento,  é muito usado em fluxo de sites
 +
|-
 +
|driver.findElement(By.id(“'''SexoM'''”)).isSelected();
 +
|Verifica se o elemento está selecionado no determinado momento
 +
|-
 +
|driver.findElement(By.id(“'''Nome'''”)).sendKeys(“'''André Iguera'''”);
 +
|Com esse comando, inserimos valores em determinados campos do browser
 +
|-
 +
|Thread.sleep('''5000''');
 +
|Aguardar um tempo (ms)
 +
|-
 +
|}
  
 
==Referências==
 
==Referências==
  
 
* [https://ciberduvidas.iscte-iul.pt/consultorio/perguntas/automacao-ou-automatizacao/3860 Ciberdúvidas]
 
* [https://ciberduvidas.iscte-iul.pt/consultorio/perguntas/automacao-ou-automatizacao/3860 Ciberdúvidas]
 +
* [https://addons.mozilla.org Add-ons Mozilla]
 +
* [https://sites.google.com/a/chromium.org/chromedriver/getting-started Chromedriver]
 +
* [http://www.taketest.com.br/ TakeTest]

Edição atual tal como às 20h22min de 12 de dezembro de 2016

Versão 1.0 de 07/12/2016

Introdução

Este guia visa reunir as principais informações sobre automatização de testes, assim como suas ferramentas.

Automação ou automatização?

Ambos são aceitáveis, mas a forma "automatização" é preferível por ser um substantivo deverbal de "automatizar", enquanto "automação" é um aportuguesamento do termo inglês "automation".

Materiais de suporte

Ferramentas

Selenium IDE

Sobre o Selenium IDE

Selenium IDE é um ambiente de desenvolvimento integrado para os testes com Selenium. Foi desenvolvido como uma extensão do Firefox e permite gravar, editar e depurar os testes.

Instalação

O Selenium IDE está disponível em https://addons.mozilla.org/pt-br/firefox/addon/selenium-ide/

Plugins

O Selenium IDE possui muitos plugins que adicionam novas e úteis funcionalidades. Os plugins estão disponíveis para download em http://www.seleniumhq.org/download/ . Segue a lista dos principais plugins:

Principais funções

As funções do Selenium IDE tem a seguinte estrutura: função(parâmetro1 , parâmetro2).

A função é selecionada no campo Comando.

O parâmetro1 é informado no campo Alvo.

O parâmetro2 é informado no campo Valor.

A quantidade de parâmetros depende da função selecionada.

Segue a lista com as principais funções:

Função Descrição Exemplo
open(URL) Abre uma URL open(http>//www.google.com)
type(locator,value) Insere um valor no elemento informado
echo(message) Exibe uma mensagem ou variável. Útil para debug. echo(${variavelA})
click(locator) Clica em um elemento
storeText(locator,variável) Armazena um texto em uma variável
store(expression, variableName) Armazena uma valor em uma variável store(SeleniumIDE,variableA)
storeEval(script,variável) Armazena o resultado de um script em variável storeEval(storedVars['variableA'].toUpperCase() , uppercase)
fireEvent(locator, enventName) Simula um evento (focus, blur)
sendKeys(locator, value) Simula o evento keystroke em um elemento, como se digitasse o valor tecla por tecla.
assertText(locator, pattern) Confere se o texto está no elemento informado
assertValue(locator,pattern) Confere se o texto está no elemento informado
assertTextPresent(pattern) Retorna verdadeiro se o texto da tela corresponder ao texto informado
assertAttribute(attibuteLocator,pattern) Faz a asserção do pattern informado no atributo. Retorna verdadeiro se a asserção for correta.
waitForTextNotPresent(pattern) Aguarda o texto informado não estar disponível na tela
waitForValue(locator,pattern) Aguarda um valor em um elemento
forXml(file) Caminho do arquivo XML. forXml(file://C:/testdata.xml)
endForXml() Finaliza o For do Xml. É colocado no final do bloco de código iniciado pelo comando forXml.

Adicionando novas funções

Você pode adicionar novas funções no Selenium IDE. Para isso, você deve criar a função em javascript e adicionar seu caminho no campo Opções > Opções > Extensões do Selenium Core (user-extensions.js).

Algumas funções úteis podem ser encontradas em Funções do Selenium IDE

Localizando elementos com XPath

O XPath é uma linguagem de consulta, semelhante a expressão regular, para pesquisa em documentos com estrutura XML (como HTML por exemplo). É um recurso extremamente útil e muito utilizado durante a criação de scripts de testes de software em plataforma web. Caracteres:

/ (barra): Pesquisa a partir da raiz da árvore.

// (duas barras): Pesquisa em toda a árvore.

[ ] (colchetes): Definição das propriedades de um elemento.

@ (arroba)Propriedade do elemento.

* (asterisco): Todos os elementos.


Exemplo: //div[@id="pswd_info"]/ul/li[@id="letra"]@class

Descrição: Está pesquisando em toda a árvore uma DIV que tenha o atributo ID igual a "pswd_info". Encontrada a DIV, vai até a primeira UL, depois pesquisa pela LI que contenha o atributo ID igual a "letra". Encontrado esse elemento, está setando o atributo class.

Data driven com XML

O Selenium IDe permite a realização de data driven com arquivo XML através do plugin SelBlocks. Este plugin adiciona as funções forXml e endForXml.

O arquivo XML deve estar formatado. Segue um exemplo:

1 <testdata>
2 <vars cpf="22852240521" email="testeemail1@mstech.com.br" nome="ANDRE ALUNO TESTE 01" />
3 <vars cpf="36758316556" email="testeemail2@mstech.com.br" nome="ANDRE ALUNO TESTE 02" />
4 </testdata>

Dentro do Selenium IDE, basta referenciar as variáveis. Seguindo o exemplo acima, ficaria ${cpf}, ${email} e ${nome}.


Selenium Webdriver

Sobre o Selenium Webdriver

O WebDriver é a classe base do Selenium. A partir dela, podemos realizar diversas funcionalidades de navegação; por exemplo: abrir um browser, fechar um browser, fechar uma aba de um browser, entre outras.

WebElement é uma classe do Selenium representando um elemento HTML. As principais operações de interação em uma página são realizadas através desta interface; por exemplo: interações com caixas de texto, botões, links, entre outras. Dentro dessa classe, podemos utilziar o método findElements. Este método permite localizar os elementos dentro de uma página. Porém, para localizar o elemento, precisaremos também da classe By, que determina o meio (ID, name, class, xpath) pelo qual o iremos encontrar.

Requisitos

Configurando libraries

  • Instalar o Eclipse
  • Acessar File > New > Java Project e inserir o nome do projeto
  • Botão direito no projeto criado > Build path > Configure build path > Aba Libraries > Add external JARS
  • Selecione todos os arquivos do Selenium Client & WebDriver Language Bindings
  • Botão direito no projeto criado > Build path > Configure build path > Aba Libraries > Add Library e selecione JUnit

Configurando o Chromedriver e Geckodriver (Firefox)

Importante: é necessário adicionar os arquivos chromedriver.exe e geckodriver.exe na variável de ambiente PATH.

Para o Firefox:

 1 import org.openqa.selenium.firefox.FirefoxDriver;
 2 
 3 private WebDriver driver;
 4 @Before
 5 	public void setUp()
 6 	{
 7 	       System.setProperty("webdriver.gecko.driver", "C:\\geckodriver-v0.11.1-win64\\geckodriver.exe");
 8                driver = new FirefoxDriver();
 9 	       driver.get("http://www.google.com");
10         }

Para o Chrome:

 1 import org.openqa.selenium.chrome.ChromeDriver;
 2 
 3 private WebDriver driver;
 4 @Before
 5 	public void setUp()
 6 	{
 7 		System.setProperty("webdriver.chrome.driver", "C:\\chromedriver_win32\\chromedriver.exe");
 8 		driver = new ChromeDriver();
 9 		driver.get("http://www.google.com");
10 	}

Chamadas

@Before: é executado antes de qualquer Caso de Teste, por exemplo, abrir uma página em um browser.

@Test: é utilizado para identificar que é Caso de Teste.

@After: todas as ações que estão contidas nele são executadas após cada Caso de Teste rodar; por exemplo: fechar browser.

Principais funções

Função Descrição
driver.get(“url”); Abrir o browser
driver.navigate().refresh(); Atualizar a página
driver.quit(); Fechar a página
driver.findElement(By.id(“Entrar”)).click(); Clica no botão
driver.manage().window().maximize(); Maximizar janela
driver.findElement(By.id(“Nome”)).clear(); Apaga informações de um campo
WebElement elemento = driver.findElement(By.id(“ID do elemento”)); Encontrar elemento pelo ID
WebElement element = driver.findElement(By.className(“nome classe”)); Encontrar elemento pela classe
assertTrue(topicosrecentes.isDisplayed()); Validar se o elemento está exibido na página
assertTrue(menusobre.getText().contains(“SOBRE”)); Validar se o nome do elemento contém o texto
assertTrue(tagwebdriver.getText().equals(“Webdriver”)); Validar se o nome do elemento é igual o texto
driver.findElement(By.id(“ConfirmaNome”)).isDisplayed(); É usado para que o usuário possa visualizar se o elemento está visível para o utilizador
driver.findElement(By.id(“ConfirmaNome”)).isEnabled(); Usado para verificar se o elemento está ativo na tela em determinado momento, é muito usado em fluxo de sites
driver.findElement(By.id(“SexoM”)).isSelected(); Verifica se o elemento está selecionado no determinado momento
driver.findElement(By.id(“Nome”)).sendKeys(“André Iguera”); Com esse comando, inserimos valores em determinados campos do browser
Thread.sleep(5000); Aguardar um tempo (ms)

Referências