使用`google-chrome --headless`时如何设置浏览器窗口大小?

问题描述 投票:0回答:5

我尝试使用 Selenium WebDriver 命令在 Chrome

--headless
上设置浏览器大小。

我收到此 WebDriver 错误:

      - Failed: unknown error: cannot get automation extension
from unknown error: page could not be found: chrome-extension://aapnijgdinlhnhlmodcfapnahmbfebeb/_generated_background_page.html
  (Session info: headless chrome=58.0.3029.81)
  (Driver info: chromedriver=2.29.461571 (8a88bbe0775e2a23afda0ceaf2ef7ee74e822cc5),platform=Linux 4.4.0-72-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 10.07 seconds
Build info: version: '3.3.1', revision: '5234b32', time: '2017-03-10 09:04:52 -0800'
System info: host: '826f6a766112', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-72-generic', java.version: '1.8.0_121'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.29.461571 (8a88bbe0775e2a23afda0ceaf2ef7ee74e822cc5), userDataDir=/tmp/.org.chromium.Chromium.cuymDL}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=58.0.3029.81, platform=LINUX, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=}]
Session ID: 9569e5ebd8f7540ce510b20647443baf
google-chrome selenium-webdriver headless headless-browser
5个回答
103
投票

我找到了。只需将

--window-size
命令行 argument 传递给 Google Chrome,例如
--window-size=1920,1080

Protractor 配置中,这看起来像这样:

capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['headless', 'window-size=1920,1080']
    }
}

最酷的事情是窗口大小不限于当前显示。它是真正的无头,这意味着它可以根据测试需要而变大。

Java代码:

options.addArguments("window-size=1920,1080");

我在无头量角器不分片测试中对此进行了更多扩展。


9
投票

使用内置的Selenium函数:

    aDriver.manage().window().setSize(new Dimension(width, height));

它的表现就像冠军一样。我已将其用于 Firefox、Chrome(甚至无头)和 Edge


4
投票

我在Python中遇到了这个问题,所以这是Python解决方案:

options = Options()
options.headless = True
options.add_argument("window-size=1920,1080")
driver = webdriver.Chrome(options=options)

2
投票

先生。利奥的回答很有魅力。我已经用 6000x6000 窗口大小对此进行了测试。

c# 中也一样

var options = new ChromeOptions(); 
options.AddArgument("no-sandbox");
options.AddArgument("headless");
options.addArguments("window-size=1920,1080");
IWebDriver _driver= new ChromeDriver($@"path to chrome web driver folder", options, TimeSpan.FromSeconds(130));

1
投票

在 Jenkins 上运行时,我遇到了屏幕分辨率问题(这会强制使用无头模式)。解决方案非常简单:明确将无头模式设置为

true
。由于某种原因,不明确执行此操作会导致我的屏幕“缩小”,从而导致各种“元素拦截点击”问题。因为我在失败时截图,我注意到分辨率(大小)不正确。一旦我这样做了,问题就消失了;通过失败期间截取的屏幕截图确认。

为了避免与本地配置发生冲突,我将此标志的值移动到一个配置文件中,然后将其添加到我们的

.gitignore
文件中以防止意外覆盖。

如果您像我一样,这些常见解决方案都不起作用,请确保明确设置此值:

ChromeOptions options = new ChromeOptions();
...
String headlessMode = readProperty("headless_mode"); // Get value from some prop file (my own implementation)
options.setHeadless(Boolean.valueOf(headlessMode));
...
driver = new ChromeDriver(options);

如果您不想(或需要)这种分离,只需在

true
方法调用中将值设置为
setHeadless
即可。

© www.soinside.com 2019 - 2024. All rights reserved.