es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java Selenium cómo establecer una variable dinámica para un nuevo controlador.

Sé que en Java no es posible utilizar variables de bloques condicionales.
Pero no sé qué hacer. Cuando lo hago así, obtengo un error para el código después de las declaraciones if:

public static void startDriver(String preferredBrowser) throws Exception{
    WebDriver driver;

    if(preferredBrowser.equals("Firefox")){

    } 
    else if(preferredBrowser.equals("Edge")){

    }
    else{
        System.setProperty("webdriver.chrome.driver", driverPath);
        ChromeOptions options = new ChromeOptions();
        options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
        options.setExperimentalOption("useAutomationExtension", false);

        driver = new ChromeDriver(options);
    }
    driver.manage().window().maximize();
    driver.get(website);

}

Esto es lo que intenté para solucionarlo, pero ahora me abre dos controladores a la vez:

public static void startDriver(String preferredBrowser) throws Exception{
    System.setProperty("webdriver.chrome.driver", driverPath);
    WebDriver driver = new ChromeDriver();
    if(preferredBrowser.equals("Firefox")){

    } 
    else if( preferredBrowser.equals("Edge")){

    }
    else{
        System.setProperty("webdriver.chrome.driver", driverPath);
        ChromeOptions options = new ChromeOptions();
        options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
        options.setExperimentalOption("useAutomationExtension", false);

        driver = new ChromeDriver(options);
    }
    driver.manage().window().maximize();
    driver.get(website);

}

Espero que puedas ayudarme.

Saludos cordiales.

Christian

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, puedo sugerir que el problema con tu código es que estás declarando el objeto webdriver dentro de los bloques if-else, lo que provoca que esté fuera del alcance cuando intentas acceder a él más adelante. Tu segundo enfoque también es incorrecto, ya que estás inicializando el objeto webdriver dos veces, lo que provoca que se lancen dos instancias del controlador.

    Una solución para tu problema es declarar el objeto driver fuera de los bloques if-else y asignar su valor según el navegador preferido. Aquí tienes una versión actualizada de tu código:

    public static void startDriver(String preferredBrowser) throws Exception{
        WebDriver driver;
    
        if(preferredBrowser.equals("Firefox")){
            // Código para iniciar el controlador de Firefox aquí
        } 
        else if(preferredBrowser.equals("Edge")){
            // Código para iniciar el controlador de Edge aquí
        }
        else{
            System.setProperty("webdriver.chrome.driver",  driverPath);
            ChromeOptions options = new ChromeOptions();
            options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
            options.setExperimentalOption("useAutomationExtension", false);
    
            driver = new ChromeDriver(options);
        }
        driver.manage().window().maximize();
        driver.get(website);
    }
    

    ¡Espero que esto te ayude!

Comments are closed.