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.

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.
Nรณs vamos usar XPath para obter o texto interno da cรฉlula que contรฉm o texto โquarta cรฉlulaโ.
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โ.
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.
.png)
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.
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. .
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.
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.
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();
}
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.
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.
O cรณdigo WebDriver abaixo recupera o texto interno da cรฉlula selecionada.
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.
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.
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.
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.
Agora estamos prontos para acessar essa cรฉlula usando o cรณdigo abaixo.
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();
}
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.
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.
Etapa 2
Procure o primeiro elemento pai โtabelaโ e exclua tudo ร esquerda dele.
Etapa 3
Adicione um prefixo de barra dupla โ//โ ao XPath restante e copie-o para o seu cรณdigo WebDriver.
O cรณdigo WebDriver abaixo recupera o texto interno do elemento profundamente aninhado.
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.

.png)
.png)



















