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:
- Se reemplazó el controlador de cromo con la última versión.
-
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?
Encontré este mismo problema después de actualizar a ChromeDriver v2.29. Tengo Chrome v58.0. Parece un problema abierto: https://bugs.chromium.org/p/chromedriver/issues/detail?id=639#c26
Dependiendo de sus versiones, YMMV, en mi caso, tuve que cambiar a ChromeDriver v2.27.
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
oChromeDriver 72.0.3626.69
-
Si está utilizando
Chrome versión 71
, descargue
ChromeDriver 2.46
oChromeDriver 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);