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

nukf8bse  于 2023-02-08  发布在  其他
关注(0)|答案(7)|浏览(365)

我最近升级了我的chrome版本到60,chromedriver版本到2. 31。帖子说,当我试图最大化浏览器窗口时,我已经开始得到下面的异常。

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

org.openqa.selenium.WebDriverException:未知错误:无法将窗口状态更改为最大化,当前状态正常(会话信息: chrome = 60.0.3112.78)(驱动程序信息:Chrome驱动程序= 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8),平台= Linux 4.2.0 - 27-通用x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:108毫秒构建信息:版本:"2.53.1",修订版本:'a36b8b1cd5757287168e54b817830adce9b0158d',时间:'2016 - 06 - 30 19:26:09'系统信息:主持人:"bb-blr-prod-stage-stg1 - 01",IP地址:"10.3.211.2",www.example.com:"Linux",操作系统架构:os.name"4.2.0 - 27-通用",Java版本:"1.7.0_80"会话ID:驱动程序信息:org. openqa. selenium. chrome. Chrome驱动程序功能{平台= LINUX,接受SSL证书= true,javascript启用= true,浏览器名称= chrome,Chrome = {用户数据目录=/tmp/. org. chromium. chromium. WABPhO,Chrome驱动程序版本= 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8)},网络连接启用=假,意外警报行为=,可旋转=假,设置窗口矩形=真,位置上下文启用=真,移动仿真已启用=假,页面加载策略=正常,版本= 60.0.3112.78,获取堆快照=真,cssSelectors已启用=真,数据库已启用=假,句柄警报=真,浏览器连接已启用=假,网络存储已启用=真,本机事件=真,具有触摸屏=假,应用程序缓存已启用=假,获取屏幕快照=真}}, networkConnectionEnabled=false, unexpectedAlertBehaviour=, rotatable=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, takesScreenshot=true}]
我使用Geb上的ChromeDriver在无头模式下运行测试。

  • Chrome版本-60.0.3112.78
  • Chrome驱动程序版本-2.31.488763
  • 操作系统-Ubuntu 14.04.4 LTS
  • selenium 版本-2.53.1
  • WebDriver语言绑定
  • 吉卜-0.13.1
to94eoyn

to94eoyn1#

由于您是在headless模式下运行测试,因此没有active浏览器窗口可用。

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

在这种情况下总是会失败,因为驱动程序不知道要最大化哪个窗口,因为没有可用的窗口。
你可以按照@DebanjanB所提到的操作,或者你可以用一个特定的屏幕大小,比如1440 x900等,来启动无头浏览器,这样做

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

[编辑]在大多数情况下,我已经看到maximize()方法也可以在headless中工作--然而我还没有在CI系统上测试过。

jslywgbw

jslywgbw2#

在代码中添加以下ChromeOption

options.addArguments("--window-size=1325x744");

另请参考this blog了解更多信息

hgqdbh6s

hgqdbh6s4#

代码行中似乎有一个小的差异:

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

您需要将此行代码替换为:

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

如果此解决方案不能解决您的问题,要在headless中使用 * Google Chrome *,您可以使用以下任一解决方案:

使用start-maximized

建议通过ChromeOptions类最大化 * Google Chrome * 浏览器,如下所示:

  • 代码块:
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized");
options.addArguments("--headless");
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File(".\\Screenshots\\using-start-maximized.png"));
driver.quit();
  • 浏览器快照:

使用--window-size=1400,600

或者,您也可以为预期的window size * 添加**参数 *,如下所示:

  • 代码块:
ChromeOptions options = new ChromeOptions();
options.addArguments("--window-size=1400,600");
options.addArguments("--headless");
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File(".\\Screenshots\\using-window-size.png"));
driver.quit();
  • 浏览器快照:

使用setSize(new Dimension(1440, 900))

  • 代码块:
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.google.com/");
driver.manage().window().setSize(new Dimension(1440, 900));
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File(".\\Screenshots\\using-setSize.png"));
driver.quit();
  • 浏览器快照:

时间;日期

您可以在Selenium Firefox headless中找到关于***最大化窗口***的基于Selenium python客户端的讨论,返回不同的结果

eufgjt7s

eufgjt7s5#

我使用chromedriver 2.30和chrome浏览器v60通过量角器。我运行测试headless太虽然我不这样做通过chromeoptions。而是我运行测试headless使用xvfb-run在unix发行版。我遇到这个问题也虽然它失败随机为我。见下面的堆栈

[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运行headless,而不是通过chrome选项运行headless。

gdx19jrr

gdx19jrr6#

此错误最初在ChromeDriver 2.42中得到修复,并且在2.44之前的macOS中实际存在(检查更改日志:http://chromedriver.chromium.org/downloads)。
所以对于每个面对这个问题的人来说,都有一个解决方案:更新驱动程序版本

xkrw2x1b

xkrw2x1b7#

这是Ubuntu 20.04 LTS上的无头谷歌Chrome的已知问题。我只是使用Java的awt包来获得whatevr屏幕的最大分辨率,即Ubuntu LTS的xvbf和Windows 10的当前屏幕,并在ChromeOption的arggment中设置它来配置Webdriver
屏幕尺寸=工具包.getDefaultToolkit().getScreenSize();
添加参数(“--窗口大小=”+(整数)屏幕尺寸.获取宽度()+“,”+(整数)屏幕尺寸.获取高度());

相关问题