J'ai également un serveur Ubuntu avec l'interface utilisateur. U peut exécuter les cas de test en lançant la commande de test mvn. Mais le problème est que lorsque je fais ssh de la machine via le terminal à partir d'une autre machine, j'obtiens l'erreur suivante:
unknown error: DevToolsActivePort file doesn't exist
(Driver info: chromedriver=2.40.565383 (76257d1ab79276b2d53ee976b2c3e3b9f335cde7),platform=Linux 4.4.0-121-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.04 seconds
Build info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T18:33:54.468Z'
System info: Host: 'ubuntu-test', ip: 'X.X.X.X', os.name: 'Linux', os.Arch: 'AMD64', os.version: '4.4.0-121-generic', Java.version: '1.8.0_171'
Driver info: driver.version: ChromeDriver
mais la même commande démarre chrome avec succès si je prends la télécommande de la machine via remmina puis exécute la même commande de ce terminal de machines.
Ce message d'erreur ...
unknown error: DevToolsActivePort file doesn't exist
... implique que le ChromeDriver n'a pas pu lancer/générer un nouveau WebBrowser ie session du navigateur Chrome .
Vos essais de code et les informations de version de tous les binaires nous auraient donné un indice sur ce qui ne va pas.
Cependant, selon Ajouter --disable-dev-shm-usage aux drapeaux de lancement par défaut semble ajouter 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 Java:
System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
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("--no-sandbox"); // Bypass OS security model
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");
Selon base_switches.ccdisable-dev-shm-usage
semble être valide uniquement sur Linix 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 Ajouter une option pour utiliser/tmp au lieu de/dev/shm David mentionne:
Je pense que cela dépend de la façon dont sont montés/dev/shm et/tmp. S'ils sont tous les deux montés en tmpfs, je suppose qu'il n'y aura pas de 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), chrome mappe toujours les fichiers en mémoire lors de la création de fichiers partagés anonymes, donc même dans ce cas, cela ne devrait pas faire beaucoup de différence. Je suppose que vous pouvez forcer les tests de télémétrie avec le drapeau activé et voir comment ça 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 être déplacé pour utiliser memfd_create, mais je ne pense pas que cela se produira de si tôt, car cela nécessitera une refactorisation Chrome gestion de la mémoire de manière significative.
Vous pouvez également trouver une discussion détaillée dans org.openqa.Selenium.WebDriverException: erreur inconnue: le fichier DevToolsActivePort n'existe pas lors de la tentative de lancement Chrome Browser
Essayez d'exécuter Selenium-server sans les privilèges Sudo
-:
Java -jar path/to/Selenium-server-standalone.jar
J'ai rencontré le même problème lorsque j'ai exécuté Selenium avec une tâche cron. Et après de longues souffrances, j'ai trouvé le moyen de le résoudre. Ajoutez simplement cette ligne au début du script Shell:
export DISPLAY=:1
Essayez cette méthode pour instancier chrome pourrait vous aider à résoudre ce problème dans ubuntu:
from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options
opt = Options()
opt.add_argument("--no-sandbox")
opt.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(chrome_options=opt,
executable_path='<your-chromedriver-path>')
driver.get('https://www.google.com/')
Merci à @ George Pantazes pour son commentaire pour le réponse
Si vous exécutez à partir de ssh sans X-forward, votre navigateur chrome se bloquera. Pour éviter que vous puissiez utiliser les options publiées par DebanjanB, la plus importante étant --headless. Si vous exécutez en tant que root (pas recommandé) vous avez également besoin de --no-sandbox.
J'ai également eu cette erreur lorsque j'ai utilisé une ancienne version de Selenium-Java (3.5.3) avec le nouveau chromedriver (75.x). Cela a fonctionné pour moi d'utiliser la version 2.46 du chromedriver avec le 3.5.3, ou le 75.x avec 3.141.59 de Selenium Java.
L'exécution d'un Xvfb local devrait également fonctionner, mais je suggère d'utiliser sans tête, cela peut être beaucoup plus rapide.
Vérifiez le message en double suggéré et veuillez mettre à jour et marquer comme résolu tout ce qui vous a aidé.
J'ai eu un problème similaire lorsque j'essayais de tester les cas de test Selenium UI en mode sans tête. Cela s'est produit car je n'avais pas de serveur d'affichage. Démarrer Xvfb a fonctionné pour moi.
Sudo yum -y install Xvfb libXfont Xorg
Sudo yum -y groupinstall "X Window System" "Desktop" "Fonts" "General Purpose Desktop"
Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:1
J'utilise cette configuration en utilisant python
import os
from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("no-sandbox")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--headless")
driver = os.path.join("path/of/driver","chromedriver")
browser = webdriver.Chrome(executable_path=driver,chrome_options=chrome_options)
browser.get("https://www.example.com")
print(browser.title)