GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Validar um cadastro utilizando Selenium WebDriver


#1

Olá, bom dia.

Tudo bem ?

Eu estou testando um sistema web, só realizo testes funcionais. Assim para validar os dados que inseri em um cadastro de polo por exemplo, eu estou usando assertEquals(parametro1,parametro2). Sendo assim, meu parâmetro 1 eu coloco o texto que quero inserir e o parâmetro 2, eu coloco o retorno do meu campo mapeado.

Exemplo:

public void insereCurso() throws Exception {
        // Clica na ferramenta cursos e polos
        driver.findElement(By.id("cursospolosLink")).click();
        // Clica na funcionalidade cadastrar curso
        driver.findElement(By.xpath("//ul[2]/a[3]/li")).click();
        //Espera para aparecer o formulário de cadastro
        WebDriverWait wait = new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.tagName("fieldset")));
        //Digita o nome do curso
        WebElement nomeCurso = driver.findElement(By.id("nomecurso"));
        nomeCurso.sendKeys(("Astros"));
        String recebe3 = nomeCurso.getAttribute("value");
        //Seleciona a área do curso
        Select area = new Select(driver.findElement(By.name("area")));
        area.selectByVisibleText("Ciências Humanas");
        String recebe = area.getFirstSelectedOption().getText();
        //Seleciona o tipo do curso
        Select tipoCurso = new Select(driver.findElement(By.name("tipocurso")));
        tipoCurso.selectByVisibleText("Graduação");
        String recebe2 = tipoCurso.getFirstSelectedOption().getText();
        //Clica no botão cadastrar
        driver.findElement(By.id("submit")).click();
//         Teste para verificar a mensagem Cadastro realizado com sucesso devolvida pelo sistema
        for (int second = 0;; second++) {
            if (second >= 65) {
                fail("timeout");
            }
            try {
                if ("Cadastrado com sucesso.".equals(driver.findElement(By.cssSelector(".popUp.tabela")).getText())) {
                    System.out.println("Curso foi inserido com inserido com sucesso");
                    break;
                }
            } catch (Exception e) {
            }
        }
//            WebElement gerenciaCurso = driver.findElement(By.xpath(".//*[@id='frameConteudo']/nav/div/div[2]/menu/ul[2]/a[1]/li"));
//            gerenciaCurso.click();
//            
//            // Comando de espera ,30 segundos para uma nova página ser carregada
//            driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
        // Validacao dos dados apos o cadastro
        ArrayList<String> dadosValidados = new ArrayList<String>();
        dadosValidados.add(recebe);
        dadosValidados.add(recebe2);
        dadosValidados.add(recebe3);
        System.out.println(" Dados Validados ");
        for (String i : dadosValidados) {
            System.out.println(i);
        }
        assertEquals("Astros", recebe3);
        assertEquals("Ciências Humanas", recebe);
        assertEquals("Graduação", recebe2);
    }

Eu também retorno no console, todos os itens que inseri.
Essa seria uma forma correta de validação, ou teria uma forma melhor ?

Quando não consigo mapear algum elemento do meu sistema, eu faço teste manual mesmo. Alguma sugestão para esse problema ? Obrigada.

Abraços.


#2

Depende de cada caso de teste.

Por exemplo testando se o submit retornou sucesso:

...
driver.findElement(By.id("submit")).click();  
...
assertEquals(driver.findElement(By.cssSelector(".popUp.tabela")).getText(), "Cadastrado com sucesso.");

Testar se os campos informados no formulário foram realmente inseridos:

Após o submit (esperando terminar), dê GoToUrl para a URL a qual mostra os dados que foram inseridos no banco, então compare o que veio da página com o que foi digitado inicialmente.

driver.Navigate().GoToUrl("http://seusistema/curso/1");
...
assertEquals(driver.findElement(By.id("nomecurso")).getAttribute("value"), "Astros");
...etc

#3

Entendi, estou usando essa estratégia que você falou.

Obrigada pelos exemplos e pela resposta também.

Eu já tentei automatizar um Caso de Teste e neste era presente uma caixa de seleção programada com o plugin chosen, não consegui automatizar essa seleção. Então testei manualmente. Você já teve algum problema semelhante, ou resolveu de uma forma diferente ?

Obrigada.


#4

Independente do plugin ou elemento HTML, você vai inspecionar o código no browser e ver o selector necessário para localizar o elemento exato que deseja realizar a ação. Outra alternativa, o Selenium IDE pode te ajudar a gerar o código a partir do uso real da pagina.


#5

Obrigada pela resposta.

Olha esse fórum, inclusive você contribuiu. Porém não achei a solução.

http://www.guj.com.br/java/305929-caixas-de-listagem-dropw-down-e-selenium-webdriver#1627715

Obrigada.


#6

Se o Selenium IDE não suporta o "chosen", tente da forma abaixo. Fiz em C# e funcionou, mas é igual Java, só muda que no Java os métodos começam com letra minúscula.

            FirefoxDriver driver = new FirefoxDriver();
            driver.Navigate().GoToUrl("http://harvesthq.github.io/chosen/");
            driver.FindElement(By.CssSelector("html body form div#container div#content div.side-by-side.clearfix div div.chosen-container.chosen-container-single a.chosen-single span")).Click();
            var input = driver.FindElement(By.CssSelector("html body form div#container div#content div.side-by-side.clearfix div div.chosen-container.chosen-container-single div.chosen-drop div.chosen-search input"));
            input.SendKeys("Albania");
            input.SendKeys(Keys.Enter); //Pesquisar equivalente em Java, mas deve ser Keys.RETURN

O selector que coloquei está gigante pois pra não perder tempo mandei o browser extrair o path por CSS, mas no seu caso use o caminho mais curto que puder relativo a sua página.


#7

Olá, obrigada pela resposta.

Eu estou usando o firebug e mais especificamente o firepath para capturar o path por css. Porém fui na página que você colocou e inspecionei os elementos, a seta da caixa chosen tem o path por css = .chosen-single>div>b e a opção Albania tem o css = .active-result.result-selected.highlighted.

O seu path por css esta muito diferente do que obtive. Esse pode ser um dos erros que não consegui realizar o clique na caixa. Como você obtêm o path do elemento ?

Assim que fui rodar o teste, o firefox não está digitando a url da página no navegador, aparecem várias exceções e a página fica em branco. Só a janela do navegador é aberta. Vou trocar a versão do firefox para uma mais antiga e ver se resolve.

Assim posso te dar um retorno se a sua solução funcionou aqui.

Abraços.


#8

Acho que você não inspecionou os mesmos elementos que eu. Ao invés da setinha, fui no span "Choose a Country...", que será usado para clicar. E ao invés de ir no item "Albania", fui no input da div.chosen-search e mandei o webdriver digitar "Albania" e depois dar "Enter", assim o plugin chosen vai selecionar o elemento a partir do que foi digitado.

span "Choose a Country...":

input da div.chosen-search:

Usei o FireFox 31.


#9