Primeiro script do Selenium Webdriver: Exemplo de código de exemplo JAVA

Índice:

Anonim

Usando a classe Java "myclass" que criamos no tutorial anterior, vamos tentar criar um script WebDriver que:

  1. buscar a página inicial da Mercury Tours
  2. verifique seu título
  3. imprima o resultado da comparação
  4. feche-o antes de encerrar todo o programa.

Código WebDriver

Abaixo está o código WebDriver real para a lógica apresentada pelo cenário acima

Nota: Iniciando o Firefox 35, você precisa usar o driver gecko criado pela Mozilla para usar o Web Driver. Selenium 3.0, gecko e firefox têm problemas de compatibilidade e configurá-los corretamente pode se tornar uma tarefa difícil. Se o código não funcionar, faça downgrade para o Firefox versão 47 ou inferior. Como alternativa, você pode executar seus scripts no Chrome. Selenium funciona fora da caixa para o Chrome. Você só precisa alterar 3 linhas de código para fazer seu script funcionar com Chrome ou Firefox

package newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// comente a linha acima e descomente a linha abaixo para usar o Chrome// import org.openqa.selenium.chrome.ChromeDriver;public class PG1 {public static void main (String [] args) {// declaração e instanciação de objetos / variáveisSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = novo FirefoxDriver ();// comente as 2 linhas acima e descomente as 2 linhas abaixo para usar o Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// Driver WebDriver = new ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";StringesperadoTitle = "Bem-vindo: Mercury Tours";String actualTitle = "";// inicie o Fire fox e direcione-o para a URL basedriver.get (baseUrl);// obtém o valor real do títuloactualTitle = driver.getTitle ();/ ** compare o título real da página com o esperado e imprima* o resultado foi "Aprovado" ou "Reprovado"* /if (actualTitle.contentEquals (expectedTitle)) {System.out.println ("Teste aprovado!");} outro {System.out.println ("Teste falhou");}// feche Fire foxdriver.close ();}}

Explicando o código

Importando Pacotes

Para começar, você precisa importar os dois pacotes a seguir:

  1. org.openqa.selenium. * - contém a classe WebDriver necessária para instanciar um novo navegador carregado com um driver específico
  2. org.openqa.selenium.firefox.FirefoxDriver - contém a classe FirefoxDriver necessária para instanciar um driver específico do Firefox no navegador instanciado pela classe WebDriver

Se o seu teste precisa de ações mais complicadas, como acessar outra classe, fazer capturas de tela do navegador ou manipular arquivos externos, definitivamente você precisará importar mais pacotes.

Instanciando objetos e variáveis

Normalmente, é assim que um objeto driver é instanciado.

Uma classe FirefoxDriver sem parâmetros significa que o perfil padrão do Firefox será iniciado por nosso programa Java. O perfil padrão do Firefox é semelhante a iniciar o Firefox no modo de segurança (nenhuma extensão é carregada).

Por conveniência, salvamos o URL base e o título esperado como variáveis.

Iniciando uma Sessão de Navegador

O método get () do WebDriver é usado para iniciar uma nova sessão do navegador e direcioná-la para a URL que você especifica como seu parâmetro.

Obtenha o título da página real

A classe WebDriver possui o método getTitle () que sempre é usado para obter o título da página carregada no momento.

Compare os valores esperados e reais

Esta parte do código simplesmente usa uma estrutura básica de Java if-else para comparar o título real com o esperado.

Encerrando uma Sessão do Navegador

O método " close () " é usado para fechar a janela do navegador.

Encerrando todo o programa

Se você usar este comando sem fechar todas as janelas do navegador primeiro, todo o seu programa Java será encerrado, deixando a janela do navegador aberta.

Executando o Teste

Existem duas maneiras de executar código no Eclipse IDE.

  1. Na barra de menu do Eclipse, clique em Executar> Executar.
  2. Pressione Ctrl + F11 para executar todo o código.

Se você fizesse tudo corretamente, o Eclipse produziria "Teste aprovado!"

Localizando Elementos GUI

A localização de elementos no WebDriver é feita usando o método " findElement (By. Locator ()) ". A parte "localizador" do código é igual a qualquer um dos localizadores discutidos anteriormente nos capítulos do Selenium IDE desses tutoriais. Na verdade, é recomendável que você localize os elementos da GUI usando o IDE e, uma vez identificado com êxito, exporte o código para o WebDriver.

Aqui está um código de amostra do Selenium que localiza um elemento por seu id. O Facebook é usado como URL base.

package newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class PG2 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = novo FirefoxDriver ();String baseUrl = "http://www.facebook.com";String tagName = "";driver.get (baseUrl);tagName = driver.findElement (By.id ("email")). getTagName ();System.out.println (tagName);driver.close ();System.exit (0);}}

Usamos o método getTagName () para extrair o nome da tag daquele elemento específico cujo id é "email". Quando executado, este código deve ser capaz de identificar corretamente o nome da tag "input" e irá imprimi-lo na janela do Console do Eclipse.

Resumo para localização de elementos

Variação Descrição Amostra
De. nome da classe encontra elementos com base no valor do atributo "class" findElement (By.className ("someClassName"))
De. cssSelector encontra elementos com base no mecanismo seletor CSS subjacente do driver findElement (By.cssSelector ("input # email"))
De. eu ia localiza elementos pelo valor de seu atributo "id" findElement (By.id ("someId"))
De. Texto do link encontra um elemento de link pelo texto exato que exibe findElement (By.linkText ("REGISTRATION"))
De. nome localiza elementos pelo valor do atributo "name" findElement (By.name ("someName"))
De. parcialLinkText localiza os elementos que contêm o texto do link fornecido findElement (By.partialLinkText ("REG"))
De. tagName localiza os elementos por seu nome de tag findElement (By.tagName ("div"))
De. xpath localiza elementos via XPath findElement (By.xpath ("// html / body / div / table / tbody / tr / td [2] / table / tbody / tr [4] / td / table / tbody / tr / td [2] / table / tbody / tr [2] / td [3] / form / table / tbody / tr [5] "))

Nota sobre como usar findElement (By.cssSelector ())

By.cssSelector () não oferece suporte ao recurso "contém" . Considere o código Selenium IDE abaixo -

No Selenium IDE acima, todo o teste foi aprovado. No entanto, no script Selenium WebDriver abaixo, o mesmo teste gerou um erro porque o WebDriver não oferece suporte à palavra-chave "contém" quando usada no método By.cssSelector ().

Comandos Comuns

Instanciando Elementos da Web

Em vez de usar a sintaxe longa "driver.findElement (By.locator ())" toda vez que você acessar um elemento específico, podemos instanciar um objeto WebElement para ele. A classe WebElement está contida no pacote "org.openqa.selenium. *".

Clicar em um elemento

Clicar é talvez a forma mais comum de interagir com os elementos da web . O método click () é usado para simular o clique de qualquer elemento. O exemplo Selenium Java a seguir mostra como click () foi usado para clicar no botão "Sign-In" da Mercury Tours.

Os itens a seguir devem ser observados ao usar o método click ().

  • Não requer nenhum parâmetro / argumento.
  • O método aguarda automaticamente o carregamento de uma nova página, se aplicável.
  • O elemento a ser clicado deve ser visível (altura e largura não devem ser iguais a zero).

Obter comandos

Os comandos Get buscam várias informações importantes sobre a página / elemento. Aqui estão alguns comandos "get" importantes com os quais você deve estar familiarizado.

Comandos Uso
get () Amostra de uso:
  • Ele abre automaticamente uma nova janela do navegador e busca a página que você especifica entre seus parênteses.
  • É a contrapartida do comando "abrir" do Selenium IDE.
  • O parâmetro deve ser um objeto String .
getTitle () Amostra de uso:
  • Não precisa de parâmetros
  • Busca o título da página atual
  • Espaços em branco à esquerda e à direita são aparados
  • Retorna uma string nula se a página não tiver título
getPageSource () Amostra de uso:
  • Não precisa de parâmetros
  • Retorna o código-fonte da página como um valor String
getCurrentUrl () Amostra de uso:
  • Não precisa de parâmetros
  • Busca a string que representa o URL atual que o navegador está procurando
getText () Amostra de uso:
  • Busca o texto interno do elemento que você especificar

Comandos de navegação

Esses comandos permitem que você atualize, entre e alterne entre diferentes páginas da web.

navegar (). para () Amostra de uso:
  • Ele abre automaticamente uma nova janela do navegador e busca a página que você especifica entre seus parênteses.
  • Ele faz exatamente a mesma coisa que o método get ().
navegar (). atualizar () Amostra de uso:
  • Não precisa de parâmetros.
  • Ele atualiza a página atual.
navegar (). voltar () Amostra de uso:
  • Não precisa de parâmetros
  • Leva você de volta por uma página no histórico do navegador.
navegar (). avançar () Exemplo de uso:
  • Não precisa de parâmetros
  • Leva-o para a frente por uma página no histórico do navegador.

Fechando e saindo das janelas do navegador

close () Amostra de uso:
  • Não precisa de parâmetros
  • Ele fecha apenas a janela do navegador que o WebDriver está controlando no momento .
quit () Amostra de uso:
  • Não precisa de parâmetros
  • Ele fecha todas as janelas que o WebDriver abriu.

Para ilustrar claramente a diferença entre close () e quit (), tente executar o código abaixo. Ele usa uma página da web que abre automaticamente uma janela no carregamento da página e abre outra após sair.

Observe que apenas a janela do navegador pai foi fechada e não as duas janelas pop-up.

Mas se você usar quit (), todas as janelas serão fechadas - não apenas a janela principal. Tente executar o código abaixo e você notará que os dois pop-ups acima também serão fechados automaticamente.

package newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class PG3 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = novo FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // usando QUIT todas as janelas serão fechadas}}

Alternando entre quadros

Para acessar os elementos da GUI em um Frame, devemos primeiro direcionar o WebDriver para focar no frame ou janela pop-up antes de podermos acessar os elementos dentro deles. Tomemos, por exemplo, a página da web http://demo.guru99.com/selenium/deprecated.html

Esta página possui 3 frames cujos atributos de "nome" estão indicados acima. Desejamos acessar o link "Obsoleto" circulado acima em amarelo. Para fazer isso, devemos primeiro instruir o WebDriver a alternar para o quadro "classFrame" usando o método "switchTo (). Frame ()" . Usaremos o atributo name do frame como parâmetro para a parte "frame ()".

package newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class PG4 {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = novo FirefoxDriver ();driver.get ("http://demo.guru99.com/selenium/deprecated.html");driver.switchTo (). frame ("classFrame");driver.findElement (By.linkText ("Obsoleto")). click ();driver.close ();}}

Depois de executar esse código, você verá que o quadro "classFrame" é levado para a página "API obsoleta", o que significa que nosso código foi capaz de acessar o link "Obsoleto".

Alternar entre janelas pop-up

O WebDriver permite que janelas pop-up como alertas sejam exibidas, ao contrário do Selenium IDE. Para acessar os elementos dentro do alerta (como a mensagem que ele contém), devemos usar o método "switchTo (). Alert ()" . No código a seguir, usaremos esse método para acessar a caixa de alerta e, em seguida, recuperar sua mensagem usando o método "getText ()" e, em seguida, fechar automaticamente a caixa de alerta usando "switchTo (). Alert (). Accept () " método.

Primeiro, vá para http://jsbin.com/usidix/1 e clique manualmente no botão "Go!" botão lá e veja por si mesmo o texto da mensagem.

Vamos ver o código de exemplo do Selenium para fazer isso-

pacote mypackage;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class myclass {public static void main (String [] args) {System.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = novo FirefoxDriver ();String alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value = \" Go! \ "]")). click ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);driver.quit ();}}

No console do Eclipse, observe que a mensagem de alerta impressa é:

Espera

Existem dois tipos de espera.

  1. Espera implícita - usada para definir o tempo de espera padrão em todo o programa
  2. Espera explícita - usada para definir o tempo de espera apenas para uma determinada instância

Espera implícita

  • É mais simples codificar do que as esperas explícitas.
  • Geralmente é declarado na parte de instanciação do código.
  • Você só precisará de um pacote adicional para importar.

Para começar a usar uma espera implícita, você teria que importar este pacote para o seu código.

Então, na parte de instanciação do seu código, adicione isso.

Espera explícita

Esperas explícitas são feitas usando as classes WebDriverWait e ExpectedCondition . Para o seguinte exemplo do Selenium WebDriver, devemos esperar até 10 segundos para que um elemento cujo id é "nome de usuário" se torne visível antes de prosseguir para o próximo comando. Aqui estão as etapas.

Passo 1

Importe estes dois pacotes:

Passo 2

Declare uma variável WebDriverWait. Neste exemplo, usaremos "myWaitVar" como o nome da variável.

etapa 3

Use myWaitVar com ExpectedConditions em partes onde você precisa que a espera explícita ocorra. Nesse caso, usaremos a espera explícita na entrada "nome de usuário" (Mercury Tours HomePage) antes de digitar o texto "tutorial" nele.

Condições

Os seguintes métodos são usados ​​em operações condicionais e de loop -

  • isEnabled () é usado quando você deseja verificar se um determinado elemento está habilitado ou não antes de executar um comando.
  • isDisplayed () é usado quando você deseja verificar se um determinado elemento é exibido ou não antes de executar um comando.
  • isSelected () é usado quando você deseja verificar se uma determinada caixa de seleção, botão de rádio ou opção em uma caixa suspensa está selecionada. Não funciona em outros elementos.

Usando condições esperadas

A classe ExpectedConditions oferece um conjunto mais amplo de condições que você pode usar em conjunto com o método until () de WebDriverWait.

Abaixo estão alguns dos métodos ExpectedConditions mais comuns.

  • alertIsPresent () - espera até que uma caixa de alerta seja exibida.
  • elementToBeClickable () - Espera até que um elemento esteja visível e, ao mesmo tempo, ativado. O exemplo de Código Selenium abaixo irá aguardar até que o elemento com se torne visível e habilitado antes de atribuir esse elemento como uma variável WebElement chamada "txtUserName".
  • frameToBeAvailableAndSwitchToIt () - Espera até que o quadro fornecido já esteja disponível e, em seguida, alterna automaticamente para ele.

Captura de exceções

Ao usar isEnabled (), isDisplayed () e isSelected (), o WebDriver presume que o elemento já existe na página. Caso contrário, ele lançará uma NoSuchElementException . Para evitar isso, devemos usar um bloco try-catch para que o programa não seja interrompido.

WebElement txtbox_username = driver.findElement (By.id ("nome de usuário"));tentar{if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("tutorial");}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}

Se você usar esperas explícitas, o tipo de exceção que você deve capturar é "TimeoutException".

Resumo

  • Para começar a usar a API WebDriver, você deve importar pelo menos esses dois pacotes.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • O método get () é equivalente ao comando "abrir" do Selenium IDE.
  • A localização de elementos no WebDriver é feita usando o método findElement () .
  • A seguir estão as opções disponíveis para localizar elementos no WebDriver:
  • De. nome da classe
  • De. cssSelector
  • De. eu ia
  • De. Texto do link
  • De. nome
  • De. parcialLinkText
  • De. tagName
  • De. xpath
  • O By.cssSelector () não oferece suporte ao recurso "contém" .
  • Você pode instanciar um elemento usando a classe WebElement .
  • Clicar em um elemento é feito usando o método click () .
  • O WebDriver fornece estes comandos get úteis :
  • obter()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver fornece esses comandos de navegação úteis
  • navegar (). avançar ()
  • navegar (). voltar ()
  • navegar para()
  • navegar (). atualizar ()
  • Os métodos close () e quit () são usados ​​para fechar as janelas do navegador. Close () é usado para fechar uma única janela; enquanto quit () é usado para fechar todas as janelas associadas à janela pai que o objeto WebDriver estava controlando.
  • Os métodos switchTo (). Frame () e switchTo (). Alert () são usados ​​para direcionar o foco do WebDriver para um quadro ou alerta, respectivamente.
  • As esperas implícitas são usadas para definir o tempo de espera em todo o programa, enquanto as esperas explícitas são usadas apenas em partes específicas.
  • Você pode usar os métodos isEnabled (), isDisplayed (), isSelected () e uma combinação dos métodos WebDriverWait e ExpectedConditions ao verificar o estado de um elemento. No entanto, eles não verificam se o elemento não existe.
  • Quando isEnabled (), isDisplayed () ou isSelected () foi chamado enquanto o elemento não existia, WebDriver lançará uma NoSuchElementException .
  • Quando os métodos WebDriverWait e ExpectedConditions eram chamados enquanto o elemento não existia, WebDriver lançava uma TimeoutException .

Observação:

driver.get (): É usado para ir para o site específico, mas não mantém o histórico do navegador e cookies, portanto, não podemos usar o botão avançar e retroceder, se clicarmos nele, a página não será programada

driver.navigate (): é usado para ir ao site específico, mas mantém o histórico do navegador e os cookies, para que possamos usar o botão avançar e voltar para navegar entre as páginas durante a codificação do Testcase