Ich habe einen Ubuntu-Server mit der Benutzeroberfläche. Sie können die Testfälle ausführen, indem Sie den Befehl mvn test auslösen. Aber das Problem ist, wenn ich die Maschine über das Terminal von einer anderen Maschine aus starte, erhalte ich die folgende Fehlermeldung:
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
aber der gleiche befehl startet chrome erfolgreich, wenn ich remote von der maschine durch remmina gehe und dann den gleichen befehl von diesem maschinenterminal ausführe.
Versuchen Sie, Selenium-Server ohne Sudo
- Berechtigungen auszuführen:
Java -jar path/to/Selenium-server-standalone.jar
Diese Fehlermeldung ...
unknown error: DevToolsActivePort file doesn't exist
... impliziert, dass der ChromeDriver keine neue WebBrowser d. h. Chrome Browser Sitzung initiieren/erzeugen konnte.
Ihre Codeversionen und die Versionsinformationen aller Binärdateien hätten uns einen Hinweis darauf gegeben, was falsch läuft.
Nach Add --disable-dev-shm-usage to default launch flags scheint jedoch das Argument--disable-dev-shm-usage
hinzuzufügen, um das Problem vorübergehend zu lösen.
Wenn Sie eine neue Chrome Browser Sitzung einleiten/überspannen möchten, können Sie die folgende Java Lösung verwenden:
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");
Gemäß base_switches.ccdisable-dev-shm-usage
scheint nur unter Linix OS gültig zu sein:
#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
In der Diskussion Hinzufügen einer Option zur Verwendung von/tmp anstelle von/dev/shm erwähnt David:
Ich denke, es würde davon abhängen, wie/dev/shm und/tmp gemountet sind. Wenn beide als tmpfs gemountet sind, wird es vermutlich keinen Unterschied geben. Wenn/tmp aus irgendeinem Grund nicht als tmpfs zugeordnet ist (und meiner Meinung nach standardmäßig als tmpfs von systemd zugeordnet ist), ordnet die Chrome-Shared-Memory-Verwaltung beim Erstellen anonymer Shared-Files immer Dateien dem Arbeitsspeicher zu viel unterschied. Ich vermute, Sie könnten Telemetrietests mit aktiviertem Flag erzwingen und sehen, wie es geht.
Als Grund, warum nicht standardmäßig verwendet, wurde es vom Shared Memory-Team zurückgedrängt. Ich denke, es ist sinnvoll,/dev/shm standardmäßig für Shared Memory zu verwenden.
Letztendlich sollte dies alles so aussehen, dass memfd_create verwendet wird, aber ich denke nicht, dass dies in naher Zukunft passieren wird, da die Chrome-Speicherverwaltung erheblich überarbeitet werden muss.
Eine ausführliche Diskussion finden Sie auch unter org.openqa.Selenium.WebDriverException: unbekannter Fehler: Die Datei DevToolsActivePort existiert nicht, während Sie versuchen, Chrome Browser zu starten
Ich hatte ein ähnliches Problem, als ich versuchte, Selenium UI-Testfälle im kopflosen Modus zu testen. Dies geschah, weil ich keinen Anzeigeserver hatte. Das Starten von Xvfb hat bei mir funktioniert.
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
Ich benutze diese Konfiguration mit 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)