我正在努力让我的selenium测试自动化与无头镀铬一起运行,以便我可以将它移动到TeamCity。我没有运气。当我运行它时,Chrome确实无法正常运行(没有弹出浏览器),但我得到了NoSuchElementException
。当无头地运行时,自动化按预期工作。拍摄的快照只显示一个白色矩形。
我已经广泛研究过这个问题,但是我找不到适合我的解决方案。该问题似乎已在https://bugs.chromium.org/p/chromedriver/issues/detail?id=476中报告,但已标记为已解决。我认为这个问题可能是错误的chromedriver,或者可能是错误的chromedriver / selenium组合,但我尝试过各种各样的组合而没有爱。
我正在使用:
我的代码是:
...
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的一部分,因此非常感谢任何帮助。
答案 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