硒测试失败了无头铬

时间:2017-11-01 18:47:40

标签: google-chrome selenium 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"));
...

输出是:

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

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

7 个答案:

答案 0 :(得分:5)

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

.tab-pane{
    width:1000px;
    height:300px;
}
.tab-content{
  overflow-x:scroll;
  overflow-y:none;
} 

答案 1 :(得分:4)

这对我有用:

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);

https://bugs.chromium.org/p/chromium/issues/detail?id=721739找到

答案 2 :(得分:1)

尝试一下:

final ChromeOptions options = new ChromeOptions();

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

WebDriver driver = new ChromeDriver(options);

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

对于任何可能因此错误而在这里迷失方向但正在使用python的人。

只有在不使用无头脚本的情况下,脚本才能正常工作。

最初,我的选择如下:

options = Options()
options.headless = True 

找到此线程后,我将选项更改为以下内容:

options = Options()
options.add_argument("--headless");
options.add_argument("--window-size=1440, 900")

当硒浏览页面时,无头窗口的格式似乎有所不同。去搞清楚。这解决了我所有的问题。

答案 5 :(得分:0)

我遇到了完全相同的问题。

您需要将计算机的用户代理添加到选项中, 要搜索您的用户代理,只需输入google:״ my user agent״

然后将其添加到选项:options.add_argument("your-user-agent")

答案 6 :(得分:0)

添加用户代理为我完成了工作:

--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36