WebDriverException:未知错误:无法将窗口状态更改为最大化,MAC OS X上的Chrome 70和Chromedriver 2.43当前状态正常

时间:2018-10-18 21:48:24

标签: java macos selenium google-chrome selenium-chromedriver

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

我们发现使用带有chromedriver 2.43的Chrome版本69的变通办法,但是Chrome仍然坚持要自行更新。

我们正在运行带有Maven-compiler-plugin 3.6.1,maven-surefire-plugin 2.22.0的Selenium-java 3.4,htmlunit-driver 2.27,testng 6.9.4,junit 4.7。

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)

5 个答案:

答案 0 :(得分:6)

此错误消息...

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

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


已替换Buggy Mac OSX ChromeDriver

Chrome版本70发行后,有些人报告说使用ChromeDriver在Mac上最大化浏览器窗口不再有效。 ChromeDriver小组已经研究了此问题,并为此创建了修复程序。现在可以在以下位置使用带有修复程序的ChromeDriver构建:


ChromeDriver版本电子邮件的快照

ChromeDriver_new


但是,您的主要问题是正在使用的二进制文件版本之间的不兼容性

  • 您的 JDK版本 1.8.0_131 ,这是非常古老的版本。
  • 您的 Selenium Client 版本是 3.4.0 ,它的版本要早一年

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

Release Notes中的

ChromeDriver v2.43 已明确提及:

  

ChromeDriver支持通过远程连接调整窗口大小

不过,根据最佳实践来最大化 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 支持Chrome版本 69 71
  • 此版本类似于ChromeDriver 2.43 ,但具有其他错误修复。
  • 支持 chrome 72.x 的ChromeDriver预计将于12月初发布。

答案 1 :(得分:0)

使用Selenium 3.14.0,Chrome 70,Chromedriver 2.43也会发生同样的事情。

对我来说,解决方法是从我的chromeoptions中删除--start-maximized标志,并在打开浏览器后调用执行以下操作的方法:

    driver.manage().window().setPosition(new Point(0, 0));
    driver.manage().window().setSize(new Dimension(1920, 1080));

我们还在运行CentOS的AWS EC2容器中运行远程自动化。 在Windows和Mac中,在本地运行时上述标记没有问题。

答案 2 :(得分:0)

对于使用Codeception面临此问题的用户,只需将window_size选项更改为false。

- Webdriver:
   url: 'http://localhost/'
   window_size: false

答案 3 :(得分:0)

将chromedriver更新到版本 2.44 为我解决了问题。不再收到错误,但是窗口在屏幕上方水平最大化。但是,测试有效。

选项1.通过自制软件安装

如果您以前是通过自制程序安装的,则已将其移到酒桶中。因此,卸载旧版本:

brew uninstall chromedriver

然后从桶安装新版本:

brew tap homebrew/cask
brew cask install chromedriver

现在,您应该在路径中拥有新版本,错误消失了。

选项2。下载驱动程序

从以下位置下载驱动程序

https://chromedriver.storage.googleapis.com/index.html?path=2.44/

并将其放在您的路径上。

答案 4 :(得分:0)

我在运行软件包套件时观察到了这个问题,并尝试了ChromeOptions,但没有成功。因此尝试了这种方法并为我工作:

   Dimension ExpectedDimension=new Dimension(Screen dimensions accordingly)
   Dimension Before_Maximising= Driver.manage().window().getSize();
   Logging.info("Before_Maximising"+Before_Maximising);
   if(Before_Maximising.equals(ExpectedDimension)) {
        Logging.info("Already maximised");
   }
    else {
    Driver.manage().window().setSize(ExpectedDimension);;
    Dimension After_Maximising = Driver().manage().window().getSize();
    Logging.info("After_Maximising"+After_Maximising);
    }