webentwicklung-frage-antwort-db.com.de

selentests gegen kopfloses Chrom scheitern

Ich versuche, meine Selenium-Testautomatisierung gegen kopfloses Chrom laufen zu lassen, damit ich sie auf TeamCity verschieben kann. Ich habe kein Glück gehabt. Wenn ich es starte, scheint Chrome kopflos zu laufen (es erscheint kein Browser), aber ich erhalte eine NoSuchElementException. Die Automatisierung funktioniert wie erwartet, wenn sie nicht kopflos ausgeführt wird. Ein Schnappschuss zeigt nur ein weißes Rechteck.

Ich habe dieses Problem eingehend untersucht, konnte jedoch keine für mich geeignete Lösung finden. Es scheint, dass das Problem in https://bugs.chromium.org/p/chromedriver/issues/detail?id=476 gemeldet wurde, aber als behoben markiert ist. Ich denke, das Problem könnte der falsche Chromtreiber oder die falsche Chromtreiber/Selen-Kombination sein, aber ich habe alle möglichen Kombinationen ausprobiert und keine Liebe.

Ich benutze:

  • Selen-Java 3.6.0
  • chromedriver 2.33.506120
  • Windows 7 Enterprise Service Pack1, 64-Bit

Mein Code ist:

...
ChromeOptions headlessOptions = new ChromeOptions();
headlessOptions.addArguments("--start-maximized");
headlessOptions.addArguments("--headless");
driver = new ChromeDriver(headlessOptions);
driver.get(url);
WebElement usernameTextfield = driver.findElement(By.cssSelector(".input.username"));
...

Und die Ausgabe ist:

Starting ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) on port 41402
Only local connections are allowed.
Nov 01, 2017 10:22:51 AM org.openqa.Selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS

org.openqa.Selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":".input.username"}
  (Session info: headless chrome=62.0.3202.75)
  (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds

Dies hindert mich daran, meine Testautomatisierung in unser CI aufzunehmen. Daher wäre jede Hilfe sehr willkommen.

5
dstaraster

Ich hatte das gleiche Problem, der lokale Server verwendete ein selbstsigniertes Zertifikat. Die folgende Kombination hat bei mir funktioniert:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu");
options.addArguments("--no-sandbox");
options.addArguments("--allow-insecure-localhost");
5
singidunumx

Das hat bei mir funktioniert:

var chromeOptions = new ChromeOptions();                        
chromeOptions.AddArguments("--headless");
chromeOptions.AddArguments("--disable-gpu");
chromeOptions.AddArguments("--window-size=1280,800");
chromeOptions.AddArguments("--allow-insecure-localhost");

//specifically this line here :)
chromeOptions.AddAdditionalCapability("acceptInsecureCerts", true, true);

Gefunden von https://bugs.chromium.org/p/chromium/issues/detail?id=721739

4
demoncodemonkey

Versuche dies:

final ChromeOptions options = new ChromeOptions();

options.addArguments("--headless");
options.addArguments("--window-size=1280,800");

WebDriver driver = new ChromeDriver(options);
1
Gustavo Amaro

Ihre Chromedriver/Selen-Kombination sieht perfekt aus. Scheint mir ein mühsames Synchronisationsproblem zu sein. Wir müssen einige Wartezeiten einleiten, um Folgendes abzusprechen:

driver.get(url);
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement usernameTextfield = wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.cssSelector(".input.username"))));
usernameTextfield.sendKeys("user_name");
0
DebanjanB