Ce message d'erreur ...
org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
... implique que ChromeDriver n'a pas pu lancer / générer une nouvelle session WebBrowser, c'est-à-dire le navigateur Chrome .
Vos essais de code et les informations de version de tous les binaires nous auraient donné des indices sur ce qui ne va pas.
Cependant, selon Ajouter --disable-dev-shm-usage aux indicateurs de lancement par défaut, il semble que l'ajout de l'argument --disable-dev-shm-usage
résoudra temporairement le problème.
Si vous souhaitez lancer / étendre une nouvelle session du navigateur Chrome , vous pouvez utiliser la solution suivante:
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
Selon base_switches.cc disable-dev-shm-usage
semble être valide uniquement sur Linux OS :
#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
Dans la discussion, ajoutez une option pour utiliser / tmp au lieu de / dev / shm, David mentionne:
Je pense que cela dépendrait de la manière dont / dev / shm et / tmp sont montés. S'ils sont tous deux montés en tmpfs, je suppose qu'il n'y aura aucune différence. si pour une raison quelconque / tmp n'est pas mappé en tant que tmpfs (et je pense qu'il est mappé en tant que tmpfs par défaut par systemd), la gestion de la mémoire partagée de chrome mappe toujours les fichiers en mémoire lors de la création de fichiers partagés anonymes, donc même dans ce cas ne devrait pas être beaucoup de différence. Je suppose que vous pouvez forcer les tests de télémétrie avec le drapeau activé et voir comment cela se passe.
Quant à savoir pourquoi ne pas utiliser par défaut, il a été repoussé par l'équipe de mémoire partagée, je suppose qu'il est logique qu'il devrait utiliser / dev / shm pour la mémoire partagée par défaut.
En fin de compte, tout cela devrait passer à l'utilisation de memfd_create, mais je ne pense pas que cela se produira de si tôt, car cela nécessitera de refactoriser la gestion de la mémoire Chrome de manière significative.
Outro
Voici le lien vers l' histoire de Sandbox .