Giter Club home page Giter Club logo

behave's People

Contributors

ahvsoares avatar albertoivo avatar alineas avatar alissoncoelhodemorais avatar antonioclaudioneiva avatar arildojg avatar arildojgueno avatar botelhojp avatar delmarfilho avatar estivalet avatar fgalluzzo avatar flaviocysne avatar joaquimpedrooliveira avatar jorgesartori avatar juliancesar avatar lmveloso avatar lucianojs avatar marvinsiq avatar mestihudson avatar naubergois avatar rogernobre avatar thiagonicolielo avatar ticianatoffoli avatar ttperes avatar waffle-iron avatar wegneto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

behave's Issues

Pergunta para refletir

Onde ficará armazenada a informação se tratar de uma execução manual ou automatizada para casos gerados pelo DBehave?

Plugin JBehave e cores nas estórias

Eu tenho o plugin do jbehave e minhas estórias aparecem na cor vermelha. Já mudei a propriedade para linguagem "pt" mas ainda assim a estória aparece tudo com a mesma cor. Como eu faço para destacar as palavras reservadas dado que, então, ...?

Ajuste na documentação

Faltou corrigir na documentação em "4.2. Frases pré-definidas pelo framework" mudar "página" para "tela".

Sugestão

Aqui em POA estamos notando uma característica nas execuções.
Quando criamos uma story para servir de reuso e depois usamos ela em outra story,
o runner roda as 2 durante a execução o que é indesejado.
Para evitar isso é necessário criar uma "variável fake" para que a ferramenta "skip" sua execução o que torna a escrita deselegante.

A sugestão seria criar um cenário com a palavra ABSTRACT, que não será executado em runtime (assim como classe abstratas em java não podem ser instanciadas).
O que vcs pensam sobre isso? Ja tiveram esse problema?

Erro com o step "Então será exibido ..." (textVisible)

Estou com problemas em utilizar o passo comum "Então será exibido ..."
Este step está falhando aleatoriamente na execução dos testes em um servidor de integração. Magicamente as vezes o teste passa e as vezes falha. Inicialmente pensei que o erro era na página mas já verifiquei o texto, inclusive alterei e coloquei outros que também estavam presentes e nada. E o erro acontece em várias páginas. Cheguei a colocar um timeout de 60 segundos e nada. O texto é fixo na página, não tem nada de javascript e tenho certeza que o texto está presente pois o próprio screnshot do erro o mostra. Já verifiquei o método waitText e parece que está correto. Sinceramente não sei mais o que fazer. Alguém tem alguma ideia? Será que tem alguma influência do servidor por estar rodando em cima do Xvfb?

Arquétipo Maven para Demoiselle Behave

Baixei o projeto no GitHub e comecei a escrever exemplos a partir dos projetos que existiam lá que testavam uma calculadora e também a navegação pela página do google, porém eu queria criar um novo projeto, só que eu não estou conseguindo o arquétipo maven indicado no guia de referência que é o "behave-selenium-archetype".

Se for possível me indique onde encontrar o archetype-catalog.xml que contenha o arquétipo citado anteriormente para eu configurar o repositório.

Rodar teste informando profile do Firefox

O framework tem suporte para escolher um profile específico para rodar o teste automatizado? Estava dando uma olhada no BehaveConfig e não achei nenhuma propriedade referente a isso. O WebDriver levanta um firefox com um profile aleatório, e se eu quiser um profile que tenha certificados registrados vou precisar informar ele.

Erro ao adicionar historia na lista de execução

Olá,

Fiz um teste simples (na versão 1.2.0-SNAPSHOT).

Reutilizei uma historia no final e ela não foi executada:

(Pretendia "rodar" a historia "a1" duas vezes, mas só rodou uma vez só)

Teste ===>

@test
public void testAllStories() throws Throwable {
eng.addStories("/stories/a1.story");
eng.addStories("/stories/a2.story");
eng.addStories("/stories/a1.story");
eng.run();
}

Log ===>

15:36:49,086 INFO (main) [BehaveContext]: --------------------------------
15:36:49,087 INFO (main) [BehaveContext]: Demoiselle Behave Iniciado
15:36:49,087 INFO (main) [BehaveContext]: --------------------------------
15:36:49,140 INFO (main) [JBehaveParser]: Configurando o JBehave
15:36:49,151 INFO (main) [JBehaveParser]: Iniciando o parser JBehave
15:36:49,151 INFO (main) [JBehaveParser]: Executando estorias: [stories/a1.storyConverted, stories/a2.storyConverted]
Processing system properties {}
Using controls EmbedderControls[batch=false,skip=false,generateViewAfterStories=true,ignoreFailureInStories=true,ignoreFailureInView=true,verboseFailures=true,verboseFiltering=false,storyTimeoutInSecs=3600,threads=1]

(BeforeStories)
15:36:49,230 INFO (main) [BeforeAfterSteps]: >>Iniciando Aplicação<<
log4j:WARN No appenders could be found for logger (org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Running story stories/a1.storyConverted
Funcionalidade: Acesso
(stories/a1.storyConverted)
Narrative:
In order to a tela inicial apareceça para mim
As a visitante
I want to acessar o Google
Scenario: Acesso ao Google
Dado que vou para a tela "Tela de Busca"
Então será exibido "Google"

Scenario: Pesquisa Simples
Dado que vou para a tela "Tela de Busca"
Quando informo "Demoiselle Behave" no campo "Campo de Busca"
Então será exibido "https://github.com/demoiselle/behave1/" (FAILED)
(java.lang.AssertionError: Texto não encontrado na tela. Texto: https://github.com/demoiselle/behave1/)

Failed to run story stories/a1.storyConverted
java.lang.AssertionError: Texto não encontrado na tela. Texto: https://github.com/demoiselle/behave1/
at org.junit.Assert.fail(Assert.java:91)
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.WebScreen.waitText(WebScreen.java:68)
at br.gov.frameworkdemoiselle.behave.runner.webdriver.ui.WebScreen.waitText(WebScreen.java:52)
at br.gov.frameworkdemoiselle.behave.parser.jbehave.CommonSteps.textVisible(CommonSteps.java:214)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.jbehave.core.steps.StepCreator$ParameterisedStep.perform(StepCreator.java:550)
at org.jbehave.core.embedder.StoryRunner$FineSoFar.run(StoryRunner.java:499)
at org.jbehave.core.embedder.StoryRunner.runStepsWhileKeepingState(StoryRunner.java:479)
at org.jbehave.core.embedder.StoryRunner.runScenarioSteps(StoryRunner.java:443)
at org.jbehave.core.embedder.StoryRunner.runCancellable(StoryRunner.java:305)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:219)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:180)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:229)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:201)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:679)
Running story stories/a2.storyConverted
Funcionalidade: Acesso
(stories/a2.storyConverted)
Narrative:
In order to a tela inicial apareceça para mim
As a visitante
I want to acessar o Google
Scenario: Acesso ao Google2
Dado que vou para a tela "Tela de Busca"
Então será exibido "Google"

Scenario: Pesquisa Simples2
Dado que vou para a tela "Tela de Busca"
Quando informo "Demoiselle Behave" no campo "Campo de Busca"
Então será exibido "https://github.com/demoiselle/behave/"

(AfterStories)
15:37:59,268 INFO (main) [BeforeAfterSteps]: >>Finalizando Aplicação<<

Generating reports view to '/home/01069360503/workspace-dbehave/teste/target/jbehave' using formats '[defaultstoryreport, console, html, stats]' and view properties '{defaultFormats=stats, decorateNonHtml=true, viewDirectory=view, decorated=ftl/jbehave-report-decorated.ftl, reports=ftl/jbehave-reports-with-totals.ftl, maps=ftl/jbehave-maps.ftl, navigator=ftl/jbehave-navigator.ftl, views=ftl/jbehave-views.ftl, nonDecorated=ftl/jbehave-report-non-decorated.ftl}'
Reports view generated with 3 stories (of which 0 pending) containing 6 scenarios (of which 0 pending)
Failures in reports view: 1 scenarios failed
15:37:59,505 INFO (main) [JBehaveParser]: Finalizando parser JBehave
15:37:59,505 INFO (main) [BehaveContext]: --------------------------------
15:37:59,506 INFO (main) [BehaveContext]: Demoiselle Behave Finalizado
15:37:59,506 INFO (main) [BehaveContext]: --------------------------------


Como ficou a regra ao adicionar uma historia para "execução"?

Próximas estórias não são executadas após a ocorrência de um erro de ponto de verificação

Observei em um projeto que quando ocorre um erro em um ponto de verificação (erro em um passo do tipo "Então será exibido texto" em um dos cenários de uma estória (estoria1.story), o teste é abortado logo após o término da execução de tal estória, não executando as estórias seguintes. Para reproduzir, basta criar um projeto com duas estórias (dois arquivos .story) e, em seguida, forçar um erro em um ponto de verificação na primeira e verificar que a estória 2 não é executada. Acredito que o padrão deveria ser que todas as estórias fosse executadas independente da ocorrência de erro de ponto de verificação.

Dúvida

Porque não existe criação dos scripts de teste pelo DBehave na ALM?
Segundo treinamento do Éder esse era o processo.
Sua remoção é pra simplificar ou tem algo mais?

navegar entre pop-ups

Bom dia,

Gostaria de tirar uma dúvida: estou com uma situação onde preciso clicar em um botão para fazer uma consulta. Esta consulta é feita em outra janela de browser. Ao abrir esta pop-up, fazemos a consulta e depois temos que clicar num botão que escreve os valores de volta na janela principal (via javascript).
Alguma dica de como proceder nesse caso?

BETA 6

Pessoal, tem como gerar um BETA 6 com as últimas alterações. Estou precisando dessas correções mas não quero ter que ficar gerando o SNAPSHOT. Obrigado.

Integração ALM - sincronização dos passos do teste

Olá pessoal,

ainda não estou trabalhando diretamente com o framework mas estou tentando alinhar algumas ações nos projetos e execução dos testes manuais para minimizar impactos/esforços durante os trabalhos de automação de testes.

Pelo pouco que estudei da integração com ALM, os passos do cenário de teste automatizado estão sendo persistidos na seção Design do Teste da entidade Caso de Teste no ALM.
Minha dúvida é se alguém já pensou na possibilidade da execução manual de algum teste já automatizado, visto que no console de execução de testes no ALM esta seção não é exibida, dificultando o trabalho do testador.

Andei pensando nisto e imaginei duas abordagens, uma seria verificar a possibilidade da seção Design do Teste começar a ser apresentada no console de execução do testador e neste caso não haveria nenhuma adequação a ser feita pelo framework. A outra possibilidade seria adaptar o framework para gerar a entidade Script de Teste no ALM.

Erro na Integração ALM

Ao enviar os resultados para um plano de testes com campos de texto preenchidos, exemplo: Objetivo. A primeira requisição para update no plano vem com o xml mal formado:

https://homalm.serpro/qm/service/com.ibm.rqm.integration.service.IIntegrationService/resources/Demoiselle+Behave/testplan/urn:com.ibm.rqm:testplan:743

Segue abaixo tela de erro:

11:51:12,573 DEBUG (pool-1-thread-1) [ALMIntegration]: https://homalm.serpro/qm/service/com.ibm.rqm.integration.service.IIntegrationService/resources/Demoiselle+Behave/testplan/urn:com.ibm.rqm:testplan:743
11:51:12,840 ERROR (pool-1-thread-1) [ALMStoryReport]: Erro no envio de dados para integração.
br.gov.frameworkdemoiselle.behave.exception.BehaveException: javax.xml.bind.UnmarshalException

  • with linked exception:
    [org.xml.sax.SAXParseException: XML document structures must start and end within the same entity.]
    at br.gov.frameworkdemoiselle.behave.integration.alm.ALMIntegration.sendScenario(ALMIntegration.java:220)
    at br.gov.frameworkdemoiselle.behave.parser.jbehave.report.ALMStoryReport.afterStory(ALMStoryReport.java:94)
    at org.jbehave.core.reporters.DelegatingStoryReporter.afterStory(DelegatingStoryReporter.java:49)
    at org.jbehave.core.reporters.ConcurrentStoryReporter.afterStory(ConcurrentStoryReporter.java:125)
    at org.jbehave.core.embedder.StoryRunner.runCancellable(StoryRunner.java:324)
    at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:219)
    at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:180)
    at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:229)
    at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:201)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
    Caused by: javax.xml.bind.UnmarshalException
  • with linked exception

Problema com componente RichFaces.ui.InputNumberSpinner

Tenho esse componente spinner que vem com valor padrão "1", ao tentar mudar o valor para "100", o valor muda novamente e fica com o valor "2". Isso acontece rodando com o Webdriver.

captura_de_tela-1

Colocando manualmente o valor 100 no campo esse problema não ocorre.

Declarei ele assim no pageobject:

@ElementMap(name = "limite de pesquisa", locatorType = ElementLocatorType.XPath, locator = "//input[@name='perfilEditarForm:limitePesquisa']")
private TextField limite;

E na estória:

Quando informo "{limite de pesquisa}" no campo "limite de pesquisa"

Componente tipo árvore

Pessoal, alguma ideia de como eu poderia criar xpaths para manipular esse componente?

captura_de_tela

Hoje eu fiz funcionar pegando o código antigo que eu tinha antes do framework e coloquei em um passo customizado.

@When("seleciono a funcionalidade \"$funcionalidade\"")
public void setFuncionalidade(String funcionalidade) {
    WebDriver driver = (WebDriver) runner.getDriver();
    String[] t = funcionalidade.split(">");
    for (int i = 0; i < t.length; i++) {
        if (i + 1 < t.length) {
            String xpathSeta = "//label[contains(text(),'Funcionalidades')]/following::span[.='"
                    + t[i] + "'][2]/preceding::span[3]";
            driver.findElement(By.xpath(xpathSeta)).click();
        } else {
            String xpath = "//label[contains(text(),'Funcionalidades')]/following::span[.='"
                    + t[i] + "'][2]/preceding::div[1]";
            driver.findElement(By.xpath(xpath)).click();
        }
        System.out.println(t[i]);
    }

}

na estória eu uso assim:

Cenário: Salvar Perfil com nome "{nome}", "{descrição}", "{situação}" e "{funcionalidade}" para todas as lotações
Quando informo "{nome}" no campo "nome"
Quando informo "{descrição}" no campo "descrição"
Quando informo "{situação}" no campo "situação"
Quando clico em "todas lotações disponíveis"
Quando clico em "todas lotações de atuação"
Quando seleciono a funcionalidade "{funcionalidade}"

Componente para manipular Grid's

Pessoal:
Alguém já está desenvolvendo implementação de componente para trabalhar com grid no DBehave?

Em dois projetos que pretendemos usar o DBehave aqui em Florianópolis, dependemos de um componente para trabalhar com grid's que trate os casos de:

  • células com campos editáveis;

  • checkbox de seleção de linhas;

  • pesquisa de elementos em uma linha qualquer de uma página qualquer da grid;

    Antes de iniciarmos uma implementação (ou talvez mais uma implementação), gostaria de saber o que já existe feito nas demais regionais. Talvez exista código que possa ser reutilizado e/ou soluções que possam ser combinadas para produzir uma versão inicial de algo mais genérico.

Problema com RichSelect

Não sei se estou fazendo de forma errada, mas ao tentar usar o RichSelect recebo a mensagem: " elemento [Região] selecionado possui ID [formPrincipal:regiaoPanelMessagesselecaoUAExecucao] mas não é um componente do tipo rich:select". Eu peguei o primeiro div imediatamente após o "input" pois não encontrei o div com a classe "'class="rf-sel"'" conforme consta no comentário do componente.

Ou será que esse componente não um RichSelect?

Segue meu mapeamento:

// @ElementMap(name = "Região", locatorType = ElementLocatorType.Id, locator
// = "formPrincipal:selecaoRegiaoselecaoUAExecucao_input")
// private TextField regiao;
@ElementMap(name = "Região", locatorType = ElementLocatorType.Id, locator = "formPrincipal:regiaoPanelMessagesselecaoUAExecucao")
private RichSelect regiao;

Segue screenshot do componente em questão:

a61bb836-1b04-11e3-8de0-a9e1bea427d7

Bug - Maven BUILD FAILURE

Pessoal, no BETA4 havia um bug que fazia com que o maven desse sucesso de execução mesmo com passos quebrados. O Bug foi corrigido mas acredito que agora existe outro. Meu projeto possui 5 classes de testes da qual 2 estão quebradas. Ao executar o mvn test (ou seja todos os testes serão executados), no final da execução o maven informou que os 5 testes estavam quebrados. Quando fui ver o Stacktrace de uma das classes que eu sei que passou, o erro informado era de outra classe. Não sei se fui claro na explicação, se precisar eu posto os logs.

Bug: Problema com a palavra-chave Funcionalidade

Ao executar o registro automático de resultados de uma execução no ALM, quando ocorre a palavra chave "Funcionalidade:" no arquivo de história, está sendo gerando indevidamente um caso de teste.

Erro na criação de projeto pelo arquétipo

Pessoal, está ocorrendo um erro ao criar um projeto utilizando o arquétipo do maven, tanto o jbehave-junit-archetype quanto o jbehave-selenium-archetype.
Segue o erro:

Unable to create project from archetype [br.gov.frameworkdemoiselle.component.behave.archetype:jbehave-selenium-archetype:1.0.0 -> http://centro3.cta.serpro/maven/repositories/component/internal/]
Unable to add module to the current project as it is not of packaging type 'pom'

O erro acontece no passo 1.3 da documentação (http://centro3.cta.serpro/demoisellebehave/behave-quickstart.html). Testei tanto no eclipse 3.7 (INDIGO) quanto no 4.2 (JUNO) utilizando o plugin m2e versão 1.3.0.20130129-0926.

Encontrar campo automaticamente pelo atributo "for" do label

Pessoal,

estou fazendo um cenário em que tenho que preencher vários campos de uma tela.

Nesta tela, foi utilizado o atributo "for" nos labels (repare que estou usando-o no label Nome Completo do html), existe como o cenário abaixo funcionar sem ter que colocar um atributo para o nome completo na classe InicialPage.java?

enviar.story:

Cenário: Enviar formulário

Dado que estou na "Tela inicial"
Quando informo "Sr. Behave" no campo "Nome completo"
Quando clico em "Avançar"
Então será exibido "Formulário enviado com sucesso!"

TelaInicial.java

@ScreenMap(name = "Tela inicial", location = "http://localhost:8080/formulario/")
public class InicialPage {

    @ElementMap(name = "Avançar", locatorType = ElementLocatorType.Id, locator = "formPrincipal:btnAvancarDadosViajante")
    private Button avancar;

}

enviar.html:

<label for="formPrincipal:inputNome"> Nome completo</label>
<input id="formPrincipal:inputNome" type="text">

Erro no envio do caso de teste para ALM

Estou com o seguinte erro ao tentar enviar a estória para ALM:

Cenário: [Tabelas Básicas-Estado Civil] Salvar Estado Civil sem descrição
Dado que estou na tela "Pagina Principal"
Quando acesso o menu "Tabelas Básicas" opção "Estado Civil"
Dado que estou na tela "Tela de Pesquisa de Estado Civil"
Quando clico em "Incluir"
Dado que estou na tela "Tela de Inclusão de Estado Civil"
Quando informo "" no campo "descricao"
Quando informo "Ativo" no campo "situacao"
E clico em "Salvar"
Quando clico em "Salvar"
Então será exibido na "caixa de erro da descrição" o valor "Campo de preenchimento obrigatório."

Erro no envio de dados para integração.
br.gov.frameworkdemoiselle.behave.exception.BehaveException: java.lang.IllegalArgumentException
at br.gov.frameworkdemoiselle.behave.integration.alm.ALMIntegration.sendScenario(ALMIntegration.java:223)
at br.gov.frameworkdemoiselle.behave.parser.jbehave.report.ALMStoryReport.afterStory(ALMStoryReport.java:94)
at org.jbehave.core.reporters.DelegatingStoryReporter.afterStory(DelegatingStoryReporter.java:49)
at org.jbehave.core.reporters.ConcurrentStoryReporter.afterStory(ConcurrentStoryReporter.java:125)
at org.jbehave.core.embedder.StoryRunner.runCancellable(StoryRunner.java:324)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:219)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:180)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:229)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:201)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.IllegalArgumentException
at java.net.URI.create(URI.java:842)
at org.apache.http.client.methods.HttpPut.(HttpPut.java:68)
at br.gov.frameworkdemoiselle.behave.integration.alm.ALMIntegration.sendRequest(ALMIntegration.java:266)
at br.gov.frameworkdemoiselle.behave.integration.alm.ALMIntegration.sendScenario(ALMIntegration.java:161)
... 13 more
Caused by: java.net.URISyntaxException: Illegal character in path at index 125: https://homalm.serpro/qm/service/com.ibm.rqm.integration.service.IIntegrationService/resources/AutomacaoPAE/testcase/testcase[TabelasBasicasEstadoCivil]SalvarEstadoCivilsemdescricao
at java.net.URI$Parser.fail(URI.java:2809)
at java.net.URI$Parser.checkChars(URI.java:2982)
at java.net.URI$Parser.parseHierarchical(URI.java:3066)
at java.net.URI$Parser.parse(URI.java:3014)
at java.net.URI.(URI.java:578)
at java.net.URI.create(URI.java:840)
... 16 more

Internacionalização de mensagens

O mecanismo de internacionalização de mensagens garante que as exceções do framework sejam mais amigáveis para quem o usa.

Atualmente apenas o módulo core possui as mensagens internacionalizadas.
Nesta Issue visa aplicar esta padrão para todos os demais módulos.

Importante

Pessoal, aqui vai uma sugestão que considero prioritária sobre a ferramenta...
Uma forma mais "natural" de utilizar data driven, que não seja via programação criando hash tables.
Digo isso por 2 grandes motivos:

  1. Parâmetros "embutidos" em stories tendem a gerar uma explosão das mesmas bem como difícil manutenção no futuro.
  2. Usar data driven eficiente permite uma separação de tarefas e paralelismo na elaboração dos testes. Três pessoas distintas podem trabalhar em conjunto, uma faz as classes de mapeamento, outra criar as stories contendo a logica do teste, e a terceira se preocupa com os dados (massa) que irão gerar os cenários necessários.

Esta é a forma que trabalhamos por aqui e funciona muito bem. Acho está questão de desviar os dados para um arquivo deve ser debatida o quanto antes pois irá provocar grandes alterações nas stories que já estão sendo geradas hoje para o futuro (por isso quanto antes melhor).

Problema com RichSelect

Não sei se estou fazendo de forma errada, mas ao tentar usar o RichSelect recebo a mensagem: " elemento [Região] selecionado possui ID [formPrincipal:regiaoPanelMessagesselecaoUAExecucao] mas não é um componente do tipo rich:select". Eu peguei o primeiro div imediatamente após o "input" pois não encontrei o div com a classe "'class="rf-sel"'" conforme consta no comentário do componente.

Ou será que esse componente não um RichSelect?

Segue meu mapeamento:

// @ElementMap(name = "Região", locatorType = ElementLocatorType.Id, locator
// = "formPrincipal:selecaoRegiaoselecaoUAExecucao_input")
// private TextField regiao;
@ElementMap(name = "Região", locatorType = ElementLocatorType.Id, locator = "formPrincipal:regiaoPanelMessagesselecaoUAExecucao")
private RichSelect regiao;

Segue screenshot do componente em questão:

NPE CommonSteps.textVisibleInElement(CommonSteps.java:221)

Estou recebendo um NullPointerException no método textVisibleInElement. O estranho é que em outras estórias o erro não acontece.

Comecei a automatizar outras telas do meu sistema e para uma tela específica está me dando esse erro, para as demais não. As telas dos módulos seguem o mesmo padrão e não estou conseguindo entender o motivo do Webdriver não encontrar o meu elemento, deixando ele null.

Segue a stack completa:

Failed to run story stories/perfil/incluirPerfil.storyConverted
java.lang.NullPointerException
at br.gov.frameworkdemoiselle.behave.parser.jbehave.CommonSteps.textVisibleInElement(CommonSteps.java:221)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.jbehave.core.steps.StepCreator$ParameterisedStep.perform(StepCreator.java:550)
at org.jbehave.core.embedder.StoryRunner$FineSoFar.run(StoryRunner.java:499)
at org.jbehave.core.embedder.StoryRunner.runStepsWhileKeepingState(StoryRunner.java:479)
at org.jbehave.core.embedder.StoryRunner.runScenarioSteps(StoryRunner.java:443)
at org.jbehave.core.embedder.StoryRunner.runCancellable(StoryRunner.java:305)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:219)
at org.jbehave.core.embedder.StoryRunner.run(StoryRunner.java:180)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:229)
at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:201)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)

Frames

Como fazer para trabalhar com páginas que possuem frames? Gostaria de não ter que navegar pelo frame interno para poder encontrar os componente. Alguém já passou por isso?

Passo com falha causa passo pendente

Não estou entendendo porque recebo esse erro. Criei um passo customizado e se eu coloco ele em uma estória assim:

teste.story:

Cenário: Acesso a Suíte de Aplicativos da RFB

Dado que vou para a tela "Tela Bem-vindo à Suite"
Quando clico em "Efetuar Login"

Dado que estou na tela "Acesso a Suite"
Quando clico em "Certificado Digital"

Dado que estou na tela "Tela Bem-vindo à Suite"
Quando clico em "botão ok erro do servidor"

Quando clico em "Menu da Suíte"
Quando movo o mouse sobre "Suíte de Aplicativos"
Quando movo o mouse sobre "Fiscalização"
Quando clico em "Ação Fiscal"

Dado que estou na tela "Acesso a Suite"
Quando vou para o frame "0" <-------------------------------------------------- passo custom
Quando seleciono a opção de valor "DOC21" no campo "opcao"
E clico em "Certificado Digital"

Note que marquei o passo customizado com <----

Agora se eu dividir em duas estórias para poder fazer o reuso me dá erro...

login.story:

Cenário: Acesso a Suíte de Aplicativos da RFB "{dummy}"

Dado que vou para a tela "Tela Bem-vindo à Suite"
Quando clico em "Efetuar Login"

Dado que estou na tela "Acesso a Suite"
Quando clico em "Certificado Digital"

Dado que estou na tela "Tela Bem-vindo à Suite"
Quando clico em "botão ok erro do servidor"


acesso.story:

Cenário: Acesso a Ação Fiscal

Acesso a Suíte de Aplicativos da RFB ""
Quando clico em "Menu da Suíte"
Quando movo o mouse sobre "Suíte de Aplicativos"
Quando movo o mouse sobre "Fiscalização"
Quando clico em "Ação Fiscal"

Dado que estou na tela "Acesso a Suite"
Quando vou para o frame "0" <----------------------------
Quando seleciono a opção de valor "DOC21" no campo "opcao"
E clico em "Certificado Digital"


Erro que ocorre é:

java.lang.AssertionError: Passo com falha: [Quando vou para o frame "0"] causa: passo pendente
at org.junit.Assert.fail(Assert.java:91)
at br.gov.frameworkdemoiselle.behave.controller.BehaveContext.run(BehaveContext.java:124)
at br.gov.frameworkdemoiselle.behave.controller.BehaveContext.run(BehaveContext.java:142)
at acfisc.tests.AcessoTest.testAcesso(AcessoTest.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Erro no pom.xml após tentativa de atualização para 1.2.0

Fiz os seguintes passos:

  1. Apaguei meu fork antigo.
  2. Apaguei os projetos do DBehave que eu tinha
  3. Criei um novo fork.
  4. Baixei esse novo fork.
  5. Import projetos maven

Sempre fiz isso para atualizar os fontes do DBehave, mas agora está dando erro nos pom.xml do core, alm e outros (ver na imagem em anexo). É o mesmo erro em todos os poms
captura_de_tela

Fiz alguma coisa errada?

No pom.xml do meu projeto coloquei:

<parent>
    <groupId>br.gov.frameworkdemoiselle.component.behave</groupId>
    <artifactId>demoiselle-behave-parent</artifactId>
    <version>1.2.1-SNAPSHOT</version>
</parent>
br.gov.frameworkdemoiselle.component.behave demoiselle-behave-parser-jbehave 1.2.1-SNAPSHOT test

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.