Agile Testers TechTalks | Test War Stories - Andreia Gaita @ Tech Lead do GitHub. Saiba mais aqui

Preenchimento de data errado com Selenium



  • Olá pessoal,

    Estou com uma certa dificuldade em alguns testes automatizados que temos aqui na empresa.

    Ocorre que, em determinados momentos, precisamos preencher uma data específica na aplicação que utilizamos, para filtrar um determinado documento.

    O problema é que, momentos sim momentos não, o teste quebra porque a data está sendo preenchida errada.

    Exemplo da data que deve ser preenchida:
    Data inicial 03/11/2016 00:00 e data final com 03/11/2016 23:59

    Exemplo da data que está sendo preenchida:
    Data inicial 03/11/4022 01:59 e data final com 14/02/2017 23:59.

    Código utilizado:

    ```
    public void preencherData(String dataInicial, String dataFinal) {
    	browser.waitForElementPresenceById(INPUT_DATA_INICIAL, 30000);
    	browser.clearElementById(INPUT_DATA_INICIAL);
    	browser.typeTextOnElementById(INPUT_DATA_INICIAL, dataInicial);
    	browser.waitForElementPresenceById(INPUT_DATA_FINAL, 30000);
    	browser.clearElementById(INPUT_DATA_FINAL);
    	browser.typeTextOnElementById(INPUT_DATA_FINAL, dataFinal);
    	
    }
    
    
    Percebam que no código acima já tentamos limpar o campo primeiro antes de informar as datas.
    
    Alguém já passou por isso e soube resolver?


  • Ja tentou simular via SendKeys?



  • Hmm… tem certeza que o input da data esta sempre correto? rs… sei la né… ta estranho…



  • O ideal é saber algumas coisas como:

    1. Qual o componente de calendário tu estás utilizando e como ele faz o input da data quando tu seleciona
    2. Como tu estás passando a data… se tu cria ela através de um objeto tipo Calendar e depois formata ou passa apenas ela em formato dd/MM/yyyy sem colocar a hora

    Tu consegue passar um exemplo de dados que tu utiliza neste script?



  • @bruwesley

    Opa, tentamos sim…



  • @Leonardo-Galani

    Sim, tanto que se ficar executando varias vezes, uma hora passa, outras não.



  • @Elias-Nogueira

    1. Usamos o Calendar do primeFaces…
    2. Não criamos o objeto ou formatamos antes. Fazemos a chamada e realizamos o input da informação conforme o componente espera, em teoria haha.
    Cenário: Verifica detalhes do Auditor
    Meta:
    @Author Renato de Oliveira Nunes
    Dado que acesso a tela de listagem de NF-e
    Quando preencho a data inicial no filtro com 03/11/2016 00:00 e data final com 03/11/2016 23:59
    

    Na etapa de preencher a data inicial no filtro, chamamos o step abaixo.

    @When("preencho a data inicial no filtro com $dataInicial e data final com $dataFinal")
    public void preencherData (String dataInicial, String dataFinal) {
    	getPaginas().getPaginaOperacaoNfe().preencherData(dataInicial, dataFinal);
    

    Que por sua vez chama:

    public void preencherData(String dataInicial, String dataFinal) {
    	browser.waitForElementPresenceById(INPUT_DATA_INICIAL, 30000);
    	browser.clearElementById(INPUT_DATA_INICIAL);
    	browser.typeTextOnElementById(INPUT_DATA_INICIAL, dataInicial);
    	browser.waitForElementPresenceById(INPUT_DATA_FINAL, 30000);
    	browser.clearElementById(INPUT_DATA_FINAL);
    	browser.typeTextOnElementById(INPUT_DATA_FINAL, dataFinal);


  • @ronunes O pattern do Calendar no PrimeFaces é o mesmo que o teu formato de String (dd/MM/yyyy hh:mm)?

    Eu recomendo você usar o mesmo patter que está no componente, transformá-lo em data e formatá-lo.



  • @Elias-Nogueira

    É sim, o mesmo. Estava mexendo por aqui e acabei de descobrir que aparentemente, o meu método que limpa os dois campos do calendar não está de fato limpando, mas sim apenas clicando. Provavelmente por isso na hora de realizar o input das datas esteja se perdendo.

    Deixei apenas assim e os testes estão passando.

    	public void preencherData(String dataInicial, String dataFinal) throws InterruptedException {
    		browser.waitForElementPresenceById(INPUT_DATA_INICIAL, 30000);
    		browser.waitForElementPresenceById(INPUT_DATA_FINAL, 30000);
    		browser.typeTextOnElementById(INPUT_DATA_INICIAL, dataInicial);
    		browser.typeTextOnElementById(INPUT_DATA_FINAL, dataFinal);
    		
    	}
    

    Agora vou ter que ver porque o carinha não está realizando o seu serviço de limpeza! :)


  • MVP

    @ronunes disse em Preenchimento de data errado com Selenium:

    @Elias-Nogueira

    É sim, o mesmo. Estava mexendo por aqui e acabei de descobrir que aparentemente, o meu método que limpa os dois campos do calendar não está de fato limpando, mas sim apenas clicando. Provavelmente por isso na hora de realizar o input das datas esteja se perdendo.

    Deixei apenas assim e os testes estão passando.

    	public void preencherData(String dataInicial, String dataFinal) throws InterruptedException {
    		browser.waitForElementPresenceById(INPUT_DATA_INICIAL, 30000);
    		browser.waitForElementPresenceById(INPUT_DATA_FINAL, 30000);
    		browser.typeTextOnElementById(INPUT_DATA_INICIAL, dataInicial);
    		browser.typeTextOnElementById(INPUT_DATA_FINAL, dataFinal);
    		
    	}
    

    Agora vou ter que ver porque o carinha não está realizando o seu serviço de limpeza! :)

    Não consegue printar o que tem no campo antes, para analisar se está “limpo” ou não? Dependendo pode colocar uma validação. (se não está limpo, hora de colocar ele na limpeza…heehe)