‐ 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
//---------------------------------------------------------------------------------------------    
}