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.

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 โ€œ//โ€ 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โ€.

Selenium Exemplo de tabela da web

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.

Selenium Exemplo de tabela da web

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.

 Selenium Exemplo de tabela da web

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.

Selenium Tabela Web usando 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.

Tabela da Web em Selenium usando XPath

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.

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 discutidos acima se aplicam a tabelas aninhadas. Tabelas aninhadas sรฃo tabelas localizadas 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 โ€œ//pai/filhoโ€ e predicado da seรงรฃo anterior, devemos ser capazes de criar o cรณdigo XPath abaixo.

Como acessar tabelas aninhadas em Selenium


O cรณdigo do WebDriver abaixo deve ser capaz de recuperar o texto interno da cรฉlula que estamos acessando.

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 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.

Selenium Exemplo de tabela da Web usando atributos como predicados

Selenium Exemplo de tabela da Web usando atributos como predicados

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.

Selenium Exemplo de tabela da Web com atributos como predicados

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.

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 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.

Selenium Exemplo de tabela da Web com atributos como predicados

Etapa 1

Use o Firebug para obter o cรณdigo XPath.

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

Prefixe a parte restante do cรณdigo com uma barra dupla โ€œ//โ€ e copie-a para o cรณdigo do WebDriver.

Selenium Exemplo de tabela da Web com atributos

O cรณdigo WebDriver abaixo serรก capaz de recuperar com sucesso o texto interno do elemento que estamos acessando.

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();
}

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

Resuma esta postagem com: