java - WebDriverException : unknown error: failed to change window state to maximized, 当前状态对于 MAC OS X 上的 Chrome 70 和 Chromedriver 2.43 是正常的

标签 java macos selenium google-chrome selenium-chromedriver

我们在 Mac 上,使用 Chrome 版本 70.0.3538.67(官方构建)(64 位),ChromeDriver 2.43.600229。出现 Chrome 窗口,但 URL 停留在“数据:”。 (下面的堆栈跟踪)

我们找到了使用带有 chromedriver 2.43 的 Chrome 版本 69 的解决方法,但是,Chrome 继续坚持 self 更新。

我们正在运行 Selenium-java 3.4、htmlunit-driver 2.27、testng 6.9.4、junit 4.7 以及 maven-compiler-plugin 3.6.1、maven-surefire-plugin 2.22.0。

org.openqa.selenium.WebDriverException: unknown error: failed to change window state to maximized, current state is normal
  (Session info: chrome=70.0.3538.67)
  (Driver info: chromedriver=2.43.600229 (3fae4d0cda5334b4f533bede5a4787f7b832d052),platform=Mac OS X 10.13.6 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 107 milliseconds
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: 'edited', ip: 'edited', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.13.6', java.version: '1.8.0_131'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{mobileEmulationEnabled=false, hasTouchScreen=false, platform=MAC, acceptSslCerts=false, goog:chromeOptions={debuggerAddress=localhost:52400}, acceptInsecureCerts=false, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, setWindowRect=true, unexpectedAlertBehaviour=, applicationCacheEnabled=false, rotatable=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.43.600229 (3fae4d0cda5334b4f533bede5a4787f7b832d052), userDataDir=/var/folders/cd/rrq4w8sd3gz92ygpfx5_kwtw0000gp/T/.org.chromium.Chromium.DCVcH3}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, version=70.0.3538.67, browserConnectionEnabled=false, nativeEvents=true, locationContextEnabled=true, cssSelectorsEnabled=true}]
Session ID: adb51408a3b04f990288d09604daa3a9
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:671)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:694)
    at org.openqa.selenium.remote.RemoteWebDriver$RemoteWebDriverOptions$RemoteWindow.maximize(RemoteWebDriver.java:925)
    at ufis.common.TestSuiteUtils.getDriver(TestSuiteUtils.java:59)
    at ufis.test.cv.categories.research.independentresearch.IndependentResearchValidationTests.setUpClass(IndependentResearchValidationTests.java:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:517)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:140)
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:170)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:104)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:748)

最佳答案

这个错误信息...

org.openqa.selenium.WebDriverException: unknown error: failed to change window state to maximized, current state is normal

...暗示 ChromeDriver 无法最大化 Chrome 浏览器 客户端的窗口状态。


已更换有问题的 Mac OSX ChromeDriver

在 Chrome 版本 70 发布后,一些用户报告说在 Mac 上使用 ChromeDriver 最大化浏览器窗口不再有效。 ChromeDriver 团队已调查此问题,并为其创建了修复程序。带有修复程序的 ChromeDriver 版本现在可在以下位置获得:


ChromeDriver 发布电子邮件快照

ChromeDriver_new


但是,您的主要问题是您使用的二进制文件版本之间的不兼容,如下所示:

  • 您的JDK 版本1.8.0_131,它非常古老
  • 您的Selenium 客户端 版本是3.4.0,几乎是一年

从另一个角度来看,这个问题看起来像是来自Feature request : ChromeDriver to support window resizing over a remote connection的回归问题。 .

ChromeDriver v2.43Release Notes明确提到:

ChromeDriver to support window resizing over a remote connection

但是,根据最佳实践,要最大化 Chrome 浏览器 客户端,建议使用 ChromeOptions 类,如下所示:

System.setProperty("webdriver.chrome.driver", "C:\\your_directory\\chromedriver.exe");
ChromeOptions opt = new ChromeOptions();
opt.addArguments("disable-infobars");
opt.addArguments("--start-maximized");
opt.addArguments("--disable-extensions");
WebDriver driver = new ChromeDriver(opt);
driver.get("https://google.com");

引用

您可以在 driver.manage().window().maximize() issue with ChromeDriver 2.33 中找到详细的讨论


更新(2018 年 11 月 20 日)

  • ChromeDriver 2.44 已发布。
  • ChromeDriver 2.44 支持 6971 的 Chrome 版本
  • 此版本类似于 ChromeDriver 2.43,但修复了其他错误。
  • 预计将于 12 月初发布支持 chrome 72.x 的 ChromeDriver。

关于java - WebDriverException : unknown error: failed to change window state to maximized, 当前状态对于 MAC OS X 上的 Chrome 70 和 Chromedriver 2.43 是正常的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52883098/

相关文章:

java - 我需要使用 java.awt.Robot.send() 发送任意文本字符串

swift - NSResponder 子类中的 UndoManager (macOS)

java.sql.Timestamp 到具有微秒精度的 String

java - 如何在java中清除控制台窗口

java - 在 Mac OS X 上将 tomcat jar/lib 目录添加到 eclipse 类路径

java - 选择 facebook 按钮 webdriver java

PHPUnit 和 Selenium : setUpBeforeClass() not called

python - Selenium python 自动点击

java - 将数据从数据库导入到 GemFire

ios - 有没有办法快速在后台线程和当前 View Controller 之间进行通信?