webentwicklung-frage-antwort-db.com.de

unbekannter Fehler: DevToolsActivePort-Datei existiert nicht Fehler beim Ausführen von Selenium UI-Testfällen auf Ubuntu

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.

1
Nikunj Aggarwal

Versuchen Sie, Selenium-Server ohne Sudo- Berechtigungen auszuführen:

Java -jar path/to/Selenium-server-standalone.jar

1
fpsthirty

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-usagehinzuzufü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");

disable-dev-shm-usage

Gemäß base_switches.ccdisable-dev-shm-usagescheint 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

0
DebanjanB

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

0
mayuri tanksale

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)
0
Alex Montoya