Selenium Driver da Web Java Exemplo de programa

Selenium Java Exemplo

Com o Java class “myclass” que criamos no tutorial anterior, vamos tentar criar um script WebDriver que:

- buscar Mercury Página inicial dos passeios
- verifique seu título
- imprima o resultado da comparação
- feche-o antes de encerrar todo o programa.

Selenium Código de exemplo do WebDriver

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

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//comment the above line and uncomment below line to use Chrome
//import org.openqa.selenium.chrome.ChromeDriver;
public class PG1 {


    public static void main(String[] args) {
        // declaration and instantiation of objects/variables
    	System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");
		WebDriver driver = new FirefoxDriver();
		//comment the above 2 lines and uncomment below 2 lines to use Chrome
		//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");
		//WebDriver driver = new ChromeDriver();
    	
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = "";

        // launch Fire fox and direct it to the Base URL
        driver.get(baseUrl);

        // get the actual value of the title
        actualTitle = driver.getTitle();

        /*
         * compare the actual title of the page with the expected one and print
         * the result as "Passed" or "Failed"
         */
        if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }
       
        //close Fire fox
        driver.close();
    }

}

Nota: começando 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 árdua. Se o código não funcionar, faça downgrade para Firefox versão 47 ou inferior. Alternativamente, você pode executar seus scripts no Chrome. Selenium funciona imediatamente para o Chrome. Você só precisa alterar 3 linhas de código para fazer seu script funcionar com o Chrome ou Firefox

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.FirefoxDirigir – contém o FirefoxClasse de driver necessária para instanciar um Firefox-driver específico no navegador instanciado pela classe WebDriver

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

Instanciando objetos e variáveis

Normalmente, é assim que um objeto driver é instanciado.

WebDriver driver = new FirefoxDriver();

A FirefoxClasse de driver sem parâmetros significa que o padrão Firefox perfil será lançado pelo nosso Java programa. O padrão Firefox perfil é semelhante ao lançamento 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 do navegador

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

driver.get(baseUrl);

Obtenha o título real da página

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

actualTitle = driver.getTitle();

Compare os valores esperados e reais

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

if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }

Encerrando uma sessão do navegador

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

driver.close();

Encerrando todo o programa

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

System.exit(0);

Executando o teste

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

  1. On Eclipsebarra de menu, clique em Executar > Executar.
  2. Imprensa Ctrl + F11 para executar todo o código.

Executando o teste

Se você fez tudo certo, Eclipse geraria “Teste aprovado!”

Executando o teste

Localizando Elementos da GUI

A localização de elementos no WebDriver é feita usando o botão “encontrarElemento(Por.localizador()”Método. A parte “localizador” do código é igual a qualquer um dos localizadores discutidos anteriormente no Selenium IDE capítulos desses tutoriais. Na verdade, é recomendado que você localize os elementos GUI usando IDE e, uma vez identificados com sucesso, exporte o código para o WebDriver.

Aqui está uma Selenium código de exemplo 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");
    	WebDriver driver = new 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);
}
}

Utilizou-se o getNomeTag() método 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 em Eclipsejanela do console.

Localizando Elementos da GUI

Resumo para localizar elementos

Variação Descrição Amostra
Por.className encontra elementos com base no valor do atributo “class” findElement(By.className(“someClassName”))
Por.cssSelector encontra elementos com base no mecanismo seletor CSS subjacente do driver findElement(Por.cssSelector(“entrada#email”))
Por.id localiza elementos pelo valor de seu atributo “id” findElement(By.id(“algumId”))
 
Por.linkText encontra um elemento de link pelo texto exato que ele exibe findElement(By.linkText(“REGISTRO”))
 
Por.nome localiza elementos pelo valor do atributo “nome” findElement(By.nome(“algumNome”))
 
Por.partialLinkText localiza elementos que contêm o texto do link fornecido findElement(By.partialLinkText(“REG”))
 
Por.tagName localiza elementos pelo nome da tag findElement(By.tagName(“div”))
 
Por.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 o uso de findElement(By.cssSelector())

By.cssSelector() não suporta o recurso “contém”. Considere o Selenium Código IDE abaixo –

Nota sobre o uso de findElement(By.cssSelector())

In Selenium IDE acima, todo o teste passou. Contudo no Selenium Script WebDriver abaixo, o mesmo teste gerou um erro porque o WebDriver não suporta a palavra-chave “contém” quando usado no método By.cssSelector().

Nota sobre o uso de findElement(By.cssSelector())

Comandos Comuns

Instanciando Elementos da Web

Em vez de usar a longa sintaxe “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.*”.

Instanciando Elementos da Web

Clicar em um elemento

Clicar é talvez a forma mais comum de interagir com os elementos da web. O click() método é usado para simular o clique de qualquer elemento. O seguinte Selenium Java exemplo mostra como click() foi usado para clicar em Mercury Botão “Entrar” dos passeios.

Clicar em um elemento

Os seguintes itens 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 estar 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()

Uso da amostra:

  • Ele abre automaticamente uma nova janela do navegador e busca a página que você especifica entre parênteses.
  • É a contrapartida de Selenium Comando “abrir” do IDE.
  • O parâmetro deve ser um Tanga objeto.
getTitle ()

Uso da amostra:

  • Não precisa de parâmetros
  • Busca o título da página atual
  • Os espaços em branco à esquerda e à direita são cortados
  • Retorna uma string nula se a página não tiver título
getPageSource()

Uso da amostra:

  • Não precisa de parâmetros
  • Retorna o código fonte da página como um valor String
getCurrentUrl()

Uso da amostra:

  • Não precisa de parâmetros
  • Busca a string que representa o URL atual que o navegador está visualizando
getText ()

Uso da amostra:

  • Busca o texto interno do elemento que você especifica

Comandos de navegação

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

navegar para()

Uso da amostra:

  • Ele abre automaticamente uma nova janela do navegador e busca a página que você especifica entre parênteses.
  • Faz exatamente a mesma coisa que o get() método.
navegar().atualizar()

Uso da amostra:

  • Não precisa de parâmetros.
  • Ele atualiza a página atual.
navegar().voltar()

Uso da amostra:

  • Não precisa de parâmetros
  • Leva você de volta uma página no histórico do navegador.
navegar().avançar()

Uso da amostra:

  • Não precisa de parâmetros
  • Avança uma página no histórico do navegador.

Fechando e saindo do navegador Windows

fechar()

Uso da amostra:

  • Não precisa de parâmetros
  • Ele fecha apenas a janela do navegador que o WebDriver está controlando no momento.
Sair()

Uso da amostra:

  • Não precisa de parâmetros
  • Fecha todas as janelas que o WebDriver abriu.

Fechando e saindo do navegador Windows

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

Fechando e saindo do navegador Windows

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

Fechando e saindo do navegador Windows

Mas se você usar quit(), todas as janelas serão fechadas – não apenas a janela pai. 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");
    	WebDriver driver = new FirefoxDriver();
        driver.get("http://www.popuptest.com/popuptest2.html");
        driver.quit();  // using QUIT all windows will close
    }
}

Alternando entre quadros

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

Alternando entre quadros

Esta página possui 3 frames cujos atributos “nome” estão indicados acima. Desejamos acessar o link “Obsoleto” circulado acima em amarelo. Para fazer isso, devemos primeiro instruir o WebDriver a mudar para o quadro “classFrame” usando o “switchTo().frame()” método. 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");  
		  	WebDriver driver = new FirefoxDriver();
	        driver.get("https://demo.guru99.com/selenium/deprecated.html");
	        driver.switchTo().frame("classFrame");
	        driver.findElement(By.linkText("Deprecated")).click();
	        driver.close(); 
	    }
}

Após executar este código, você verá que o quadro “classFrame” é levado para a página “API obsoleta”, o que significa que nosso código conseguiu acessar o link “Obsoleto”.

Alternando entre pop-ups Windows

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

Primeiro, vá para https://output.jsbin.com/usidix/1 e clique manualmente em “Ir!” botão lá e veja você mesmo o texto da mensagem.

Alternando entre pop-ups Windows

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

package 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");
        WebDriver driver = new 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 Eclipse console, observe que a mensagem de alerta impressa é:

Alternando entre pop-ups Windows

Espera

Existem dois tipos de espera.

  1. Espera implícita – usada para definir o tempo de espera padrão durante todo o programa
  2. Espera explícita – usada para definir o tempo de espera apenas para uma instância específica

Espera implícita

  • É mais simples codificar do que 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.

Espera implícita

Em seguida, na parte de instanciação do seu código, adicione isto.

Espera implícita

Espera explícita

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

-

Importe estes dois pacotes:

Espera explícita

-

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

Espera explícita

-

Use myWaitVar com ExpectedConditions em partes onde você precisa que a espera explícita ocorra. Neste caso, usaremos espera explícita no “nome de usuário” (Mercury Tours HomePage) antes de digitarmos o texto “tutorial” nela.

Espera explícita

Condições

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

  • está ativado() é usado quando você deseja verificar se um determinado elemento está habilitado ou não antes de executar um comando.

Condições isEnabled()

  • é exibido() é usado quando você deseja verificar se um determinado elemento é exibido ou não antes de executar um comando.

Condições isDisplayed()

  • é selecionado() é usado quando você deseja verificar se um determinado caixa de seleção, botão de opção ou opção em uma caixa suspensa é selecionado. Não funciona em outros elementos.

Condições isSelected()

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() do WebDriverWait.

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

  • alertIsPresent() – espera até que uma caixa de alerta seja exibida.

Usando ExpectedConditions alertIsPresent()

  • elementToBeClickable() – Aguarda até que um elemento esteja visível e, ao mesmo tempo, habilitado. A amostra Selenium O código abaixo irá esperar até que o elemento com id=”username” se torne visível e habilitado antes de atribuir esse elemento como uma variável WebElement chamada “txtUserName”.

Usando Condições Esperadas

  • frameToBeAvailableAndSwitchToIt() – Aguarda até que o quadro fornecido já esteja disponível e depois alterna automaticamente para ele.

Usando ExpectedConditions elementToBeClickable()

Captura de exceções

Ao usar isEnabled(), isDisplayed() e isSelected(), o WebDriver assume que o elemento já existe na página. Caso contrário, lançará um 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("username"));
try{
        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”.

Captura de exceções

Resumo

  • Para começar a usar a API WebDriver, você deve importar pelo menos esses dois pacotes.
  • org.openqa.selenium.*
  • org.openqa.selenium.firefox.FirefoxDirigir
  • O get() método é o equivalente a Selenium Comando “abrir” do IDE.
  • A localização de elementos no WebDriver é feita usando o findElement() método.
  • A seguir estão as opções disponíveis para localização de elementos no WebDriver:
  • Por.className
  • Por.cssSelector
  • Por.id
  • Por.linkText
  • Por.nome
  • Por.partialLinkText
  • Por.tagName
  • Por.xpath
  • O By.cssSelector() não apoiar o “contém” recurso.
  • Você pode instanciar um elemento usando a classe WebElement.
  • Clicar em um elemento é feito usando o click() método.
  • WebDriver fornece estes comandos get úteis:
  • get()
  • getTitle ()
  • getPageSource()
  • getCurrentUrl()
  • getText ()
  • WebDriver fornece estes 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 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.
  • O switchTo().frame() e pela switchTo().alert() métodos são usados ​​para direcionar o foco do WebDriver para um quadro ou alerta, respectivamente.
  • Implicit waits são usados ​​para definir o tempo de espera ao longo do programa, enquanto explicit waits são usados ​​apenas em porções específicas.
  • Você pode usar isEnabled(), isDisplayed(),isSelected() e uma combinação de WebDriverEspere e pela Condições esperadas métodos ao verificar o estado de um elemento. Porém, eles não verificam se o elemento não existe.
  • Quando isEnabled(), isDisplayed() ou isSelected() foi chamado enquanto o elemento não existia, o WebDriver lançará um NoSuchElementException.
  • Quando os métodos WebDriverWait e ExpectedConditions eram chamados enquanto o elemento não existia, o WebDriver lançaria um TimeoutException.

Nota:

driver.get(): Este método é usado para navegar para um site específico. No entanto, ele não mantém o histórico do navegador ou cookies. Como resultado, os botões de avançar e voltar não funcionarão, e clicar neles não agendará a navegação da página.

driver.navigate(): Este método também é usado para navegar para um site específico, mas mantém o histórico do navegador e os cookies. Isso permite que os botões de avançar e voltar sejam usados ​​para navegação entre páginas durante a codificação de um caso de teste.