Como lidar com a tabela da Web em Selenium

โšก Resumo Inteligente

Selenium O manuseio de tabelas web permite que os engenheiros de controle de qualidade leiam dados tabulares de linhas e colunas HTML usando XPath, CSS e Selenium 4 localizadores relativos. Este artigo aborda tabelas estรกticas, tabelas aninhadas, predicados de atributos e tรฉcnicas de IA para grades dinรขmicas.

  • ๐Ÿงฑ Anatomia XPath: Cada localizador de tabela comeรงa com //table e acessa tbody, tr e td usando predicados.
  • ๐Ÿ” Linhas dinรขmicas: O mรฉtodo `findElements` retorna uma lista de elementos da Web, permitindo que os loops contem linhas e leiam cรฉlulas em tempo de execuรงรฃo.
  • ๐Ÿช„ Selenium 4: Localizadores relativos acima, abaixo e prรณximos simplificam a identificaรงรฃo de cรฉlulas ao redor de um elemento de ancoragem conhecido.
  • ๐Ÿง  Localizadores de IA: As ferramentas de autorrecuperaรงรฃo detectam deslocamentos de coluna e recuperam a identidade da linha sem ediรงรตes manuais de XPath.
  • ๐Ÿ› ๏ธ Inspecionar atalho: As ferramentas de desenvolvedor do navegador copiam um XPath completo que vocรช pode reduzir ร  primeira tabela para maior confiabilidade.

Selenium Exemplo de XPath para tabela web

O que รฉ uma tabela da Web Selenium?

A Tabela Web in Selenium ร‰ um WebElement usado para a representaรงรฃo tabular de dados ou informaรงรตes. Os dados exibidos podem ser estรกticos ou dinรขmicos. As cรฉlulas e linhas de uma tabela web sรฃo acessadas por meio de mรฉtodos do WebElement combinados com localizadores. Um exemplo tรญpico รฉ a grade de especificaรงรตes do produto exibida em uma pรกgina de produto de comรฉrcio eletrรดnico.

Como ler uma tabela web HTML

Muitas vezes, os testadores precisam acessar elementos, geralmente valores de texto, localizados dentro de tabelas HTML. No entanto, os web designers raramente fornecem um atributo `id` ou `name` em cรฉlulas individuais. Portanto, mรฉtodos como `By.id()`, `By.name()` ou `By.cssSelector()` raramente funcionam. Nesse cenรกrio, a opรงรฃo mais confiรกvel รฉ `By.xpath()`, pois percorre as relaรงรตes pai-filho dentro da tag da tabela.

Como lidar com a tabela da Web em Selenium

Considere o cรณdigo HTML abaixo para lidar com tabelas da web em Selenium.

Como escrever XPath para tabela em Selenium

Nรณs vamos usar XPath para obter o texto interno da cรฉlula que contรฉm o texto โ€œquarta cรฉlulaโ€.

Como escrever XPath para tabela em Selenium

Passo 1 โ€“ Definir o Elemento Pai (tabela)

Os localizadores XPath no WebDriver sempre comeรงam com uma barra dupla โ€œ//โ€ seguida pelo elemento pai.. Como estamos lidando com tabelas da web em Selenium, o elemento pai deve ser sempre o marcaรงรฃo. A primeira parte do nosso Selenium O localizador de tabela XPath deve, portanto, comeรงar com โ€œ//tableโ€.

Selenium Exemplo de tabela da web

Passo 2 โ€“ Adicione os elementos filhos

O elemento diretamente abaixo รฉ , entรฃo รฉ filho de . Por outro lado, รฉ o pai de Todos os elementos filhos em XPath sรฃo colocados ร  direita do elemento pai, separados por uma barra "/", como mostrado abaixo.

Selenium Exemplo de tabela da web

Passo 3 โ€“ Adicionar Predicados

O O elemento contรฉm dois etiquetas. Estas duas tags sรฃo filhos de , entรฃo รฉ o pai de ambos. Os dois Os elementos sรฃo irmรฃos. Irmรฃos sรฃo elementos filhos que compartilham o mesmo progenitor..

Para chegar ao que contรฉm a โ€œquarta cรฉlulaโ€, primeiro precisamos acessar a segundo , nรฃo o primeiro. Escrever apenas โ€œ//table/tbody/trโ€ teria como alvo o primeiro. marcaรงรฃo.

Entรฃo, como acessamos o segundo? A resposta รฉ usar Predicados. Os predicados sรฃo nรบmeros ou atributos HTML delimitados por colchetes โ€œ[ ]โ€ que distinguem um elemento filho de seus elementos irmรฃos.Como a linha que precisamos รฉ a segunda, usamos โ€œ[2]โ€ como predicado.

 Selenium Exemplo de tabela da web

Se omitirmos o predicado, o XPath retorna o primeiro elemento irmรฃo. Portanto, qualquer um dos cรณdigos XPath abaixo alcanรงarรก o primeiro elemento irmรฃo. .

Selenium Tabela Web usando XPath

Etapa 4 โ€“ Adicione os elementos filhos subsequentes usando os predicados apropriados

O prรณximo elemento de que precisamos รฉ o segundo Aplicando as regras das etapas 2 e 3, chegamos ao XPath mostrado abaixo.

Tabela da Web em Selenium usando XPath

Agora que temos o localizador XPath correto, podemos acessar a cรฉlula e ler seu texto interno usando o cรณdigo abaixo. Isso pressupรตe que vocรช tenha salvo a pรกgina HTML como โ€œnewhtml.htmlโ€ na sua unidade C.

Tabela da Web em Selenium usando XPath

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/write-xpath-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

Tabela da Web em Selenium usando XPath

Acessando tabelas aninhadas

Os mesmos princรญpios se aplicam a tabelas aninhadas. Tabelas aninhadas sรฃo tabelas colocadas dentro de outra tabela.. Um exemplo รฉ mostrado abaixo.

Como acessar tabelas aninhadas em Selenium

Para acessar a cรฉlula com o texto โ€œ4-5-6โ€ usando os conceitos de pai/filho e predicado da seรงรฃo anterior, podemos compor o XPath mostrado abaixo.

Como acessar tabelas aninhadas em Selenium

O cรณdigo WebDriver abaixo recupera o texto interno da cรฉlula selecionada.

Acessando tabelas aninhadas em Selenium

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/accessing-nested-table.html";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]")).getText();
    System.out.println(innerText);
    driver.quit();
}

A saรญda abaixo confirma que a tabela interna foi acessada com sucesso.

Acessando tabelas aninhadas em Selenium

Usando atributos como predicados

Se o elemento estiver localizado em uma posiรงรฃo muito profunda no HTML, onde contar os elementos irmรฃos se torna trabalhoso, podemos usar o atributo รบnico desse elemento.

No exemplo abaixo, a cรฉlula โ€œNova York para Chicagoโ€ estรก enterrada bem no interior da Mercury Pรกgina inicial de passeios.

Selenium Exemplo de tabela da Web usando atributos como predicados

Selenium Exemplo de tabela da Web usando atributos como predicados

Podemos usar o atributo รบnico da tabela (width=โ€270โ€ณ) como predicado. Os atributos sรฃo usados โ€‹โ€‹como predicados prefixando-os com o sรญmbolo @No exemplo acima, a cรฉlula โ€œNova York para Chicagoโ€ estรก localizada na primeira posiรงรฃo. do quarto Portanto, nosso XPath deve ser semelhante ao mostrado abaixo.

Selenium Exemplo de tabela da Web com atributos como predicados

Lembre-se disso quando vocรช inserir o XPath dentro Java, escape as aspas duplas em torno de โ€œ270โ€ com uma barra invertida para que a string By.xpath() nรฃo seja encerrada prematuramente.

Selenium Exemplo de tabela da Web com atributos como predicados

Agora estamos prontos para acessar essa cรฉlula usando o cรณdigo abaixo.

Selenium Exemplo de tabela da Web com atributos como predicados

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table[@width=\"270\"]/tbody/tr[4]/td"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Selenium Exemplo de tabela da Web com atributos como predicados

Atalho: use o elemento Inspecionar para acessar tabelas em Selenium

Se o รญndice ou atributo de um elemento for difรญcil de obter, a maneira mais rรกpida de gerar o XPath รฉ usando a opรงรฃo "Inspecionar elemento" nas ferramentas de desenvolvedor dos navegadores modernos.

Considere o exemplo abaixo do Mercury Pรกgina inicial de passeios.

Selenium Exemplo de tabela da Web com atributos como predicados

Etapa 1

Clique com o botรฃo direito do mouse na cรฉlula desejada e selecione "Inspecionar" para visualizar o caminho DOM. Em seguida, copie o XPath completo.

Selenium Exemplo de tabela da Web com atributos como predicados

Etapa 2

Procure o primeiro elemento pai โ€œtabelaโ€ e exclua tudo ร  esquerda dele.

Selenium Exemplo de tabela da Web com atributos como predicados

Etapa 3

Adicione um prefixo de barra dupla โ€œ//โ€ ao XPath restante e copie-o para o seu cรณdigo WebDriver.

Selenium Exemplo de tabela da Web com atributos

O cรณdigo WebDriver abaixo recupera o texto interno do elemento profundamente aninhado.

Selenium Exemplo de tabela da Web com atributos

public static void main(String[] args) {
    String baseUrl = "https://demo.guru99.com/test/newtours/";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(By
        .xpath("//table/tbody/tr/td[2]"
        + "//table/tbody/tr[4]/td/"
        + "table/tbody/tr/td[2]/"
        + "table/tbody/tr[2]/td[1]/"
        + "table[2]/tbody/tr[3]/td[2]/font"))
        .getText();
    System.out.println(innerText);
    driver.quit();
}

Como contar linhas e colunas em uma tabela web dinรขmica

Tabelas web dinรขmicas, como dashboards ou resultados de pesquisa, renderizam um nรบmero diferente de linhas a cada carregamento. Para lidar com isso, use findElements para buscar cada Em seguida, insira os dados em uma lista e percorra-a para ler cada cรฉlula. O trecho de cรณdigo abaixo conta as linhas e lรช todas as cรฉlulas de uma tabela cujo ID รฉ "clientes".

List<WebElement> rows = driver.findElements(
    By.xpath("//table[@id='customers']//tr"));
System.out.println("Total rows: " + rows.size());

for (int i = 1; i <= rows.size(); i++) {
    List<WebElement> cells = driver.findElements(
        By.xpath("//table[@id='customers']//tr[" + i + "]/td"));
    for (WebElement cell : cells) {
        System.out.println(cell.getText());
    }
}

Envolva o localizador em um WebDriverWait com as visibilityOfAllElementsLocatedBy Quando a tabela รฉ carregada por AJAX. Isso evita referรชncias obsoletas a elementos em grades de renderizaรงรฃo lenta.

Selenium 4 Localizadores Relativos para Tabelas Web

Selenium A versรฃo 4 introduziu localizadores relativos que direcionam elementos por posiรงรฃo visual. Eles sรฃo รบteis quando os รญndices XPath falham devido ร  reordenaรงรฃo das linhas. Os mรฉtodos above(), below(), toLeftOf(), toRightOf() e near() Todos aceitam um elemento Web de รขncora.

import static org.openqa.selenium.support.locators.RelativeLocator.with;

WebElement emailHeader = driver.findElement(By.xpath("//th[text()='Email']"));
WebElement emailCell = driver.findElement(
    with(By.tagName("td")).below(emailHeader));
System.out.println(emailCell.getText());

Os localizadores relativos permanecem legรญveis mesmo quando a ordem das colunas muda. Combine-os com esperas explรญcitas para obter os melhores resultados em pรกginas baseadas em dados.

Ferramentas de IA para lidar com tabelas web dinรขmicas

Plataformas de teste assistidas por IA reduzem a necessidade de manutenรงรฃo de localizadores em redes que sofrem alteraรงรตes frequentes. Ferramentas como Testim, Mabl e Funcionalizar Utilizam visรฃo computacional e modelos DOM para detectar mudanรงas de coluna e localizar elementos de forma automรกtica. Identificam linhas pelo texto do cabeรงalho e similaridade entre cรฉlulas, em vez de รญndices XPath fixos.

Para puro Selenium projetos, bibliotecas como Healenium Encapsule o WebDriver e reescreva os localizadores quebrados em tempo de execuรงรฃo. Combine essas ferramentas com o WebDriverWait para manter os scripts de tabelas dinรขmicas estรกveis, sem precisar reescrever os seletores apรณs cada alteraรงรฃo na interface do usuรกrio.

Resumo

  • By.xpath() รฉ a maneira mais confiรกvel de acessar cรฉlulas de uma tabela da Web em Selenium.
  • Se contar irmรฃos for difรญcil, use um atributo รบnico como predicado, prefixado com o sรญmbolo @.
  • findElements retorna uma lista. que suporta a contagem de linhas em tabelas dinรขmicas.
  • Selenium Quatro localizadores relativos (acima, abaixo, prรณximo) reduzem a dependรชncia do XPath posicional.
  • A opรงรฃo "Inspecionar elemento" nas Ferramentas de Desenvolvedor acelera a geraรงรฃo de XPath para cรฉlulas profundamente ocultas.
  • ferramentas de IA como Testim, Mabl e Healenium sรฃo localizadores de autorrecuperaรงรฃo para mudanรงas de grades.

Perguntas Frequentes

Uma tabela web em Selenium ร‰ um WebElement que exibe dados tabulares em linhas e colunas. Pode ser estรกtico ou dinรขmico. Os testadores acessam suas cรฉlulas por meio de mรฉtodos WebElement combinados com XPath ou localizadores CSS, pois as tabelas raramente expรตem IDs exclusivos em cรฉlulas individuais.

A maioria das cรฉlulas da tabela nรฃo possui um atributo id ou name, portanto, By.id() e By.name() nรฃo funcionarรฃo. O XPath percorre a estrutura pai-filho dos elementos table, tbody, tr e td, o que o torna o localizador de cรฉlulas mais confiรกvel.

Use `driver.findElements(By.xpath(โ€œ//table[@id='tbl']//trโ€)).size()` para contar as linhas e `//table[@id='tbl']//tr[1]/td` para contar as colunas. O mรฉtodo `findElements` retorna uma lista. que suporta a funรงรฃo size() para totais de linhas rรกpidos.

Selenium A versรฃo 4 introduziu localizadores relativos como above(), below(), toLeftOf(), toRightOf() e near(). Eles ajudam a selecionar cรฉlulas posicionadas ao redor de uma cรฉlula รขncora conhecida, o que รฉ รบtil quando os รญndices XPath mudam em tabelas dinรขmicas.

Percorra as linhas com findElements e, em seguida, leia cada cรฉlula com getText(). Construa o XPath dinamicamente usando concatenaรงรฃo de strings, como //tr["+i+"]/td["+j+"]. Aguarde o carregamento da tabela com WebDriverWait antes de ler os valores.

Sim. Ferramentas com inteligรชncia artificial como TestimMabl e Functionize usam visรฃo computacional e modelos DOM para detectar limites de tabelas, inferir cabeรงalhos e corrigir automaticamente os localizadores quando as colunas se deslocam. Isso reduz a necessidade de manutenรงรฃo do XPath para painรฉis dinรขmicos.

Os modelos de IA aprendem padrรตes de linhas a partir de execuรงรตes anteriores e combinam cรฉlulas usando similaridade de texto em vez de รญndices fixos. Quando uma linha se move ou uma coluna รฉ reordenada, o localizador de IA ainda encontra o alvo sem reescrever o XPath.

O mรฉtodo `findElement` retorna um รบnico elemento Web e lanรงa uma exceรงรฃo `NoSuchElementException` caso ele nรฃo exista. O mรฉtodo `findElements` retorna uma lista. e retorna uma lista vazia se nenhuma correspondรชncia for encontrada. Use findElements quando looping sobre linhas ou colunas da tabela.

Resuma esta postagem com: