我正在尝试让我的selenium测试自动化在headless chrome上运行,这样我就可以把它移到TeamCity上。我没有任何运气。当我运行它时,chrome看起来确实是在headless上运行的(没有弹出浏览器),但是我得到了一个NoSuchElementException
。当非headless运行时,自动化按预期工作。拍摄的快照只显示了一个白色矩形。
我对这个问题进行了广泛的研究,但是我一直没有找到一个适合我的解决方案。看起来这个问题在https://bugs.chromium.org/p/chromedriver/issues/detail?id=476中报告过,但是它被标记为已修复。我认为这个问题可能是错误的chromedriver,或者可能是错误的chromedriver/selenium组合,但是我尝试了各种各样的组合,但是没有结果。
我正在使用:
- selenium -Java 3.6.0
- 镀 chrome 驱动器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的一部分,因此任何帮助都将非常感谢。
8条答案
按热度按时间p8ekf7hl1#
这就是我的工作:
从https://bugs.chromium.org/p/chromium/issues/detail?id=721739中找到
qgelzfjb2#
我遇到了同样的问题,本地服务器使用的是自签名证书,下面是适合我的组合:
dw1jzc5e3#
试试这个:
falq053o4#
添加用户代理为我完成了这项工作:
7dl7o3gd5#
你的chromedriver/selenium组合看起来很完美。在我看来是一个纯粹的同步问题。我们需要诱导一些等待来同步如下:
yzxexxkh6#
对于任何可能在这里遇到这个错误,但正在使用python的人。
我有一个脚本工作的问题,只有当无头没有使用。
最初,我的选项如下所示:
找到这个线程后,我改变了我的选项如下:
看起来当Selenium导航页面时,无头窗口的格式不同。想想看。这解决了我所有的问题。
nzrxty8p7#
我也有同样的问题。
您需要添加到您的选项您的计算机的用户代理,要搜索您的用户代理只需键入谷歌:x1月1x
然后将其添加到选项中:
options.add_argument("your-user-agent")
vs3odd8k8#
选项.add_argument(“--窗口大小=1440,900”)
在尝试了别人推荐的方法后,我从“Slyme”中拿来的这个解决了我的问题。我的是一个Java框架。