java selenium google-chrome selenium-chromedriver chrome-automation-extension

java - El administrador deshabilita la carga de extensiones desempaquetadas



selenium google-chrome (8)

El siguiente código funciona bien para mí chrome driver 2.41 y la versión del navegador 68.0.3440.84

public class patCheck { WebDriver driver; @Test public void f() { System.setProperty("webdriver.chrome.driver", "C://Users//shirish.nagar//Work//Selenium//Web//Drivers//chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("useAutomationExtension", false); driver = new ChromeDriver(options); driver.manage().window().maximize(); driver.get("https://www.google.com"); } }

Invoca con éxito el navegador Chrome sin ninguna ventana emergente de "cargando la extensión desempaquetada deshabilitada por el administrador"

Cuando ejecuto mi script de controlador web, obtengo un cuadro de diálogo de confirmación con el siguiente mensaje:

Error al cargar la extensión

No se pudo cargar la extensión desde ''C: / Users / username / AppData / Local / Temp / scoped_dir6312_32763 / internal''. El administrador deshabilita la carga de extensiones desempaquetadas.

¿Quieres volver a intentarlo?

si no

Al hacer clic en "sí", se ejecutan las pruebas.

No estoy seguro de por qué aparece este cuadro de diálogo,

He intentado las soluciones alternativas mencionadas a continuación, pero ninguna de ellas funciona:

  1. Se reemplazó el controlador de cromo con la última versión.
  2. Añadido debajo del código en mi script:

    ChromeOptions options = new ChromeOptions(); options.addArguments("no-sandbox"); options.addArguments("disable-extensions"); driver = new ChromeDriver(options);

A continuación se muestra mi método de prueba:

public void Login() throws IOException{ test = extent.startTest("Login"); signInPage = new SignInPage(driver); signInPage.enterMailId(); String screenShotPath = GetScreenShot.capture(driver, "enterMailId"); test.log(LogStatus.PASS, "Email id is entered successfully: " + test.addScreenCapture(screenShotPath)); signInPage.enterpwd(); //test.log(LogStatus.INFO, "Password is entered successfully"); screenShotPath = GetScreenShot.capture(driver, "enterpwd"); test.log(LogStatus.PASS, "Password is entered successfully: " + test.addScreenCapture(screenShotPath)); signInPage.clickOnLogin(); test.log(LogStatus.PASS, "User logged in successfully"); }

A continuación se muestra el método que invoca el navegador:

private void initChromeBrowser(){ System.setProperty("webdriver.chrome.driver", userdir +"//chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.addArguments("test-type"); options.addArguments("no-sandbox"); //Fix for cannot get automation extension options.addArguments("disable-extensions"); options.addArguments("start-maximized"); options.addArguments("--js-flags=--expose-gc"); options.addArguments("disable-plugins"); options.addArguments("--enable-precise-memory-info"); options.addArguments("--disable-popup-blocking"); options.addArguments("--disable-default-apps"); options.addArguments("test-type=browser"); options.addArguments("disable-infobars"); driver = new ChromeDriver(options); launchApp(); }

¿Podría haber algo más que debería incorporar en mi script para evitar el cuadro de diálogo?



Este mensaje de error ...

Error al cargar la extensión

No se pudo cargar la extensión desde ''C: / Users / username / AppData / Local / Temp / scoped_dir6312_32763 / internal''. El administrador deshabilita la carga de extensiones desempaquetadas.

¿Quieres volver a intentarlo?

si no

... implica que no se cargó una extensión porque el administrador la deshabilitó.

Según el https://bugs.chromium.org/p/chromedriver/issues/detail?id=1749 ChromeDriver https://bugs.chromium.org/p/chromedriver/issues/detail?id=1749 utiliza la extensión de automatización de Chrome para automatizar varias funciones como el tamaño de ventanas, el posicionamiento de ventanas, etc.

La ventana emergente Error al cargar la extensión .. significa que esta extensión no se ha cargado. Si cierra manualmente la ventana emergente, el navegador actuará normalmente y los comandos de ChromeDriver continuarán funcionando como se esperaba. Pero en este caso, si intenta ejecutar comandos de cambio de tamaño de ventana o de reposicionamiento de ventana, arrojará un error como unknown error: cannot get automation extension .

Hasta ChromeDriver v2.28 cada vez que la política de administración de una organización prohíba las extensiones, para evitar la restricción, los usuarios han utilizado el argumento disable-extensions siguiente manera:

ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-extensions"); WebDriver driver = new ChromeDriver(options);

y funcionó perfecto.

ChromeDriver v2.28 en adelante, cada vez que se pasa la marca de disable-extensions por prueba, ChromeDriver pasa implícitamente la marca de disable-extensions-except que a su vez carga la extensión de automatización de Chrome . Esta extensión ayuda a Chromedriver a realizar operaciones de cambio de tamaño y reubicación de ventanas.

Por lo tanto, si la política de administración de su organización bloquea las extensiones, la visualización de la ventana emergente Error al cargar la extensión desde: ... La carga de extensiones desempaquetadas es un comportamiento esperado.

Este problema dependía del soporte de Selenium para los sin cabeza .

Como alternativa, puede establecer la capacidad useAutomationExtension en false siguiente manera:

ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("useAutomationExtension", false); WebDriver driver = new ChromeDriver(options);

Esta capacidad inturn ayudará a no cargar la extensión de Automatización de Chrome y no aparecerá la ventana emergente Failed to load extension . Pero no podrá realizar ninguna operación de cambio de tamaño / posicionamiento de ventanas sin la extensión de automatización de Chrome .

Ahora, el soporte de Selenium para resolver sin cabeza ChromeDriver ya no requerirá esta extensión y no debería haber visto este error / ventana emergente.

Solución

La solución más simple sería utilizar la última versión de ChromeDriver y la combinación de Chrome entre cualquiera de los siguientes:

  • Si está utilizando Chrome versión 73 , descargue ChromeDriver 73.0.3683.20
  • Si está utilizando Chrome versión 72 , descargue ChromeDriver 2.46 o ChromeDriver 72.0.3626.69
  • Si está utilizando Chrome versión 71 , descargue ChromeDriver 2.46 o ChromeDriver 71.0.3578.137
  • Para versiones anteriores de Chrome, consulte esta discussion .

Alternativa

Algunas otras alternativas son:

  • Agregue la clave de registro ExtensionInstallWhitelist a la lista blanca
  • Quite la clave de registro ExtensionInstallBlacklist contiene una clave de cadena 1 con valor *

Intenté varias cosas, como eliminar la entrada * de la lista negra de Chrome en el registro de Windows (lo cual es un hack doloroso porque la política del grupo de la compañía lo revertirá un par de veces por semana). Finalmente se me ocurrió la solución de trabajo. Con el siguiente código, la ventana emergente "error al cargar la extensión" ya no aparece.

${options}= Evaluate sys.modules[''selenium.webdriver''].ChromeOptions() sys, selenium.webdriver Call Method ${options} add_argument --start-maximized Call Method ${options} add_experimental_option useAutomationExtension ${False} Create WebDriver Chrome chrome_options=${options}


Puede establecer la capacidad useAutomationExtension en falso.

ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("useAutomationExtension", false); WebDriver driver = new ChromeDriver(options);

Esta capacidad ayudará a no cargar la extensión de Automatización de Chrome. Debido a lo cual, no aparecerá la ventana emergente "Error al cargar la extensión" .

Pero tenga en cuenta que no podrá realizar ninguna operación de cambio de tamaño / posicionamiento de ventanas sin la extensión de automatización de Chrome.

¡Espero que esto ayude!

Fuente: https://bugs.chromium.org/p/chromedriver/issues/detail?id=1749


Si vas a chrome://version/ puedes ver debajo del comando:

C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-extensions --disable-extensions-except="C:/Users/Inno3/AppData/Local/Temp/scoped_dir80288_6333/internal" --disable-hang-monitor --disable-popup-blocking --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-automation --enable-logging --force-fieldtrials=SiteIsolationExtensions/Control --ignore-certificate-errors --log-level=0 --metrics-recording-only --no-first-run --password-store=basic --remote-debugging-port=12354 --safebrowsing-disable-auto-update --start-maximized --test-type=webdriver --use-mock-keychain --user-data-dir="C:/Users/Inno3/AppData/Local/Temp/scoped_dir80288_30914" --flag-switches-begin --flag-switches-end data:,

Es por eso que arroja un error, no sé por qué da error, ¿tal vez la política del usuario o las actualizaciones de Chrome?

--disable-extensions-except="C:/Users/Inno3/AppData/Local/Temp/scoped_dir80288_6333/internal"

Creo que Selenium agrega el argumento, necesita el siguiente comando para indicarle al selenio que no lo agregue.

Cía#:

chromeOptions = OpenQA.Selenium.Chrome.ChromeOptions(); chromeOptions.AddAdditionalCapability("useAutomationExtension", false); river = new ChromeDriver(chromeOptions); launchApp();

En Java:

chromeOptions.AddAdditionalCapability("useAutomationExtension", false)


//Set the system property for chrome browser location System.setProperty("webdriver.chrome.driver", Global.sChromeDriverPath); //Set the Chrome capabilities ChromeOptions options = new ChromeOptions(); options.addArguments("test-type"); options.addArguments("start-maximized"); options.addArguments("--js-flags=--expose-gc"); options.addArguments("--enable-precise-memory-info"); options.addArguments("--disable-popup-blocking"); options.addArguments("--disable-default-apps"); options.addArguments("--enable-automation"); options.addArguments("test-type=browser"); options.addArguments("disable-infobars"); options.addArguments("disable-extensions"); options.setExperimentalOption("useAutomationExtension", false); Global.driver = new ChromeDriver(options);


ChromeOptions options = new ChromeOptions(); System.setProperty("webdriver.chrome.driver", "C://drivers//chromedriver.exe"); options.setExperimentalOption("useAutomationExtension", false); driver = new ChromeDriver(options);