‐ o codigo está operacional ‐ robo que faz autenticação de rede no browser e autenticação na página web - sandersbr/automacao-selenium GitHub Wiki
// AUTENTICOU PRODMIRROR COM USUARIO DE REDE COM SUCESSO.
// OBSERVAÇÃO: ACEITA Çç E OS CARACTERES !@#$%&*()
// OU SEJA, EXCETO O CARACTERE ESPECIAL DO NÚMERO 6 DA PARTE SUPERIOR DO TECLADO.
// MELHORIAS A FAZER
// TIRAR USUARIO E SENHA DO CÓDIGO
// CABE PARA AUTENTICACAO DE REDE DEVIDO ACESSO AO AMBIENTE PRODMIRROR
// CABE PARA AUTENTICAÇÃO DO GRPFOR
// VER COM ALGUÉM UMA FORMA POIS NO D1 A SENHA É FIXA E NO MASTER MUDA PERIODICAMENTE
// SIMULAR NO LOCALHOST, ESPERA-SE QUE SEJA COMO NO D1
// PESQUISE ENTRADA DE DADOS PARA LOCALIZAR CADA CAMPO DE ENTRADA
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.awt.*;
import java.awt.event.KeyEvent;
public class AutenticacaoComRobotTest {
@Test
public void autenticarComRobot() 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", "CAMINHO_PARA_SEU_CHROMEDRIVER");
System.setProperty("webdriver.chrome.driver", "c:\\driver\\chromedriver.exe"); // ENTRADA DE DADOS
// Inicializa o WebDriver para o Chrome
WebDriver driver = new ChromeDriver();
// Acessa a página de login do sistema
driver.get("https://grpforprodmirror.sefin.fortaleza.ce.gov.br/grpfor/"); // ENTRADA DE DADOS
// Dá um tempo para o balão de autenticação carregar
Thread.sleep(3000);
// 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
// PONTO QUE PRECISA RECEBER UMA MELHORIA
// Exemplo: String usuario = "000AaBbCcÇç1!2@3#4$5%67&8*9(0)r2000)))";
String usuario = "t0000000"; // Preencher com seu usuário exemplo "t...AbBbCcÇç1!2@3#4$5%67&8*9(0)" // ENTRADA DE DADOS
String senha = "AbBbCcÇç1!2@3#4$5%67&8*9(0)"; // Preencher com sua senha "AbBbCcÇç1!2@3#4$5%67&8*9(0)" // ENTRADA DE DADOS
// 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(5000);
//-------------------------------------------------------------------------------------
//campo CPF, elemento input, id="username"
//campo Senha, elemento input, id="password"
//botão Entrar, elemento input id="botao-entrar"
// PONTO QUE PRECISA RECEBER UMA MELHORIA
driver.findElement(By.id("username")).sendKeys("11111111111"); // ENTRADA DE DADOS
driver.findElement(By.id("password")).sendKeys("@dmin123"); // ENTRADA DE DADOS
driver.findElement(By.id("botao-entrar")).click();
}
//---------------------------------------------------------------------------------------------
// 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);
}
//---------------------------------------------------------------------------------------------
// FIM DA CLASSE
//---------------------------------------------------------------------------------------------
}