1
resposta

Quantidade de Regsitros de Uma Tabela

Bom dia,

Estou tentando capturar a quantidade de Regsitros de uma tabela, pesquisei na web achei atá uma resposta no próprio site da Alura porém não funcionou, estou usando Selenium juntamente com o Java, segue a primeira forma que tentei mas não deu certo:

A primeira forma que tentei:

 List<WebElement> trs = navegador.findElements(By.cssSelector("body > form > table:nth-child(19) > tbody > tr > td.centercoltext > table:nth-child(7) > tbody > tr > td > table:nth-child(1) > tbody > tr:nth-child(2) > td > div > table > tbody"));
        for (WebElement tr : trs) {
            List<WebElement> tds = tr.findElements(By.tagName("td"));
            System.out.println(tds.size());
        }

A segunda forma:

WebElement tabela = navegador.findElement(By.xpath("/html/body/form/table[3]/tbody/tr/td[2]/table[6]/tbody/tr/td/table[1]/tbody/tr[2]/td/div/table/tbody/tr[1]/td[1]/input"));
        List<WebElement> rows =  tabela.findElements(By.tagName("tr"));//        
        int qtd = rows.size();
        System.out.println("Quantidade de Linhas - " +qtd / 2);

Tentei fazer um loop testando linha por linha da tabela , verificando se existia cada linha, porém dar o erro NoSuchElementException, como ele retorna um boolean eu pensei que não era para ocorrer esse erro

int i = 0;
        String registro =  "/html/body/form/table[3]/tbody/tr/td[2]/table[6]/tbody/tr/td/table[1]/tbody/tr[2]/td/div/table/tbody/tr["+i+"]/td[1]/input";           
              
       boolean estado = navegador.findElement(By.xpath(registro)).isDisplayed();     
       
       while(estado){
           i++;
           registro =  "/html/body/form/table[3]/tbody/tr/td[2]/table[6]/tbody/tr/td/table[1]/tbody/tr[2]/td/div/table/tbody/tr["+i+"]/td[1]/input";
           
           System.out.println(registro);
           
       }

Eu tentei o isDisplayed(), mas existe outro método que faça o teste de um elemento existe sem retornar o erro?

1 resposta

Oi João, bom dia!

Entendo que você está enfrentando dificuldades para capturar a quantidade de registros de uma tabela usando Selenium com Java. Vamos tentar algumas abordagens diferentes para resolver isso.

Primeiro, é importante garantir que você está selecionando o elemento correto. O uso de seletores CSS ou XPath pode ser um pouco complicado, especialmente se a estrutura da página for complexa. Aqui estão algumas dicas que podem ajudar:

  1. Verifique o seletor: Certifique-se de que o seletor CSS ou XPath está correto e que está apontando para o elemento certo. Você pode usar as ferramentas de desenvolvedor do navegador (geralmente acessadas com F12) para inspecionar o elemento e testar o seletor.

  2. Simplifique o XPath: Às vezes, os seletores XPath podem ser muito específicos. Tente simplificar o XPath para garantir que você está capturando todos os elementos necessários. Por exemplo, se você está tentando capturar todas as linhas de uma tabela, pode usar algo como:

    List<WebElement> linhas = navegador.findElements(By.xpath("//table/tbody/tr"));
    int quantidade = linhas.size();
    System.out.println("Quantidade de Linhas - " + quantidade);
    
  3. Verifique a visibilidade e a existência do elemento: O método isDisplayed() verifica se o elemento está visível, mas não se ele existe. Para evitar o NoSuchElementException, você pode capturar a exceção e tratá-la. Aqui está um exemplo:

    int i = 1; // Comece com 1, pois XPath é 1-based
    while (true) {
        try {
            WebElement elemento = navegador.findElement(By.xpath("/html/body/form/table[3]/tbody/tr/td[2]/table[6]/tbody/tr/td/table[1]/tbody/tr[2]/td/div/table/tbody/tr[" + i + "]/td[1]/input"));
            if (elemento.isDisplayed()) {
                System.out.println("Linha " + i + " está visível.");
                i++;
            }
        } catch (NoSuchElementException e) {
            System.out.println("Fim das linhas na tabela.");
            break;
        }
    }
    

Lembre-se de que a estrutura do XPath pode variar dependendo da página, então ajuste conforme necessário. Espero que uma dessas abordagens ajude a resolver o seu problema!

Espero ter ajudado e bons estudos!