Como lidar com a tabela da Web no Selenium WebDriver

Índice:

Anonim

Lendo uma tabela da web em 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 a 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 ()".

Neste Tutorial, você aprenderá-

  • Como escrever XPath para Tabela
  • Acessando tabelas aninhadas
  • Usando atributos como predicados
  • Atalho: Use Inspecionar Elemento para Acessar Tabelas no Selenium

Como escrever XPath para Tabela

Considere o código HTML abaixo.

Usaremos XPath para obter o texto interno da célula que contém o texto "quarta célula".

Etapa 1 - definir o elemento pai (tabela)

Os localizadores XPath no WebDriver sempre começam com uma barra dupla "//" e, em seguida, são seguidos pelo elemento pai . Como estamos lidando com tabelas, o elemento pai deve ser sempre a tag

. A primeira parte do nosso localizador XPath deve, portanto, começar com "// tabela".

Etapa 2 - Adicionar os elementos filhos

O elemento imediatamente abaixo de

é , então podemos dizer que é o "filho" de
. E também,
é o "pai" de . Todos os elementos filho no XPath são colocados à direita de seu elemento pai, separados por uma barra "/" como o código mostrado abaixo.

Etapa 3 - Adicionar Predicados

O elemento

contém duas tags . Agora podemos dizer que essas duas tags são "filhas" de . Consequentemente, podemos dizer que é o pai de ambos os 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

e não o primeiro. Se simplesmente escrevermos "// table / tbody / tr", estaremos acessando a primeira tag .

Então, como acessamos o segundo

então? A resposta para isso é usar Predicados .

Predicados são números ou atributos HTML entre um par de colchetes "[]" que distinguem um elemento filho de seus irmãos . Como o

que precisamos acessar é o segundo, usaremos "[2]" como o 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 - Adicionar os elementos filhos sucessores usando os predicados apropriados

O próximo elemento que precisamos acessar é o segundo

e, portanto, nosso XPath deve ser conforme mostrado abaixo.

Lembre-se de 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 = "http://demo.guru99.com/test/newtours/";Driver WebDriver = novo FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (por.xpath ("// table [@width = \" 270 \ "] / tbody / tr [4] / td")).getText ();System.out.println (innerText);driver.quit ();}

Atalho: Use Inspecionar Elemento para Acessar Tabelas no 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 da página inicial da Mercury Tours.

Passo 1

Use o Firebug para obter o código XPath.

Passo 2

Procure o primeiro elemento pai "tabela" e exclua tudo à esquerda dele.

etapa 3

Prefixe a parte restante do código com barra dupla "//" e copie-o 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 = "http://demo.guru99.com/test/newtours/";Driver WebDriver = novo FirefoxDriver ();driver.get (baseUrl);String innerText = driver.findElement (por.xpath ("// table / tbody / tr / td [2]"+ "// tabela / tbody / tr [4] / td /"+ "table / tbody / tr / td [2] /"+ "tabela / tbody / tr [2] / td [1] /"+ "tabela [2] / tbody / tr [3] / td [2] / fonte")).getText ();System.out.println (innerText);driver.quit ();}

Resumo

  • By.xpath () é comumente usado para acessar os elementos da tabela.
  • Se o elemento for escrito profundamente no código HTML de forma que o número a ser usado para o predicado seja muito difícil de determinar, podemos usar o atributo exclusivo desse elemento.
  • Os atributos são usados ​​como predicados, prefixando-os com o símbolo @.
  • Use Inspecionar elemento para acessar tabelas no Selenium
que desejamos acessar (aquele com o texto "quarta célula"), devemos primeiro acessar o segundo
. Aplicando os princípios que aprendemos nas etapas 2 e 3, finalizaremos nosso código XPath para ser como o mostrado abaixo.

Agora que temos o localizador XPath correto, já podemos acessar a célula que desejamos e obter seu texto interno usando o código abaixo. Ele assume que você salvou o código HTML acima como "newhtml.html" em sua unidade C.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/write-xpath-table.html";Driver WebDriver = novo 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. As tabelas aninhadas são tabelas localizadas em 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 WebDriver abaixo deve ser capaz de recuperar o texto interno da célula que estamos acessando.

public static void main (String [] args) {String baseUrl = "http://demo.guru99.com/test/accessing-nested-table.html";Driver WebDriver = novo 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 for escrito profundamente no código HTML de forma 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 no código HTML da página inicial da Mercury Tours.

Nesse caso, podemos usar o atributo exclusivo da tabela (largura = "270") como o 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