Mudanças entre as edições de "Guia de automatização de testes"
(→Referências) |
(→Principais funções) |
||
(21 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
− | Versão | + | 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== | ||
Linha 30: | Linha 35: | ||
====Principais funções==== | ====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" | {| {{table}} class="wikitable" | ||
| align="center" style="background:#f0f0f0;"|'''Função''' | | align="center" style="background:#f0f0f0;"|'''Função''' | ||
| align="center" style="background:#f0f0f0;"|'''Descrição''' | | align="center" style="background:#f0f0f0;"|'''Descrição''' | ||
+ | | align="center" style="background:#f0f0f0;"|'''Exemplo''' | ||
|- | |- | ||
|open('''URL''') | |open('''URL''') | ||
|Abre uma URL | |Abre uma URL | ||
+ | |open(http>//www.google.com) | ||
|- | |- | ||
|type('''locator''','''value''') | |type('''locator''','''value''') | ||
|Insere um valor no elemento informado | |Insere um valor no elemento informado | ||
+ | | | ||
+ | |- | ||
+ | |echo('''message''') | ||
+ | |Exibe uma mensagem ou variável. Útil para debug. | ||
+ | |echo(${variavelA}) | ||
|- | |- | ||
|click('''locator''') | |click('''locator''') | ||
|Clica em um elemento | |Clica em um elemento | ||
+ | | | ||
|- | |- | ||
|storeText('''locator''','''variável''') | |storeText('''locator''','''variável''') | ||
|Armazena um texto em uma 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''') | |storeEval('''script''','''variável''') | ||
|Armazena o resultado de um script em variável | |Armazena o resultado de um script em variável | ||
− | | | + | |storeEval(storedVars['variableA'].toUpperCase() , uppercase) |
− | + | ||
− | + | ||
|- | |- | ||
|fireEvent('''locator''', '''enventName''') | |fireEvent('''locator''', '''enventName''') | ||
|Simula um evento (focus, blur) | |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''') | |assertValue('''locator''','''pattern''') | ||
|Confere se o texto está no elemento informado | |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=== | ||
Linha 70: | Linha 170: | ||
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. | 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. | + | 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==== | ====Principais funções==== | ||
Linha 78: | Linha 237: | ||
| align="center" style="background:#f0f0f0;"|'''Descrição''' | | align="center" style="background:#f0f0f0;"|'''Descrição''' | ||
|- | |- | ||
− | |get(“'''url'''”); | + | |driver.get(“'''url'''”); |
|Abrir o browser | |Abrir o browser | ||
|- | |- | ||
− | |navigate().refresh(); | + | |driver.navigate().refresh(); |
|Atualizar a página | |Atualizar a página | ||
|- | |- | ||
− | |quit(); | + | |driver.quit(); |
|Fechar a página | |Fechar a página | ||
|- | |- |
Edição atual tal como às 20h22min de 12 de dezembro de 2016
Versão 1.0 de 07/12/2016
Índice
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:
- 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: 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
- 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:
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) |