Os formulários são os elementos fundamentais da web para receber informações dos visitantes do site. Os formulários da web têm diferentes elementos de GUI, como caixas de texto, campos de senha, caixas de seleção, botões de opção, menus suspensos, entradas de arquivo, etc.
Veremos como acessar esses diferentes elementos de formulário usando Selenium Web Driver com Java. O Selenium encapsula cada elemento do formulário como um objeto de WebElement. Ele fornece API para encontrar os elementos e agir sobre eles, como inserir texto em caixas de texto, clicar nos botões, etc. Veremos os métodos que estão disponíveis para acessar cada elemento do formulário.
Neste tutorial, veremos como identificar os seguintes elementos de formulário
- Introdução ao WebElement, findElement (), findElements ()
- Caixa de entrada
- Inserindo Valores em Caixas de Entrada
- Exclusão de valores em caixas de entrada
- Botões
- Botões de envio
- Código Completo
- Solução de problemas
Introdução ao WebElement, findElement (), findElements ()
Selenium Web Driver encapsula um elemento de formulário simples como um objeto de WebElement.
Existem várias técnicas pelas quais o WebDriver identifica os elementos do formulário com base nas diferentes propriedades dos elementos da Web, como ID, Nome, Classe, XPath, Tagname, Seletores CSS, Texto do link, etc.
O Web Driver fornece os dois métodos WebElement a seguir para localizar os elementos.
- findElement () - encontra um único elemento da web e retorna como um objeto WebElement Selenium.
- findElements () - retorna uma lista de objetos WebElement que correspondem aos critérios do localizador.
Vamos ver os trechos de código para obter um único elemento - Campo de texto em uma página da web como um objeto de WebElement usando o método findElement (). Cobriremos o método findElements () de localização de vários elementos em tutoriais subsequentes.
Etapa 1: Precisamos importar este pacote para criar objetos de Web Elements
Etapa 2: precisamos chamar o método findElement () disponível na classe WebDriver e obter um objeto de WebElement.
Consulte abaixo para ver como isso é feito.
Caixa de entrada
As caixas de entrada referem-se a um destes dois tipos:
- Campos de texto - caixas de texto de entrada do Selenium que aceitam valores digitados e os mostram como são.
- Campos de senha - caixas de texto que aceitam valores digitados, mas os mascaram como uma série de caracteres especiais (geralmente pontos e asteriscos) para evitar a exibição de valores confidenciais.
Localizadores
O método findElement () pega um parâmetro que é um localizador para o elemento. Localizadores diferentes como By.id (), By.name (), By.xpath (), By.CSSSelector () etc. localizam os elementos na página usando suas propriedades como id``````, nome ou caminho, etc.
Você pode usar plug-ins como Fire path para obter ajuda para obter o id, xpath, etc. dos elementos.
Usando o site de exemplo http://demo.guru99.com/test/login.html fornecido abaixo está o código para localizar o campo de texto "Endereço de e-mail" usando o localizador de id e o campo "Senha" usando o localizador de nome.
- O campo de texto do e-mail está localizado por Id
- O campo de senha está localizado por nome
sendkeys em Selenium
sendkeys () no Selenium é um método usado para inserir conteúdo editável nos campos de texto e senha durante a execução do teste. Esses campos são identificados por localizadores como nome, classe, id, etc. É um método disponível no elemento web. Ao contrário do método type, o método sendkeys () não substitui o texto existente em nenhuma caixa de texto.
Inserindo Valores em Caixas de Entrada
Para inserir texto nos campos de texto e campos de senha, sendKeys () é o método disponível no WebElement no Selenium.
Usando o mesmo exemplo do site http://demo.guru99.com/test/login.html, aqui está como encontramos os campos Texto e Senha e inserimos texto no Selenium.
- Encontre o campo de texto "Endereço de e-mail" usando o localizador de id.
- Encontre o campo "Senha" usando o localizador de nome
- Digite o texto no "Endereço de e-mail" usando o método sendkeys do Selenium.
- Insira uma senha no campo "Senha" usando o método sendKeys ().
Exclusão de valores em caixas de entrada
O método clear () é usado para excluir o texto em uma caixa de entrada. Este método não precisa de um parâmetro . O snippet de código abaixo limpará o texto dos campos E-mail ou Senha
Botões
O botão de clique Selenium pode ser acessado usando o método click ().
No exemplo acima
- Encontre o botão para fazer login
- Clique no botão "Sign-in" na página de login do site para fazer login no site.
Botões de envio
Os botões de envio são usados para enviar todo o formulário ao servidor. Podemos usar o método click () no elemento da web como um botão normal, como fizemos acima, ou usar o método submit () em qualquer elemento da web no formulário ou no próprio botão de envio.
Quando submit () é usado, o WebDriver procura o DOM para saber a qual formulário o elemento pertence e, em seguida, aciona sua função de envio.
Código Completo
Aqui está o código de trabalho completo
import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium. *;public class Form {public static void main (String [] args) {// declaração e instanciação de objetos / variáveisSystem.setProperty ("webdriver.chrome.driver", "G: \\ chromedriver.exe");Driver WebDriver = novo ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/login.html";driver.get (baseUrl);// Obtenha o WebElement correspondente ao endereço de e-mail (TextField)WebElement email = driver.findElement (By.id ("email"));// Obtenha o WebElement correspondente ao campo de senhaSenha WebElement = driver.findElement (By.name ("passwd"));email.sendKeys (" Este endereço de e-mail está protegido contra spambots. Você precisa de Javascript habilitado para vê-lo.");password.sendKeys ("abcdefghlkjl");System.out.println ("Conjunto de campos de texto");// Excluindo valores na caixa de textoemail.clear ();password.clear ();System.out.println ("Campo de texto limpo");// Encontre o botão de envioWebElement login = driver.findElement (By.id ("SubmitLogin"));// Usando o método de clique para enviar o formulárioemail.sendKeys (" Este endereço de email está protegido contra spambots. Você precisa de JavaScript habilitado para vê-lo."); password.sendKeys ("abcdefghlkjl"); login.click (); System.out.println ("Login feito com clique"); // usando o método de envio para enviar o formulário. Enviar usado no campo de senha driver.get (baseUrl); driver.findElement (By.id ("email")). sendKeys (" Este endereço de email está protegido contra spambots. Você deve habilitar o JavaScript para visualizá-lo."); driver.findElement (By.name ("passwd")). sendKeys ("abcdefghlkjl"); driver.findElement (By.id ("SubmitLogin")). submit (); System.out.println ("Login concluído com envio"); //driver.close (); }}
Solução de problemas
Se você encontrar NoSuchElementException () ao localizar elementos, significa que o elemento não foi encontrado na página no ponto em que o driver da Web acessou a página.
- Verifique seu localizador novamente usando Firepath ou Inspecionar elemento no Chrome.
- Verifique se o valor que você usou no código é diferente daquele para o elemento no Firepath agora.
- Algumas propriedades são dinâmicas para poucos elementos. No caso, você achar que o valor é diferente e está mudando dinamicamente, considere usar By.xpath () ou By.cssSelector () que são maneiras mais confiáveis, mas complexas.
- Às vezes, pode ser um problema de espera também, ou seja, o driver da Web executou seu código antes mesmo de a página carregar completamente etc.
- Adicione uma espera antes de findElement () usando esperas implícitas ou explícitas.
Resumo
- A tabela abaixo resume os comandos para acessar cada tipo de elemento discutido acima
Elemento | Comando | Descrição |
---|---|---|
Caixa de entrada | sendKeys () | usado para inserir valores em caixas de texto |
Claro() | usado para limpar as caixas de texto de seu valor atual | |
Links | clique() | usado para clicar no link e esperar a conclusão do carregamento da página antes de prosseguir para o próximo comando. |
Botão de envio | enviar() |
- O WebDriver permite a seleção de mais de uma opção em um elemento SELECT múltiplo.
- Você pode usar o método submit () em qualquer elemento do formulário. O WebDriver acionará automaticamente a função de envio do formulário ao qual esse elemento pertence.