logar fora do dom ‐ autentiticar usuario de rede fora do dom utilizando um robo - sandersbr/automacao-selenium GitHub Wiki
- robô simples
- robô complexo
- robô que armazena login e senha em uma variável e cola ao invés de digitas
1. robô simples
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.awt.Robot;
import java.awt.event.KeyEvent;
public class FormularioTest {
@Test
public void TestarElementosDoFormulario() throws Exception {
System.setProperty("webdriver.chrome.driver", "C:/driver/chromedriver.exe");
WebDriver navegador = new ChromeDriver();
navegador.get("https://the-internet.herokuapp.com/basic_auth");
// Aguarda um pouquinho para o popup aparecer
Thread.sleep(2000);
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_A);
robot.keyRelease(KeyEvent.VK_A);
robot.keyPress(KeyEvent.VK_D);
robot.keyRelease(KeyEvent.VK_D);
robot.keyPress(KeyEvent.VK_M);
robot.keyRelease(KeyEvent.VK_M);
robot.keyPress(KeyEvent.VK_I);
robot.keyRelease(KeyEvent.VK_I);
robot.keyPress(KeyEvent.VK_N);
robot.keyRelease(KeyEvent.VK_N);
// Pressiona Tab para ir para o campo de senha
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
robot.keyPress(KeyEvent.VK_A);
robot.keyRelease(KeyEvent.VK_A);
robot.keyPress(KeyEvent.VK_D);
robot.keyRelease(KeyEvent.VK_D);
robot.keyPress(KeyEvent.VK_M);
robot.keyRelease(KeyEvent.VK_M);
robot.keyPress(KeyEvent.VK_I);
robot.keyRelease(KeyEvent.VK_I);
robot.keyPress(KeyEvent.VK_N);
robot.keyRelease(KeyEvent.VK_N);
// Pressiona Enter
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
}
}
2. robô complexo
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;
public class CadastrarConvenioBancarioTest {
/*
* - incluir a anotação @Test e incluir o import se necessário;
* - criar metodo de test
* exemplo
* testCalcularValorCorreto
* test[NomeDaClasseOuMetodo]_[CasoDeTeste]
* abrir e fechar chaves
*
* - informar o diretório do chromedriver.exe
* - instanciar o navegador chrome e incluir o import se necessário;
* - informar a url dos site ou arquivo que irá acessar
* - chamar o robot para realizar a autenticacao de rede
* armazena o usuario
* armazena a senha
* cria o metodo para digitar
* digita o usuario
* pressiona o tab
* despressiona o tab
* digita a senha
* pressiona o tab
* despressiona o tab
* pressione o enter
* despressiona o enter *
* - chamar o driver ralizar a realizar a autenticação no sistema
* procura o elemento pelo atributo e incluir o import se necessário, e escreve;
* procura o elemento pelo atributo e incluir o import se necessário, e escreve;
*
*
*
* acessar a url
*/
WebDriver driver;
@Before
public void SetUp() throws AWTException, InterruptedException {
// Caminho para o chromedriver. O código abaixo deve ser ajustado para o local correto do seu chromedriver.
System.setProperty("webdriver.chrome.driver","C:/driver/chromedriver.exe");
// Inicializa o WebDriver para o Chrome
driver = new ChromeDriver();
// Espera implicita de 5 segundos
// O controlador deve sondar a página até que o elemento tenha sido encontrado ou este tempo limite expire antes de lançar uma NoSuchElementException.
driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
// Acessa a página de login do sistema
//driver.get("https://grpforfcprodmirror.sefin.fortaleza.ce.gov.br/grpforfc/");
driver.get("http://localhost:8080/grpforfc/");
driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
//-------------------------------------------------------------------------------------------
// AUTENTICAÇÃO DE REDE - informar login e senha de rede
//-------------------------------------------------------------------------------------------
// Inicializa o objeto Robot, que será usado para simular as ações do teclado
Robot robot = new Robot();
// Defina o nome de usuário e senha para autenticação
String usuario = "t0665773";
String senha = "#S@ndersbr12";
// Digita o nome de usuário no campo de autenticação
digitar(robot, usuario);
// Pressiona TAB para mover o foco para o campo de senha
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
Thread.sleep(1000); // Dá um tempo para o foco mudar
// Digita a senha no campo de autenticação
digitar(robot, senha);
// Pressiona TAB para mover o foco para o botão "Fazer login"
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
Thread.sleep(500);
// Pressiona ENTER para submeter o formulário de login
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
// Espera a resposta do sistema (tempo suficiente para login ser processado)
Thread.sleep(3000);
//-------------------------------------------------------------------------------------------
// realizar autenticação do sistema
// informar login e senha de rede
//-------------------------------------------------------------------------------------------
}
@After
public void tearDown() {
//Fechar o navegador
//driver.quit();
}
@Test
public void test(){
// informa o login do usuario do sistema
driver.findElement(By.id("username")).sendKeys("66969050300");
// informa a senha do usuario do sistema
driver.findElement(By.id("password")).sendKeys("@dmin123");
// clica no botão entrar (para inicia autenticação do usuário informado)
driver.findElement(By.id("botao-entrar")).click();
// Selecionar uma unidade funcional
/*
* o elemento é um combobox (caixa de seleção html)
* o elemento é localizado, é identificado e coletato o atributo único (no caso o id)
* é instanciado um objeto Select em que no construto foi passado o combo
* em seguida selecionado a opção do combo (caixa de seleção html)
*/
WebElement elemento = driver.findElement(By.id("formSelecionarUnidadeFuncional:unidadeFuncionalDecorate:uf"));
Select combo = new Select(elemento);
//combo.selectByIndex(2);
//combo.selectByValue("superior");
combo.selectByVisibleText("SEFIN - CEDES");
//combo.selectByVisibleText("SEFIN - ATENDTRIB");
driver.findElement(By.id("formSelecionarUnidadeFuncional:unidadeFuncionalDecorate:botaoSelecionarUnidade")).click();
//cadastro basico // //*[@id="formMenuTopo:menuCadastrosBasicos:cadastrosBasicos"]/div[1]
//convenio bancario
}
//---------------------------------------------------------------------------------------------
// ABAIXO: FUNÇÕES
//---------------------------------------------------------------------------------------------
// Função para digitar o texto utilizando o Robot
private void digitar(Robot robot, String texto) throws InterruptedException {
// Itera sobre cada caractere do texto fornecido
for (char c : texto.toCharArray()) {
switch (c) {
// Processa os caracteres especiais que requerem SHIFT (ex: !, @, #, etc.)
case '!':
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_1);
robot.keyRelease(KeyEvent.VK_1);
robot.keyRelease(KeyEvent.VK_SHIFT);
break;
case '@':
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_2);
robot.keyRelease(KeyEvent.VK_2);
robot.keyRelease(KeyEvent.VK_SHIFT);
break;
case '#':
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_3);
robot.keyRelease(KeyEvent.VK_3);
robot.keyRelease(KeyEvent.VK_SHIFT);
break;
case '$':
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_4);
robot.keyRelease(KeyEvent.VK_4);
robot.keyRelease(KeyEvent.VK_SHIFT);
break;
case '%':
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_5);
robot.keyRelease(KeyEvent.VK_5);
robot.keyRelease(KeyEvent.VK_SHIFT);
break;
case '&':
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_7);
robot.keyRelease(KeyEvent.VK_7);
robot.keyRelease(KeyEvent.VK_SHIFT);
break;
case '*':
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_8);
robot.keyRelease(KeyEvent.VK_8);
robot.keyRelease(KeyEvent.VK_SHIFT);
break;
case '(':
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_9);
robot.keyRelease(KeyEvent.VK_9);
robot.keyRelease(KeyEvent.VK_SHIFT);
break;
case ')':
// Quando pressionado SHIFT + 0, exibe o caractere ')'
robot.keyPress(KeyEvent.VK_SHIFT);
robot.keyPress(KeyEvent.VK_0);
robot.keyRelease(KeyEvent.VK_0);
robot.keyRelease(KeyEvent.VK_SHIFT);
break;
case '0':
// Corrigido: digita '0' sem SHIFT
robot.keyPress(KeyEvent.VK_0);
robot.keyRelease(KeyEvent.VK_0);
break;
// Processa os caracteres especiais 'ç' e 'Ç' utilizando teclas ALT
case 'ç':
digitarCedilhaMinusculo(robot);
break;
case 'Ç':
digitarCedilhaMaiusculo(robot);
break;
// Processa os demais caracteres (alfabéticos e números)
default:
boolean upperCase = Character.isUpperCase(c);
int keyCode = KeyEvent.getExtendedKeyCodeForChar(c);
// Verifica se o código da tecla é indefinido
if (keyCode == KeyEvent.VK_UNDEFINED) {
throw new RuntimeException("Não sei digitar o caractere: " + c);
}
// Se o caractere for maiúsculo, pressiona SHIFT antes
if (upperCase) {
robot.keyPress(KeyEvent.VK_SHIFT);
}
robot.keyPress(keyCode);
robot.keyRelease(keyCode);
// Solta o SHIFT se for maiúsculo
if (upperCase) {
robot.keyRelease(KeyEvent.VK_SHIFT);
}
break;
}
// Pausa entre cada caractere digitado para evitar problemas de sincronização
Thread.sleep(100);
}
}
// Digita o 'ç' minúsculo utilizando ALT + código numérico (0231)
private void digitarCedilhaMinusculo(Robot robot) throws InterruptedException {
robot.keyPress(KeyEvent.VK_ALT);
digitarNumPad(robot, 0);
digitarNumPad(robot, 2);
digitarNumPad(robot, 3);
digitarNumPad(robot, 1);
robot.keyRelease(KeyEvent.VK_ALT);
Thread.sleep(200);
}
// Digita o 'Ç' maiúsculo utilizando ALT + código numérico (0199)
private void digitarCedilhaMaiusculo(Robot robot) throws InterruptedException {
robot.keyPress(KeyEvent.VK_ALT);
digitarNumPad(robot, 0);
digitarNumPad(robot, 1);
digitarNumPad(robot, 9);
digitarNumPad(robot, 9);
robot.keyRelease(KeyEvent.VK_ALT);
Thread.sleep(200);
}
// Função auxiliar para digitar um número no teclado numérico (usado para os caracteres especiais como ç e Ç)
private void digitarNumPad(Robot robot, int numero) throws InterruptedException {
int keyCode;
switch (numero) {
case 0: keyCode = KeyEvent.VK_NUMPAD0; break;
case 1: keyCode = KeyEvent.VK_NUMPAD1; break;
case 2: keyCode = KeyEvent.VK_NUMPAD2; break;
case 3: keyCode = KeyEvent.VK_NUMPAD3; break;
case 4: keyCode = KeyEvent.VK_NUMPAD4; break;
case 5: keyCode = KeyEvent.VK_NUMPAD5; break;
case 6: keyCode = KeyEvent.VK_NUMPAD6; break;
case 7: keyCode = KeyEvent.VK_NUMPAD7; break;
case 8: keyCode = KeyEvent.VK_NUMPAD8; break;
case 9: keyCode = KeyEvent.VK_NUMPAD9; break;
default: throw new IllegalArgumentException("Número não suportado: " + numero);
}
robot.keyPress(keyCode);
robot.keyRelease(keyCode);
Thread.sleep(100);
}
}
3. robô que armazena login e senha em uma variável e cola ao invés de digitas
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.awt.*;
import java.awt.datatransfer.StringSelection;
import java.awt.event.KeyEvent;
public class FormularioTest {
public void colarComRobot(Robot robot, String texto) throws Exception {
// Copia a string para a área de transferência
StringSelection selecao = new StringSelection(texto);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selecao, null);
// Ctrl + V
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
Thread.sleep(500); // pausa para garantir que o texto seja colado
}
@Test
public void TestarElementosDoFormulario() throws Exception {
System.setProperty("webdriver.chrome.driver", "C:/driver/chromedriver.exe");
WebDriver navegador = new ChromeDriver();
navegador.get("https://the-internet.herokuapp.com/basic_auth");
Thread.sleep(2000); // Espera o popup
Robot robot = new Robot();
// Cola o usuário
colarComRobot(robot, "admin");
// Tab para ir para o campo de senha
robot.keyPress(KeyEvent.VK_TAB);
robot.keyRelease(KeyEvent.VK_TAB);
Thread.sleep(500);
// Cola a senha
colarComRobot(robot, "admin");
// Pressiona Enter
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
}
}