demoiselle / behave Goto Github PK
View Code? Open in Web Editor NEWDemoiselle Behave
Home Page: https://www.frameworkdemoiselle.gov.br/dbehave/
Demoiselle Behave
Home Page: https://www.frameworkdemoiselle.gov.br/dbehave/
Permitir a execução dos testes em ferramentas de IC como Continuum ou Agent Builder
Permitir a parametrização das principais funcionalidade do framework
Uso da estrutura maven para debug pela IDE
Utilizar a estrutura de projeto maven para ganhar independência de IDE
Onde ficará armazenada a informação se tratar de uma execução manual ou automatizada para casos gerados pelo DBehave?
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, ...?
Faltou corrigir na documentação em "4.2. Frases pré-definidas pelo framework" mudar "página" para "tela".
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?
Teste hoje a utilização dos cenários parametrizados, recurso disponível no jbehave (http://jbehave.org/reference/stable/parametrised-scenarios.html), e não consegui utiliza-lo junto com o reuso dos cenários. Não sei se seria possível mas esse recurso seria bem interessante para as próximas versões do framework.
Definir arquitetura para desacoplar as ferramentas BDD das ferramentas de execução de testes
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?
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.
Criar estrutura básica do projeto
Elaborar material de treinamento
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.
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"?
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.
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?
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?
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.
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.
Permitir a reutilização de cenários na escrita de uma história
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:
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
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.
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"
Pessoal, alguma ideia de como eu poderia criar xpaths para manipular esse componente?
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}"
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.
Permitir a passagem de valores entre testes
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:
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.
Criação de archetypes para construção de projetos de forma simples, depende a documentação quickstart
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.
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.
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">
Criar projeto com estruturas Demoiselle
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
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.
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:
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).
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:
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)
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?
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"
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)
Fiz os seguintes passos:
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
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>
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.