Questo messaggio di errore ...
org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
... implica che ChromeDriver non è stato in grado di avviare / generare un nuovo browser Web, ad esempio la sessione del browser Chrome .
Le prove del codice e le informazioni sulla versione di tutti i file binari ci avrebbero dato qualche suggerimento su cosa non va.
Tuttavia, secondo Add --disable-dev-shm-use ai flag di avvio predefiniti sembra che l'aggiunta dell'argomento --disable-dev-shm-usage
risolva temporaneamente il problema.
Se desideri avviare / estendere una nuova sessione del browser Chrome , puoi utilizzare la seguente soluzione:
System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--no-sandbox"); // Bypass OS security model
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");
disable-dev-shm-usage
Secondo base_switches.cc disable-dev-shm-usage
sembra essere valido solo su SO Linux :
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// The /dev/shm partition is too small in certain VM environments, causing
// Chrome to fail or crash (see http://crbug.com/715363). Use this flag to
// work-around this issue (a temporary directory will always be used to create
// anonymous shared memory files).
const char kDisableDevShmUsage[] = "disable-dev-shm-usage";
#endif
Nella discussione Aggiungi un'opzione per usare / tmp invece di / dev / shm menziona David:
Penso che dipenderebbe da come sono montati / dev / shm e / tmp. Se sono entrambi montati come tmpfs, suppongo che non ci sarà alcuna differenza. se per qualche motivo / tmp non è mappato come tmpfs (e penso che sia mappato come tmpfs di default da systemd), la gestione della memoria condivisa di Chrome mappa sempre i file nella memoria quando si crea un file condiviso anonimo, quindi anche in quel caso non dovrebbe essere molta differenza. Immagino che potresti forzare i test di telemetria con la bandiera abilitata e vedere come va.
Per quanto riguarda il motivo per cui non utilizzare per impostazione predefinita, è stato respinto dal team di memoria condivisa, immagino abbia senso che dovrebbe usare / dev / shm per memoria condivisa per impostazione predefinita.
Alla fine tutto ciò dovrebbe spostarsi per usare memfd_create, ma non credo che accadrà presto, poiché richiederà un refactoring significativo della gestione della memoria di Chrome.
outro
Ecco il link alla storia di Sandbox .