无法在无头模式下最大化Chrome窗口

时间:2017-07-28 13:07:44

标签: google-chrome selenium selenium-chromedriver geb

我最近将我的chrome版本升级到60并将chromedriver升级到版本2.31。发布当我尝试最大化浏览器窗口时,我已经开始获得以下异常。

    driver.driver.manage().window().maximize()
  

org.openqa.selenium.WebDriverException:未知错误:失败   将窗口状态更改为最大化,当前状态正常(会话   info:chrome = 60.0.3112.78)(驱动信息:chromedriver = 2.31.488763   (092de99f48a300323ecf8c2a4e2e7cab51de5ba8),平台= Linux的   4.2.0-27-generic x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:108毫秒   构建信息:版本:' 2.53.1',修订版:   ' a36b8b1cd5757287168e54b817830adce9b0158d',时间:' 2016-06-30   19:26:09'系统信息:主持人:' bb-blr-prod-stage-stg1-01',ip:   ' 10.3.211.2',os.name:' Linux',os.arch:' amd64',os.version:   ' 4.2.0-27-generic',java.version:' 1.7.0_80'会话ID:   c7de7149dd490cc7760d2f4fc49f0325驱动程序信息:   org.openqa.selenium.chrome.ChromeDriver Capabilities [{platform = LINUX,   acceptSslCerts = true,javascriptEnabled = true,browserName = chrome,   铬= {userDataDir = / TMP / .org.chromium.Chromium.WABPhO,   chromedriverVersion = 2.31.488763   (092de99f48a300323ecf8c2a4e2e7cab51de5ba8)},   networkConnectionEnabled = false,unexpectedAlertBehaviour =,   rotating = false,setWindowRect = true,locationContextEnabled = true,   mobileEmulationEnabled = false,pageLoadStrategy = normal,   version = 60.0.3112.78,takesHeapSnapshot = true,   cssSelectorsEnabled = true,databaseEnabled = false,handlesAlerts = true,   browserConnectionEnabled = false,webStorageEnabled = true,   nativeEvents = true,hasTouchScreen = false,   applicationCacheEnabled = false,takeScreenshot = true}]

我使用Geb上的ChromeDriver在无头模式下运行测试。

  • Chrome版本 - 60.0.3112.78
  • chromedriver version - 2.31.488763
  • OS - Ubuntu 14.04.4 LTS
  • Selenium v​​ersion - 2.53.1
  • WebDriver语言绑定
  • Geb - 0.13.1

6 个答案:

答案 0 :(得分:13)

由于您在无头模式下运行测试,因此没有active浏览器窗口可用。就这样你的

   driver.driver.manage().window().maximize()
在这种情况下,

总是会失败,因为驱动程序不知道哪个窗口要最大化,因为没有任何可用的窗口。

你可以按照@DebanjanB提到的那样,或者你可以用1440x900之类的特定屏幕尺寸启动无头浏览器,做这样的事情

 driver.manage().window().setSize(new Dimension(1440, 900));

答案 1 :(得分:6)

在代码中添加以下file.php

file.php?foo=bar

另请参阅this blog了解更多

答案 2 :(得分:3)

这是一个开放的错误(请点击此处):https://bugs.chromium.org/p/chromedriver/issues/detail?id=1901

答案 3 :(得分:2)

我正在使用chromedriver 2.30& chrome浏览器v60通过量角器。虽然我没有通过chromeoptions进行测试,但我仍然无法进行测试。相反,我在unix发行版上使用xvfb-run运行无头测试。我遇到了这个问题,虽然它随机失败了。见下面的堆栈

[chrome #11]       [31mWebDriverError: unknown error: failed to change window state to maximized, current state is normal
[chrome #11]         (Session info: chrome=60.0.3112.78)
[chrome #11]         (Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 3.10.0-514.26.2.el7.x86_64 x86_64) (WARNING: The server did not provide any stacktrace information)
[chrome #11]       Command duration or timeout: 122 milliseconds
[chrome #11]       Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
[chrome #11]       System info: host: 's1wfadvcilvm08', ip: '172.16.184.183', os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0-514.26.2.el7.x86_64', java.version: '1.8.0_141'
[chrome #11]       Driver info: org.openqa.selenium.chrome.ChromeDriver
[chrome #11]       Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57), userDataDir=/tmp/.org.chromium.Chromium.BNsN1w}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=60.0.3112.78, platform=LINUX, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, unexpectedAlertBehaviour=}]

每个测试开始时的代码执行以下操作

browser.manage().window().maximize();

更改为

driver.driver.manage().window().maximize();
driver.manage().window().maximize();
不幸的是,

对我不起作用。不应该使用browser.manage()。window()。maximize()仍然可以工作,因为我使用xvfb-run运行无头而不是通过chrome选项进行无头操作?

答案 4 :(得分:1)

我建议你稍微更改代码行:

变化:

driver.driver.manage().window().maximize()

要:

driver.manage().window().maximize()

如果它没有帮助,假设您的Selenium绑定为Java并且Chrome模式下使用headless按照最佳做法,建议最大化Google Chrome浏览器通过ChromeOptions类,如下所示:

System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("start-maximized");
WebDriver driver = new ChromeDriver(options);
driver.navigate().to("https://google.com");

答案 5 :(得分:0)

此错误最初在ChromeDriver 2.42中修复,并在macOS直到2.44为止才存在(检查更改日志:http://chromedriver.chromium.org/downloads)。
因此,对于每个遇到此问题的人都有一个解决方案:更新驱动程序版本