Como lidar com a tabela da Web em Selenium
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 ou informaรงรตes exibidos podem ser estรกticos ou dinรขmicos. A tabela da Web e seus elementos podem ser acessados โโusando funรงรตes e localizadores do WebElement em Selenium. Um exemplo tรญpico de uma tabela da web seriam as especificaรงรตes de produtos exibidas em uma plataforma de comรฉrcio eletrรดnico.
Lendo uma tabela da Web HTML
Hรก momentos em que precisamos acessar elementos (geralmente textos) que estรฃo dentro de tabelas HTML. No entanto, รฉ muito raro um web designer fornecer um atributo id ou name para uma determinada cรฉlula da tabela. Portanto, nรฃo podemos usar os mรฉtodos usuais como โBy.id()โ, โBy.name()โ ou โBy.cssSelector()โ. Neste caso, a opรงรฃo mais confiรกvel รฉ acessรก-los usando o mรฉtodo โBy.xpath()โ.
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 โ//โ e 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 imediatamente abaixo รฉ entรฃo podemos dizer que รฉ o โfilhoโ de . E tambรฉm, รฉ o โpaiโ de . Todos os elementos filhos em XPath sรฃo colocados ร direita de seu elemento pai, separados por uma barra โ/โ como o cรณdigo mostrado abaixo.
.png)
Passo 3 โ Adicionar Predicados
O elemento contรฉm dois Tag. Podemos agora dizer que estes dois tags sรฃo โfilhosโ de . Consequentemente, podemos dizer que รฉ pai de ambos elementos.
Outra coisa que podemos concluir รฉ que os dois elementos sรฃo irmรฃos. Irmรฃos referem-se a elementos filhos que tรชm o mesmo pai.
Para chegar ao desejamos acessar (aquele com o texto โquarta cรฉlulaโ), devemos primeiro acessar o segundo e nรฃo o primeiro. Se simplesmente escrevermos โ//table/tbody/trโ, estaremos acessando o primeiro marcaรงรฃo.
Entรฃo, como acessamos o segundo entรฃo? A resposta para isso รฉ usar Predicados.
Predicados sรฃo nรบmeros ou atributos HTML entre colchetes โ[]โ que distinguem um elemento filho de seus irmรฃos. Desde o que precisamos acessar รฉ o segundo, usaremos โ[2]โ como predicado.
Se nรฃo usarmos nenhum predicado, o XPath acessarรก o primeiro irmรฃo. Portanto, podemos acessar o primeiro usando qualquer um desses cรณdigos XPath.
Etapa 4 โ Adicione os elementos filhos subsequentes usando os predicados apropriados
O prรณximo elemento que precisamos acessar รฉ o segundo . Aplicando os princรญpios que aprendemos nas etapas 2 e 3, finalizaremos nosso cรณdigo XPath para ficar como o mostrado abaixo.
Agora que temos o localizador XPath correto, jรก podemos acessar a cรฉlula que desejamos e obter seu texto interno utilizando o cรณdigo abaixo. Presume-se que vocรช salvou o cรณdigo HTML acima como โnewhtml.htmlโ em 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 discutidos acima se aplicam a tabelas aninhadas. Tabelas aninhadas sรฃo tabelas localizadas dentro de outra tabela. Um exemplo รฉ mostrado abaixo.
Para acessar a cรฉlula com o texto โ4-5-6โ usando os conceitos โ//pai/filhoโ e predicado da seรงรฃo anterior, devemos ser capazes de criar o cรณdigo XPath abaixo.
O cรณdigo do WebDriver abaixo deve ser capaz de recuperar o texto interno da cรฉlula que estamos acessando.
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 escrito profundamente no cรณdigo HTML, de modo que o nรบmero a ser usado para o predicado seja muito difรญcil de determinar, podemos usar o atributo exclusivo desse elemento.
No exemplo abaixo, a cรฉlula โNew York to Chicagoโ estรก localizada profundamente Mercury Cรณdigo HTML da pรกgina inicial do Tour.
Neste caso, podemos usar o atributo รบnico da tabela (largura=โ270โณ) como predicado. Os atributos sรฃo usados โโcomo predicados prefixando-os com o sรญmbolo @. No exemplo acima, a cรฉlula โNew York to Chicagoโ estรก localizada no primeiro do quarto e, portanto, nosso XPath deve ser conforme mostrado abaixo.
Lembre-se que quando colocamos o cรณdigo XPath em Java, devemos usar o caractere de escape barra invertida โ\โ para as aspas duplas em ambos os lados de โ270โ para que o argumento de string de By.xpath() nรฃo seja encerrado 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 nรบmero ou atributo de um elemento for extremamente difรญcil ou impossรญvel de obter, a maneira mais rรกpida de gerar o cรณdigo XPath รฉ usando Inspecionar Elemento.
Considere o exemplo abaixo de Mercury Pรกgina inicial de passeios.
Etapa 1
Use o Firebug para obter o cรณdigo XPath.
Etapa 2
Procure o primeiro elemento pai โtabelaโ e exclua tudo ร esquerda dele.
Etapa 3
Prefixe a parte restante do cรณdigo com uma barra dupla โ//โ e copie-a para o cรณdigo do WebDriver.
O cรณdigo WebDriver abaixo serรก capaz de recuperar com sucesso o texto interno do elemento que estamos acessando.
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();
}
Resumo
- By.xpath() รฉ comumente usado para acessar elementos de WebTable em Selenium.
- Se o elemento estiver escrito profundamente no cรณdigo HTML, de modo que o nรบmero a ser usado para o predicado seja muito difรญcil de determinar, podemos usar o atributo exclusivo desse elemento para Selenium obter elemento da tabela.
- Os atributos sรฃo usados โโcomo predicados prefixando-os com o sรญmbolo @.
- Use o elemento Inspect para acessar o WebTable em Selenium

.png)
.png)



















