Primeiro Selenium Webdriver Script: JAVA exemplo de Código de Exemplo
Usando a classe Java “myclass” que criamos no tutorial anterior, vamos tentar criar um WebDriver script que:
- busca de Mercúrio Tours página inicial
- verifique se o seu título
- imprimir o resultado da comparação
- fechá-lo antes de terminar o programa inteiro.
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 Driver Web. Selênio 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, desclassifique para a versão 47 ou abaixo do Firefox. Alternativamente, você pode executar seus scripts no Chrome. O selénio funciona fora da caixa por cromado. Você só precisa mudar 3 linhas de código para fazer o script funcionar com o Chrome ou o Firefox
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 = "http://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(); }}
Explicando o código
Para começar, você precisa importar os seguintes dois pacotes:
- org.openqa.selenio.* – contém a classe de WebDriver necessária para instanciar um novo navegador carregado com um driver específico
- org.openqa.selenio.graca.FirefoxDriver-contém a classe de FirefoxDriver necessária para instanciar um driver específico do Firefox no navegador instanciado pela classe de WebDriver
Se o seu teste necessitar de acções mais complicadas, como o acesso a outra classe, A captura de imagens do navegador ou a manipulação de ficheiros externos, terá definitivamente de importar mais pacotes.
instanciando objetos e variáveis
normalmente, é assim que um objeto condutor está instanciado.
a FirefoxDriver class with no parameters means that the default Firefox profile will be launched by our Java program. O perfil predefinido do Firefox é semelhante ao lançamento do Firefox em modo seguro (não são carregadas extensões).
por conveniência, guardamos o URL de Base e o título esperado como variáveis.
lançar uma sessão de navegador
o método get() do WebDriver é usado para lançar uma nova sessão de navegador e direcioná-lo para o URL que você especifica como seu parâmetro.
Get Real Título da Página
O WebDriver classe possui o método getTitle() que é sempre usado para obter o título de página de página atualmente carregada.
Compare os valores esperados e reais
esta parte do código simplesmente usa uma estrutura básica Java if-else para comparar o título real com o esperado.
terminando uma sessão do navegador
o método” close () ” é usado para fechar a janela do navegador.
terminando o programa inteiro
Se você usar este comando sem fechar todas as janelas do navegador primeiro, todo o seu programa Java terminará ao deixar a janela do navegador aberta.
executando o teste
Existem duas maneiras de executar o código no IDE Eclipse.
- na barra de menu do Eclipse, carregue em Executar> executar.
- Carregue em Ctrl+F11 para executar todo o código.
Se você fez tudo corretamente, o Eclipse saída seria “Teste Passado!”
Localizar Elementos da GUI
a Localização de elementos em WebDriver é feito usando o “findElement(Por.locator () ” method. A parte “localizador” do código é a mesma que qualquer um dos localizadores anteriormente discutidos nos capítulos de selênio IDE destes tutoriais. Na verdade, é recomendado que você localize elementos GUI usando IDE e uma vez identificado com sucesso exportar o código para WebDriver.
Aqui está um código de amostra de selênio 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);}}
we used the getTagName() method to extract the tag name of that particular element whose id is “email”. Quando executado, este código deve ser capaz de identificar corretamente o nome da tag “input” e vai imprimi-lo na janela da consola do Eclipse.
Resumo para a localização de elementos
Variação | Descrição | Exemplo |
---|---|---|
Por.className | encontra elementos baseados no valor do atributo” class “ | findElement(By.className (“someClassName”) |
By.cssSelector | encontra elementos baseados no motor de seletor de CSS subjacente do driver | findElement(By.cssSelector(“input#email”)) |
Por.id | localiza elementos pelo valor de seu atributo “id” | findElement(Por.identificação(“someId”)) |
Por.linkText | encontra um elemento de ligação pelo texto exato que exibe | findElement(By.linkText(“CADASTRO”)) |
Por.nome | localiza elementos pelo valor de “nome” atributo | findElement(Por.name(“someName”)) |
By.partialLinkText | locates elements that contain the given link text | findElement(By.partialLinkText(“REG”)) |
By.tagName | locates elements by their tag name | findElement(By.tagName(“div”)) |
By.xpath | locates elements via XPath | findElement(By.xpath(“//html/corpo/div/tabela/tbody/tr/td/tabela/ tbody/tr/td/tabela/tbody/tr/td/tabela/tbody/tr/td/ form/tabela/tbody/tr”)) |
Nota sobre a Utilização do findElement(Por.cssSelector ()
By.o cssSelector () não suporta o recurso “contains”. Considere o Selenium IDE de código abaixo
No Selenium IDE acima, todo o teste passou. No entanto, no script do WebDriver selênio abaixo, o mesmo teste gerou um erro porque o WebDriver não suporta a palavra-chave “contém” quando usado no By.método cssSelector ().
Comandos Comuns
Instanciar Elementos da Web
em Vez de usar o longa “driver.findElement (By.Localizador ()) ” sintaxe cada vez que você vai acessar um elemento em particular, podemos instanciar um objeto WebElement para ele. A classe WebElement está contida na ” org.openqa.selenio.*” pacote.
Clicar em um Elemento
Clicar é, talvez, a forma mais comum de interagir com elementos da web. O método click() é usado para simular o Click de qualquer elemento. O seguinte exemplo de Java de selênio mostra como click () foi usado para clicar no botão “Sign-In” da Mercury Tours.
a seguir as coisas devem ser anotadas ao usar o método click ().
- não toma nenhum parâmetro / argumento.
- o método espera automaticamente que uma nova página seja carregada, se aplicável.
- o elemento a carregar deve ser visível (a altura e a largura não devem ser iguais a zero).
obter comandos
obter comandos obter várias informações importantes sobre a página/elemento. Aqui estão alguns comandos “get” importantes que você deve estar familiarizado com.
Comandos | de Uso |
---|---|
get() Exemplo de uso: |
|
getTitle() utilização de amostras: |
|
getPageSource() Exemplo de uso: |
|
getCurrentUrl() Exemplo de uso: |
|
getText() Exemplo de uso: |
|
Navegar comandos
Estes comandos permitem que você atualizar go-no e alternar entre diferentes páginas da web.
navegar().para () utilização da amostra: |
|
navegar ().refresh () Utilização da amostra: |
|
navegar ().back () Sample usage: |
|
navegar ().forward () Sample usage: |
|
Fechar e fechar Janelas do Navegador
close() Exemplo de uso: |
|
quit() Utilização da amostra: |
|
Para ilustrar claramente a diferença entre fechar() e quit(), tentar executar o código abaixo. Ele usa uma página web que automaticamente aparece uma janela em cima da carga da página e abre outra depois de sair.
Notice that only the parent browser window was closed and not the two pop-up windows.
mas se você usar quit(), todas as janelas serão fechadas – não apenas a original. Tente executar o código abaixo e você vai notar que os dois pop-ups acima serão automaticamente fechados também.
alternando entre quadros
para acessar elementos GUI em uma moldura, devemos primeiro direcionar WebDriver para focar na moldura ou janela pop-up primeiro antes de podermos acessar elementos dentro deles. Tomemos, por exemplo, a página da web http://demo.guru99.com/selenium/deprecated.html
Esta página tem 3 quadros cujo “nome” atributos são indicados acima. Queremos aceder à ligação “obsoleta” rodeada em amarelo. A fim de fazer isso, devemos primeiro instruir WebDriver para mudar para o quadro “classFrame” usando o “switto().frame () ” method. Usaremos o atributo nome do frame como parâmetro para a parte “frame ()”.
Depois de executar este código, você verá que o quadro” classFrame “é levado para a página” API depreciada”, o que significa que o nosso código foi capaz de acessar com sucesso o link” obsoleto”.
alternar entre janelas Pop-up
WebDriver permite que janelas pop-up como alertas sejam exibidos, ao contrário do selênio IDE. Para acessar os elementos dentro do alerta (como a mensagem que ele contém), devemos usar o “switto ().alerta () ” método. No código abaixo, vamos utilizar este método para acessar a caixa de alerta e, em seguida, recuperar a sua mensagem utilizando o “getText()” método e, em seguida, fechar automaticamente a caixa de alerta usando o “switchTo().alerta().accept () ” method.
primeiro, dirija-se parahttp://jsbin.com/usidix/1 e clique manualmente no “Go!”abotoe aí e veja por si mesmo o texto da mensagem.
Vamos ver o Selênio exemplo de código 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")).click(); alertMessage = driver.switchTo().alert().getText(); driver.switchTo().alert().accept(); System.out.println(alertMessage); driver.quit(); }}
No console do Eclipse, observe que o impresso mensagem de alerta é:
Aguarda
Existem dois tipos de espera.
- Implícito aguarde – usado para definir o padrão de tempo de espera durante o programa
- Explícito aguarde – usado para definir o tempo de espera para uma determinada instância apenas
Implícito Espera
- é mais simples do que Explícito Espera.é geralmente declarado na parte instanciação do Código.
- você só precisará de um pacote adicional para importar.
para começar a usar uma espera implícita, terá de importar Este pacote para o seu código.
então na parte de instanciação do seu código, adicione isto.
Explicit Wait
Explicit waits are done using the WebDriverWait and ExpectedCondition classes. Para o seguinte exemplo do WebDriver selênio, vamos esperar até 10 segundos para que um elemento cujo id é o “utilizador” se torne visível antes de avançar para o próximo comando. Aqui estão os degraus.
Passo 1
importar estas duas embalagens:
Step 2
Declare a WebDriverWait variable. Neste exemplo, vamos usar “myWaitVar” como o nome da variável.
Step 3
Use myWaitVar with Expectedcondições em porções onde você precisa da espera explícita para ocorrer. Neste caso, vamos usar a entrada “username” (HomePage Mercury Tours) para digitar o texto “tutorial” nele.
Condições
Seguintes métodos são usados em condicional e o ciclo de operações —
- isEnabled() é usado quando você deseja verificar se um determinado elemento está ou não habilitado, 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 opção ou uma opção em uma caixa drop-down está selecionado. Não funciona com outros elementos.
Usando ExpectedConditions
O ExpectedConditions classe oferece um amplo conjunto de condições que você pode usar em conjunto com WebDriverWait até() método.
abaixo estão alguns dos métodos mais comuns de condições esperadas.
- alertIsPresent () – espera até que seja apresentada uma caixa de alerta.
- elementToBeClickable() – Aguarda até que um elemento é visível e, ao mesmo tempo, ativado. O código de selênio da amostra abaixo irá esperar até que o elemento com para se tornar visível e ativado primeiro antes de atribuir esse elemento como uma variável de WebElement chamada “txtUserName”.
- frameToBeAvailableAndSwitchToIt() – Espera até que o pacote dado já está disponível e, em seguida, muda automaticamente para ele.
a Captura de Exceções
Ao usar isEnabled(), isDisplayed(), e isSelected(), WebDriver pressupõe que o elemento já existe na página. Caso contrário, lançará uma excepção ao Nosuchelement. Para evitar isso, devemos usar um bloqueio de tentativa 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 waits explícitos, o tipo de exceção que você deve pegar é o “TimeoutException”.
Summary
- Para começar a usar a API do WebDriver, você deve importar pelo menos estes dois pacotes.
- org.openqa.selenio.*
- org.openqa.selenio.graca.FirefoxDriver
- The get () method is the equivalent of Selenium IDE’s “open” command.
- localização de elementos no WebDriver é feito usando o método findElement ().
- as seguintes opções estão disponíveis para localizar elementos no WebDriver:
- By.className
- By.cssSelector
- Por.id
- Por.linkText
- By.name
- By.partialLinkText
- By.tagName
- By.xpath
- The By.o cssSelector () não suporta o recurso “contains”.
- pode instanciar um elemento usando a classe WebElement.
- clicar em um elemento é feito usando o método click ().
- WebDriver fornece estes comandos get úteis:
- get()
- getTitle()
- getPageSource()
- getCurrentUrl()
- getText()
- WebDriver provides these useful navigation commands
- navigate().forward()
- navigate().back()
- navigate().to()
- navigate().refresh()
- The close() and quit() methods are used to close browser windows. Close() é usado para fechar uma única janela; enquanto quit () é usado para fechar todas as janelas associadas à janela pai que o objeto WebDriver estava controlando.
- a mudança().frame () e switto ().métodos de alerta() são usados para direcionar o foco do WebDriver para uma moldura ou alerta, respectivamente.
- waits implícitos são usados para definir o tempo de espera ao longo do programa, enquanto waits explícitos são usados apenas em porções específicas.
- Você pode usar o isEnabled (), isdesplayed (), isSelected (), e uma combinação de WebDriverWait e métodos de condições esperadas ao verificar o estado de um elemento. No entanto, não verificam se o elemento não existe.quando isEnabled (), is displayed (), or isSelected () was called while the element was not existing, WebDriver will throw a Nouchelementexception.
- Quando o WebDriverWait e os métodos de condições esperadas foram chamados enquanto o elemento não existia, o WebDriver lançaria uma excepção Temporal. nota:
condutor.obter() : É usado para ir para o site em particular, mas não mantém o histórico do navegador e cookies por isso , não podemos usar o botão para a frente e para trás , se clicarmos sobre isso, a página não vai obter o driver schedule
driver.navegar (): é usado para ir ao site em particular, mas mantém o histórico do navegador e cookies, para que possamos usar o botão para frente e para trás para navegar entre as páginas durante a codificação do Testcase
Leave a Reply