硒测试失败了无头铬

dst*_*ter 5 selenium google-chrome headless

我试图让我的selenium测试自动化运行无头镀铬,以便我可以将它移动到TeamCity.我没有运气.当我运行它时,Chrome确实无法正常运行(没有浏览器弹出),但我得到了一个NoSuchElementException.当无头地运行时,自动化按预期工作.拍摄的快照只显示一个白色矩形.

我已经广泛研究过这个问题,但是我找不到适合我的解决方案.似乎该问题已在https://bugs.chromium.org/p/chromedriver/issues/detail?id=476中报告 ,但它已标记为已修复.我认为这个问题可能是错误的chromedriver,或者可能是错误的chromedriver/selenium组合,但我尝试了各种组合而没有爱.

我在用:

  • selenium-java 3.6.0
  • chromedriver 2.33.506120
  • Windows 7企业服务包1,64位

我的代码是:

...
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"));
...
Run Code Online (Sandbox Code Playgroud)

输出是:

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
Run Code Online (Sandbox Code Playgroud)

这使我无法将测试自动化作为CI的一部分,因此非常感谢任何帮助.

dem*_*key 10

这对我有用:

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);
Run Code Online (Sandbox Code Playgroud)

来自https://bugs.chromium.org/p/chromium/issues/detail?id=721739


小智 5

我有同样的问题,本地服务器使用的是自签名证书,这里的组合对我有用:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu");
options.addArguments("--no-sandbox");
options.addArguments("--allow-insecure-localhost");
Run Code Online (Sandbox Code Playgroud)


Gus*_*aro 5

尝试这个:

final ChromeOptions options = new ChromeOptions();

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

WebDriver driver = new ChromeDriver(options);
Run Code Online (Sandbox Code Playgroud)


Deb*_*anB 0

你的 chromedriver/selenium 组合看起来很完美。在我看来,这是一个纯粹的同步问题。我们需要引起一些等待,如下所示:

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");
Run Code Online (Sandbox Code Playgroud)