Closed rogernobre closed 11 years ago
Descobrir que a minha classe "br.gov.serpro.sped.fiscalpva.fronteira.ppgd.PgdApp" não é um frame.
Já descobrir como obter o frame principal depois de iniciar a mainClass (ela faz as configurações iniciais):
PlataformaPPGD plataformaPPGD = PlataformaPPGD.getPlataforma();
JFrame frame = plataformaPPGD.getJanelaPrincipal();
Agora teria que ver no Demoiselle Behave como passaria estas informações, isto é, tenho que inicia a aplicação e depois chamar um método para informar ao Fest quem é o frame principal.
Atualmente, a classe FestRunner faz isto passando somente o nome da classe principal, o que não é o meu caso.
Ainda não conseguir subir minha aplicação sem dar erro como no marathon (mas isto não tem nada haver com o Demoiselle Behave), mas preciso desta maneira citada acima para fazer automação dos testes.
A minha ideia seria criar uma classe:
package testes.testesFest;
import javax.swing.JFrame;
import serpro.ppgd.infraestrutura.PlataformaPPGD; import br.gov.serpro.sped.fiscalpva.fronteira.ppgd.PgdApp;
public class Aplicacao {
public static JFrame getFrame() {
String[] arg0 = { "-logar" };
PgdApp.preparaFontes();
PgdApp.main(arg0);
PlataformaPPGD plataformaPPGD = PlataformaPPGD.getPlataforma();
return plataformaPPGD.getJanelaPrincipal();
}
}
E no FestRunner ter propriedades:
"behave.runner.app.mainClass.method" (default null)
"behave.runner.app.mainClass.method.param" (default null)
que chamaria ou o construtor da mainClass caso fosse null ou o o método com os parâmetros passados acima para iniciar a aplicação e passar o frame principal para o Fest
Ex:
behave.runner.app.mainClass=testes.testesFest.Aplicacao
behave.runner.app.mainClass.method=getFrame
behave.runner.app.mainClass.method.param=null
@rogernobre, neste caso precisamos criar uma inversão de controle para que você informe a instância do frame e não o dbehave. Talvez o runner tenha um método para receber o Frame.
Boa ideia @botelhojp.
Segue proposta:
Um property:
behave.runner.app.startupFrame=meupacote.MinhaClasse
Um classe que implemente a interface FestStartup
public class MinhaClasse implements FestStartup {
public JFrame getFrame() {
return new JFrameLogin();
}
}
Sua classe será chamada na inicialização do teste.
@rogernobre, gerei uma snapshot com a proposta acima. Vide também o sample treino-desktop. Aguardo retorno.
Ok. Pode fechar a issue.
Não conheço fest swing, mas para fazer testes java swing usava o marathon e fazia o seguinte para iniciar automação dos testes:
Fiz o mesmo para usar no demoiselle behave:
O que é que estou fazendo errado?