Automação de Testes de Software com:Automação de Testes de Software com:
DemoiselleDemoiselle BehaveBehave
Julian Cesar dos SantosJulian Cesar dos Santos
Vanderson Botêlho da SilvaVanderson Botêlho da Silva
Demoiselle BehaveDemoiselle Behave
BDD - Behavior Driven DevelopmentBDD - Behavior Driven Development
UmaUma técnica de desenvolvimento ágiltécnica de desenvolvimento ágil
criado porcriado por Dan NorthDan North que integra regras de negócio comque integra regras de negócio com
automação de testes.automação de testes.
EvoluçãoEvolução do TDD:do TDD:
PorPor onde começaonde começa o processo?o processo?
O queO que testar e o que não testar?testar e o que não testar?
O queO que chamamoschamamos de teste?de teste?
ComoComo analisar falhasanalisar falhas??
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
Porque usar BDD?Porque usar BDD?
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação

Especificação de ComportamentoEspecificação de Comportamento
 Um dos grandes problemas na construção de um software é
não entender exatamente o que ele deve fazer
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
UseUse histórias concretashistórias concretas
para ilustrar o que separa ilustrar o que se
deseja do softwaredeseja do software
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
Cenários de uso são maisCenários de uso são mais eficienteseficientes
na comunicaçãona comunicação do que descrições.do que descrições.
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
Exemplos reaisExemplos reais
nosnos mantêm conectadosmantêm conectados
com a visão dos nossoscom a visão dos nossos
stakeholdersstakeholders
Demoiselle BehaveDemoiselle Behave
MotivaçãoMotivação
Como isso Funciona na Práticana Prática
Demoiselle BehaveDemoiselle Behave
FuncionamentoFuncionamento
Funcionalidade: Operar a Calculadora
Narrativa:
Para obter as operações básicas da calculadora
Como um usuário qualquer
Desejo resolver problemas matemáticos de forma mais rápida
Cenário: Somar
Dado que inicio a Calculadora
Quando adiciono "5"
E adiciono "7"
Então seu valor será "12" Escreva suas histórias
Demoiselle BehaveDemoiselle Behave
FuncionamentoFuncionamento
Cenário: Somar
Dado que inicio a Calculadora
Quando adiciono "5"
E adiciono "7"
Então seu valor será "12"
@When("Quando inicio a Calculadora")
public void goToWithName(String local) {
}
@When("adiciono "$valor"")
public void whenAdiciono(double valor) {
}
@Then("seu valor será "$valor"")
public void thenSeuValorSera(double valor) {
}
Suas frases devem ser
mapeadas em métodos
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

ObjetivoObjetivo
 Para testes sob interfaces gráficas o mapeamento de tela visa
desacoplar os elementos de tela ao script de automação.

BenefíciosBenefícios
 Evita duplicação de código;
 Maior manutenibilidade: se houver mudanças na tela a
correção deverá ser aplicada em um único lugar.
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Diferenças para um Page ObjectDiferenças para um Page Object
 Os mapeamentos não possuem
comportamento;
 Os comportamento são
implementados nos steps;
 Podemos reusar comportamentos
para vários objetos e vice-e-versa;
 Melhor manutenção, devido a
redução de código.
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

ExemploExemplo
@ScreenMap(name = "Tela de Busca", location = "http://www.google.com.br")
public class MyPage {
@ElementMap(
name = "Campo de Busca",
locatorType = ElementLocatorType.Id,
locator = "gbqfq")
private TextField searchField;
@ElementMap(
name = "Estou com sorte",
locatorType = ElementLocatorType.Id,
locator = "gbqfbb")
private Button buttonLuckSearch;
}
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

@ScreenMap@ScreenMap
@ScreenMap(
name = "Tela de Busca",
location = "http://www.google.com.br")
Identificação amigável
da tela
Identificação amigável
da tela
Localização da telaLocalização da tela
@ScreenMap(
name = "Tela de Busca",
base="http://www.google.com.br",
location = "/")
Atributo opcional que define o prefixo
do localizador. Importante quando deseja-se
parametrizar os localizadores
Atributo opcional que define o prefixo
do localizador. Importante quando deseja-se
parametrizar os localizadores
Neste caso a localização da tela
É a concatenação da base + location
Neste caso a localização da tela
É a concatenação da base + location
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

@ElementMap@ElementMap
@ElementMap(
name = "Campo de Busca",
locatorType = ElementLocatorType.Id,
locator = "gbqfq")
Identificação amigável
do elemento de tela
Identificação amigável
do elemento de tela
Tipo de localizador:
ClassName; CssSelector
Id; LinkText; Name;
TagName; XPath
Tipo de localizador:
ClassName; CssSelector
Id; LinkText; Name;
TagName; XPathValor de LocalizadorValor de Localizador
@ElementMap(
name = "Menu Superior",
locatorType = ElementLocatorType.Id,
locator = { "gbztm", "gbmm" })
private Select menuLivros;
Pode ser necessário
Mais de um localizador
Pode ser necessário
Mais de um localizador
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Interface ElementInterface Element
 Especificação que provê abstrações para elementos de tela:
 Button.java
 CheckBox.java
 Grid.java
 Label.java
 Link.java
 ListBox.java
 Loading.java
 Menu.java
 MenuItem.java
 PickList.java
 Radio.java
 Screen.java
 Select.java
 TextField.java
@ElementMap(
name = "Pesquisar",
locatorType = ElementLocatorType.Id,
locator = "gbqfb")
private Button botaoPesquiar
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Interface ElementInterface Element
 Cada projeto do tipo Runner deve implementar estas
especificações
public class WebButton extends
WebBase implements Button {
public void click() {
waitElement(0);
getElements().get(0).click();
}
}
public class WebButton extends
WebBase implements Button {
public void click() {
waitElement(0);
getElements().get(0).click();
}
}
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Design DBehave - CompositeDesign DBehave - Composite
 O design Page Object equivale ao refatoramento do
 Vantagens:
 Reuso de comportamentos;
 Polimorfismo para tipos de telas (Web, Desktop, Mobile, ...)
Dados
ScreeMapScreeMap
Comportamento
ElementElement+ =
Dados com
Comportamento
Page ObjectPage Object
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
 O DBehave implementa passos comunspassos comuns para interação com
aplicações Web
Cenário: Procurando uma Alma Gemea
Dado que vou para a página "Alma Gemea"
Quando clico em "Pesquisar"
Quando informo "36" no campo "idade"
Quando seleciono a opção "Solteiro"
Então será exibido na "Caixa ao lado" o valor "Você está com sorte"
Dado que estou na página "Buscar Alma Gemea"
Quando clico em "Procurar"
Então será exibido "Ricardão"
Vai para a tela
mapeada
Vai para a tela
mapeada
Execute a operação
de click
Execute a operação
de click
Informa o valor
de um campo de edição
Informa o valor
de um campo de edição
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
 O DBehave implementa passos comunspassos comuns para interação com
aplicações Web
Cenário: Procurando uma Alma Gemea
Dado que vou para a página "Alma Gemea"
Quando clico em "Pesquisar"
Quando informo "36" no campo "idade"
Quando seleciono a opção "Solteiro"
Então será exibido na "Caixa ao lado" o valor "Você está com sorte"
Dado que estou na página "Buscar Alma Gemea"
Quando clico em "Procurar"
Então será exibido "Ricardão"
Selecione um campo de
escolha (radio, check ou link)
Selecione um campo de
escolha (radio, check ou link)
Verifica se um elemento
Possui um determinado valor
Verifica se um elemento
Possui um determinado valor
Verifica se um elemento
Possui um determinado valor
Verifica se um elemento
Possui um determinado valor
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
 O DBehave implementa passos comunspassos comuns para interação com
aplicações Web
Cenário: Procurando uma Alma Gemea
Dado que vou para a página "Alma Gemea"
Quando clico em "Pesquisar"
Quando informo "36" no campo "idade"
Quando seleciono a opção "Solteiro"
Então será exibido na "Caixa ao lado" o valor "Você está com sorte"
Dado que estou na página "Buscar Alma Gemea"
Quando clico em "Procurar"
Então será exibido "Ricardão"
Selecione um campo de
escolha (radio, check ou link)
Selecione um campo de
escolha (radio, check ou link)
Informa qual a página
Atual sem executar ação
de navegação
Informa qual a página
Atual sem executar ação
de navegação
Verifica em toda a tela
a presença e um texto
Verifica em toda a tela
a presença e um texto
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
Funcionalidade: Acesso
Como um: visitante
Eu quero: acessar o Google
De modo que: a página inicial apareça para mim
Cenário: Acesso ao Google
Dado que vou para a página "Tela de Busca"
Então será exibido "Google"
Demoiselle BehaveDemoiselle Behave
Mapeamento de TelaMapeamento de Tela

Integração BDDIntegração BDD
 Inclua na classe MyPage o botão de pesquisa:
Cenário: Utilização da funcionalidade de pesquisa
Dado que vou para a página "Tela de Busca"
Quando informo "Demoiselle Behave" no campo "Campo de Busca"
Quando clico em "Pesquisar"
Então será exibido "Demoiselle Behave"
@ElementMap( name = "Pesquisar", locatorType =
ElementLocatorType.Id, locator = "gbqfb")
private Button botaoPesquisar;
Demoiselle BehaveDemoiselle Behave
NecessidadeNecessidade
Especificação FormalEspecificação Formal Especificação FormalEspecificação Formal
Funcionalidade: Acessa ao Sistema
Cenário: Acessa sistema com usuário válido
Dado que vou para a página "Tela de Login"
Quando informo "joao" no campo "Usuário"
E informo "123" no campo "Campo Senha"
Quando clico em "Entrar"
Então estou autenticado
Especificação TestávelEspecificação Testável
representa
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:8080/treino/");
WebElement login =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'text')])"));
login.clear();
login.sendKeys("joao");
WebElement senha =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'password')])"));
senha.sendKeys("123");
WebElement botaoOk =
driver.findElement(By.xpath("(//button[conta
ins(@type, 'submit')])"));
botaoOk.click();
Linguagem de ProgramaçãoLinguagem de Programação
representa
Demoiselle BehaveDemoiselle Behave
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:8080/treino/");
WebElement login =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'text')])"));
login.click();
login.clear();
login.sendKeys("joao");
WebElement senha =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'password')])"));
senha.clear();
senha.sendKeys("123");
WebElement botaoOk =
driver.findElement(By.xpath("(//button[conta
ins(@type, 'submit')])"));
botaoOk.click();
Funcionalidade: Acessa ao Sistema
Cenário: Acessa sistema com usuário válido
Dado que vou para a página "Tela de Login"
Quando informo "joao" no campo "Usuário"
E informo "123" no campo "Campo Senha"
Quando clico em "Entrar"
Então estou autenticado
HojeHoje – Redução de Custo– Redução de Custo
ManutençãoManutenção
AprendizagemAprendizagem
ProdutividadeProdutividade
BenefíciosBenefícios
Demoiselle BehaveDemoiselle Behave
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:8080/treino/");
WebElement login =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'text')])"));
login.click();
login.clear();
login.sendKeys("joao");
WebElement senha =
driver.findElement(By.xpath("(//input[contai
ns(@id, 'formLogin')][contains(@type,
'password')])"));
senha.clear();
senha.sendKeys("123");
WebElement botaoOk =
driver.findElement(By.xpath("(//button[conta
ins(@type, 'submit')])"));
botaoOk.click();
Funcionalidade: Acessa ao Sistema
Cenário: Acessa sistema com usuário válido
Dado que vou para a página "Tela de Login"
Quando informo "joao" no campo "Usuário"
E informo "123" no campo "Campo Senha"
Quando clico em "Entrar"
Então estou autenticado
FuturoFuturo – Colaboração– Colaboração
BenefíciosBenefícios
Demoiselle BehaveDemoiselle Behave
IntroduçãoIntrodução

Demoiselle BehaveDemoiselle Behave
 O que é?
 É um framework de integração de ferramentas para uso de técnicas de
Desenvolvimento Orientada a Comportamento - Behaviour-Driven
Development (BDD).
 Além de uma ferramenta BDD:
 Abstração de ferramentas BDD
 Abstração de ferramentas de automação de testes
 Abstração de ferramentas de gestão de testes
 É um subprojeto do Framework Demoiselle
(http://www.frameworkdemoiselle.gov.br/)
Demoiselle BehaveDemoiselle Behave
IntroduçãoIntrodução

Visão GeralVisão Geral
Teste um sistemaTeste um sistema
Behave
Selecione um DriverSelecione um Driver
Execute seus testesExecute seus testes
EscrevaEscreva estóriasestórias
Mapei telasMapei telas
Registre seus resultadosRegistre seus resultados
Escolha uma ferramentaEscolha uma ferramenta
(1)(1)
(2)(2)
(3)(3)
(4)(4)
(5)(5)
Demoiselle BehaveDemoiselle Behave
DemonstraçãoDemonstração
Demoiselle BehaveDemoiselle Behave
Fim de História!Fim de História!
Mais Informações:Mais Informações:
https://github.com/demoiselle/behavehttps://github.com/demoiselle/behave

Demoiselle Behave

  • 1.
    Automação de Testesde Software com:Automação de Testes de Software com: DemoiselleDemoiselle BehaveBehave Julian Cesar dos SantosJulian Cesar dos Santos Vanderson Botêlho da SilvaVanderson Botêlho da Silva
  • 2.
    Demoiselle BehaveDemoiselle Behave BDD- Behavior Driven DevelopmentBDD - Behavior Driven Development UmaUma técnica de desenvolvimento ágiltécnica de desenvolvimento ágil criado porcriado por Dan NorthDan North que integra regras de negócio comque integra regras de negócio com automação de testes.automação de testes. EvoluçãoEvolução do TDD:do TDD: PorPor onde começaonde começa o processo?o processo? O queO que testar e o que não testar?testar e o que não testar? O queO que chamamoschamamos de teste?de teste? ComoComo analisar falhasanalisar falhas??
  • 3.
  • 4.
    Demoiselle BehaveDemoiselle Behave MotivaçãoMotivação  Especificaçãode ComportamentoEspecificação de Comportamento  Um dos grandes problemas na construção de um software é não entender exatamente o que ele deve fazer
  • 5.
    Demoiselle BehaveDemoiselle Behave MotivaçãoMotivação UseUsehistórias concretashistórias concretas para ilustrar o que separa ilustrar o que se deseja do softwaredeseja do software
  • 6.
    Demoiselle BehaveDemoiselle Behave MotivaçãoMotivação Cenáriosde uso são maisCenários de uso são mais eficienteseficientes na comunicaçãona comunicação do que descrições.do que descrições.
  • 7.
    Demoiselle BehaveDemoiselle Behave MotivaçãoMotivação ExemplosreaisExemplos reais nosnos mantêm conectadosmantêm conectados com a visão dos nossoscom a visão dos nossos stakeholdersstakeholders
  • 8.
  • 9.
    Demoiselle BehaveDemoiselle Behave FuncionamentoFuncionamento Funcionalidade:Operar a Calculadora Narrativa: Para obter as operações básicas da calculadora Como um usuário qualquer Desejo resolver problemas matemáticos de forma mais rápida Cenário: Somar Dado que inicio a Calculadora Quando adiciono "5" E adiciono "7" Então seu valor será "12" Escreva suas histórias
  • 10.
    Demoiselle BehaveDemoiselle Behave FuncionamentoFuncionamento Cenário:Somar Dado que inicio a Calculadora Quando adiciono "5" E adiciono "7" Então seu valor será "12" @When("Quando inicio a Calculadora") public void goToWithName(String local) { } @When("adiciono "$valor"") public void whenAdiciono(double valor) { } @Then("seu valor será "$valor"") public void thenSeuValorSera(double valor) { } Suas frases devem ser mapeadas em métodos
  • 11.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  ObjetivoObjetivo  Para testes sob interfaces gráficas o mapeamento de tela visa desacoplar os elementos de tela ao script de automação.  BenefíciosBenefícios  Evita duplicação de código;  Maior manutenibilidade: se houver mudanças na tela a correção deverá ser aplicada em um único lugar.
  • 12.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  Diferenças para um Page ObjectDiferenças para um Page Object  Os mapeamentos não possuem comportamento;  Os comportamento são implementados nos steps;  Podemos reusar comportamentos para vários objetos e vice-e-versa;  Melhor manutenção, devido a redução de código.
  • 13.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  ExemploExemplo @ScreenMap(name = "Tela de Busca", location = "http://www.google.com.br") public class MyPage { @ElementMap( name = "Campo de Busca", locatorType = ElementLocatorType.Id, locator = "gbqfq") private TextField searchField; @ElementMap( name = "Estou com sorte", locatorType = ElementLocatorType.Id, locator = "gbqfbb") private Button buttonLuckSearch; }
  • 14.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  @ScreenMap@ScreenMap @ScreenMap( name = "Tela de Busca", location = "http://www.google.com.br") Identificação amigável da tela Identificação amigável da tela Localização da telaLocalização da tela @ScreenMap( name = "Tela de Busca", base="http://www.google.com.br", location = "/") Atributo opcional que define o prefixo do localizador. Importante quando deseja-se parametrizar os localizadores Atributo opcional que define o prefixo do localizador. Importante quando deseja-se parametrizar os localizadores Neste caso a localização da tela É a concatenação da base + location Neste caso a localização da tela É a concatenação da base + location
  • 15.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  @ElementMap@ElementMap @ElementMap( name = "Campo de Busca", locatorType = ElementLocatorType.Id, locator = "gbqfq") Identificação amigável do elemento de tela Identificação amigável do elemento de tela Tipo de localizador: ClassName; CssSelector Id; LinkText; Name; TagName; XPath Tipo de localizador: ClassName; CssSelector Id; LinkText; Name; TagName; XPathValor de LocalizadorValor de Localizador @ElementMap( name = "Menu Superior", locatorType = ElementLocatorType.Id, locator = { "gbztm", "gbmm" }) private Select menuLivros; Pode ser necessário Mais de um localizador Pode ser necessário Mais de um localizador
  • 16.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  Interface ElementInterface Element  Especificação que provê abstrações para elementos de tela:  Button.java  CheckBox.java  Grid.java  Label.java  Link.java  ListBox.java  Loading.java  Menu.java  MenuItem.java  PickList.java  Radio.java  Screen.java  Select.java  TextField.java @ElementMap( name = "Pesquisar", locatorType = ElementLocatorType.Id, locator = "gbqfb") private Button botaoPesquiar
  • 17.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  Interface ElementInterface Element  Cada projeto do tipo Runner deve implementar estas especificações public class WebButton extends WebBase implements Button { public void click() { waitElement(0); getElements().get(0).click(); } } public class WebButton extends WebBase implements Button { public void click() { waitElement(0); getElements().get(0).click(); } }
  • 18.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  Design DBehave - CompositeDesign DBehave - Composite  O design Page Object equivale ao refatoramento do  Vantagens:  Reuso de comportamentos;  Polimorfismo para tipos de telas (Web, Desktop, Mobile, ...) Dados ScreeMapScreeMap Comportamento ElementElement+ = Dados com Comportamento Page ObjectPage Object
  • 19.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  Integração BDDIntegração BDD  O DBehave implementa passos comunspassos comuns para interação com aplicações Web Cenário: Procurando uma Alma Gemea Dado que vou para a página "Alma Gemea" Quando clico em "Pesquisar" Quando informo "36" no campo "idade" Quando seleciono a opção "Solteiro" Então será exibido na "Caixa ao lado" o valor "Você está com sorte" Dado que estou na página "Buscar Alma Gemea" Quando clico em "Procurar" Então será exibido "Ricardão" Vai para a tela mapeada Vai para a tela mapeada Execute a operação de click Execute a operação de click Informa o valor de um campo de edição Informa o valor de um campo de edição
  • 20.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  Integração BDDIntegração BDD  O DBehave implementa passos comunspassos comuns para interação com aplicações Web Cenário: Procurando uma Alma Gemea Dado que vou para a página "Alma Gemea" Quando clico em "Pesquisar" Quando informo "36" no campo "idade" Quando seleciono a opção "Solteiro" Então será exibido na "Caixa ao lado" o valor "Você está com sorte" Dado que estou na página "Buscar Alma Gemea" Quando clico em "Procurar" Então será exibido "Ricardão" Selecione um campo de escolha (radio, check ou link) Selecione um campo de escolha (radio, check ou link) Verifica se um elemento Possui um determinado valor Verifica se um elemento Possui um determinado valor Verifica se um elemento Possui um determinado valor Verifica se um elemento Possui um determinado valor
  • 21.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  Integração BDDIntegração BDD  O DBehave implementa passos comunspassos comuns para interação com aplicações Web Cenário: Procurando uma Alma Gemea Dado que vou para a página "Alma Gemea" Quando clico em "Pesquisar" Quando informo "36" no campo "idade" Quando seleciono a opção "Solteiro" Então será exibido na "Caixa ao lado" o valor "Você está com sorte" Dado que estou na página "Buscar Alma Gemea" Quando clico em "Procurar" Então será exibido "Ricardão" Selecione um campo de escolha (radio, check ou link) Selecione um campo de escolha (radio, check ou link) Informa qual a página Atual sem executar ação de navegação Informa qual a página Atual sem executar ação de navegação Verifica em toda a tela a presença e um texto Verifica em toda a tela a presença e um texto
  • 22.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  Integração BDDIntegração BDD Funcionalidade: Acesso Como um: visitante Eu quero: acessar o Google De modo que: a página inicial apareça para mim Cenário: Acesso ao Google Dado que vou para a página "Tela de Busca" Então será exibido "Google"
  • 23.
    Demoiselle BehaveDemoiselle Behave Mapeamentode TelaMapeamento de Tela  Integração BDDIntegração BDD  Inclua na classe MyPage o botão de pesquisa: Cenário: Utilização da funcionalidade de pesquisa Dado que vou para a página "Tela de Busca" Quando informo "Demoiselle Behave" no campo "Campo de Busca" Quando clico em "Pesquisar" Então será exibido "Demoiselle Behave" @ElementMap( name = "Pesquisar", locatorType = ElementLocatorType.Id, locator = "gbqfb") private Button botaoPesquisar;
  • 24.
    Demoiselle BehaveDemoiselle Behave NecessidadeNecessidade EspecificaçãoFormalEspecificação Formal Especificação FormalEspecificação Formal Funcionalidade: Acessa ao Sistema Cenário: Acessa sistema com usuário válido Dado que vou para a página "Tela de Login" Quando informo "joao" no campo "Usuário" E informo "123" no campo "Campo Senha" Quando clico em "Entrar" Então estou autenticado Especificação TestávelEspecificação Testável representa WebDriver driver = new FirefoxDriver(); driver.get("http://localhost:8080/treino/"); WebElement login = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'text')])")); login.clear(); login.sendKeys("joao"); WebElement senha = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'password')])")); senha.sendKeys("123"); WebElement botaoOk = driver.findElement(By.xpath("(//button[conta ins(@type, 'submit')])")); botaoOk.click(); Linguagem de ProgramaçãoLinguagem de Programação representa
  • 25.
    Demoiselle BehaveDemoiselle Behave WebDriverdriver = new FirefoxDriver(); driver.get("http://localhost:8080/treino/"); WebElement login = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'text')])")); login.click(); login.clear(); login.sendKeys("joao"); WebElement senha = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'password')])")); senha.clear(); senha.sendKeys("123"); WebElement botaoOk = driver.findElement(By.xpath("(//button[conta ins(@type, 'submit')])")); botaoOk.click(); Funcionalidade: Acessa ao Sistema Cenário: Acessa sistema com usuário válido Dado que vou para a página "Tela de Login" Quando informo "joao" no campo "Usuário" E informo "123" no campo "Campo Senha" Quando clico em "Entrar" Então estou autenticado HojeHoje – Redução de Custo– Redução de Custo ManutençãoManutenção AprendizagemAprendizagem ProdutividadeProdutividade BenefíciosBenefícios
  • 26.
    Demoiselle BehaveDemoiselle Behave WebDriverdriver = new FirefoxDriver(); driver.get("http://localhost:8080/treino/"); WebElement login = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'text')])")); login.click(); login.clear(); login.sendKeys("joao"); WebElement senha = driver.findElement(By.xpath("(//input[contai ns(@id, 'formLogin')][contains(@type, 'password')])")); senha.clear(); senha.sendKeys("123"); WebElement botaoOk = driver.findElement(By.xpath("(//button[conta ins(@type, 'submit')])")); botaoOk.click(); Funcionalidade: Acessa ao Sistema Cenário: Acessa sistema com usuário válido Dado que vou para a página "Tela de Login" Quando informo "joao" no campo "Usuário" E informo "123" no campo "Campo Senha" Quando clico em "Entrar" Então estou autenticado FuturoFuturo – Colaboração– Colaboração BenefíciosBenefícios
  • 27.
    Demoiselle BehaveDemoiselle Behave IntroduçãoIntrodução  DemoiselleBehaveDemoiselle Behave  O que é?  É um framework de integração de ferramentas para uso de técnicas de Desenvolvimento Orientada a Comportamento - Behaviour-Driven Development (BDD).  Além de uma ferramenta BDD:  Abstração de ferramentas BDD  Abstração de ferramentas de automação de testes  Abstração de ferramentas de gestão de testes  É um subprojeto do Framework Demoiselle (http://www.frameworkdemoiselle.gov.br/)
  • 28.
    Demoiselle BehaveDemoiselle Behave IntroduçãoIntrodução  VisãoGeralVisão Geral Teste um sistemaTeste um sistema Behave Selecione um DriverSelecione um Driver Execute seus testesExecute seus testes EscrevaEscreva estóriasestórias Mapei telasMapei telas Registre seus resultadosRegistre seus resultados Escolha uma ferramentaEscolha uma ferramenta (1)(1) (2)(2) (3)(3) (4)(4) (5)(5)
  • 29.
  • 30.
    Demoiselle BehaveDemoiselle Behave Fimde História!Fim de História! Mais Informações:Mais Informações: https://github.com/demoiselle/behavehttps://github.com/demoiselle/behave