【问题标题】:How to maximize the browser window in Selenium WebDriver (Selenium 2) using C#?如何使用 C# 在 Selenium WebDriver (Selenium 2) 中最大化浏览器窗口?
【发布时间】:2011-03-12 11:48:21
【问题描述】:

有没有办法通过 C# 使用 WebDriver (Selenium 2) 最大化浏览器窗口?

【问题讨论】:

标签: c# selenium selenium-webdriver


【解决方案1】:

将此功能添加到 WebDriver 存在一个悬而未决的问题,可在此处跟踪:http://code.google.com/p/selenium/issues/detail?id=174

一种解决方法是使用JavascriptExector,如下所示:

public void resizeTest() {
    driver.Navigate().GoToUrl("http://www.example.com/");
((IJavaScriptExecutor)driver).ExecuteScript("window.resizeTo(1024, 768);");
}

【讨论】:

  • 两件事:1)如果您关心可见的内容,您可能希望在使其全屏之前将窗口移动到原点。 2) 如果屏幕尺寸是可变的,您可以在运行时使用 javascript screen 对象获取它们。考虑到这些点,javascript可能应该是:window.moveTo(0,0); window.resizeTo(screen.width, screen.height);
  • 请注意,在 Mac 上的 Firefox 中将窗口移动到 (0,0) 时出现问题。它似乎没有正确考虑其标题区域。将窗口移动到 (0,1) 似乎实际上将它移动到 (0,0),所以一个错误可以帮助另一个错误。此时您可以正确最大化窗口。
  • 应该是JavascriptExecutor实例IJavaScriptExecutor
【解决方案2】:

您可以在 WebDriver 中使用Selenium Emulation

selenium = new WebDriverBackedSelenium(driver,url);
selenium.windowMaximize();

【讨论】:

  • 他们在 C# 版本的 webdriver 中没有 Selenium Emulation。至少在 2.0a4 中还没有(只是看到他们发布了一个新版本,但还没有检查出来)。但是上面的 javascript 代码效果很好。
  • 而且它也不支持iPhoneDriver,例如
  • 不幸的是,WebDriverBackedSelenium.windowMaximize() 在 Firefox 7 或 Chrome 14 中不起作用(尽管它在 IE8 中起作用)。它在后台发出一个 window.resize() Javascript 命令,但是这两个浏览器都忽略了它。 @joey-v 的解决方案适用于 Chrome。并且 Luke Inman-Semerau 发布了解决方案here;
【解决方案3】:

在 Python 中有一个函数可以用来最大化窗口,即 window_maximize()。这就是我使用它的方式。希望这会有所帮助 -

from selenium import selenium
sel = selenium('localhost', 4444, '*firefox', 'http://10.77.21.67/')
sel.start()
sel.open('/')
sel.wait_for_page_to_load(60000)
#sel.window_focus()
sel.window_maximize()
png = sel.capture_screenshot_to_string()
f = open('screenshot.png', 'wb')
f.write(png.decode('base64'))
f.close()
sel.stop()

【讨论】:

    【解决方案4】:

    如果您使用的是 Chrome 驱动程序,则可以设置功能

        var capabilities = new DesiredCapabilities();
    
        var switches = new List<string>
                           {
                               "--start-maximized"
                           };
    
        capabilities.SetCapability("chrome.switches", switches);
    
        new ChromeDriver(chromedriver_path, capabilities);
    

    【讨论】:

      【解决方案5】:

      以下 Selenium Java 代码 sn-p 为我工作:

      driver.manage().window().setPosition(new Point(0,0));
      java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
      Dimension dim = new Dimension((int) screenSize.getWidth(), (int) screenSize.getHeight());
      driver.manage().window().setSize(dim);
      

      【讨论】:

        【解决方案6】:

        你可以使用这样的东西(C#):

        driver.Manage().Window.Size = new Size(1024, 768);
        

        【讨论】:

        • 不幸的是,ChromeDriver 会抛出异常。虽然适用于 IE 和 Firefox。
        • 在 Selenium C# 中使用此代码现在应该可以正常工作,因为 ChromeDriver 现在由 Google 提供(尽管它适用于 selenium 3)。或者,您可以使用最大化功能或通过选项添加以下参数:“--start-maximized”
        【解决方案7】:

        C# 客户端驱动程序:

        driver = new FirefoxDriver(firefoxProfile);
        driver.Manage().Window.Size = new System.Drawing.Size(System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width+10, System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height+10);
        

        ===> 还添加对 .NET 程序集“System.Windows.Forms”的引用

        ...唯一的问题是它没有正确定位
        ...如果您可以更正此问题,请发表评论

        【讨论】:

          【解决方案8】:

          以下是在 C# 中对我有用的方法,firefoxDriver 对类来说是全局的:

          在使用中:

          using System.Drawing;
          using System.Windows.Forms;
          

          在代码中:

          this.firefoxDriver = new FirefoxDriver();
          this.firefoxDriver.Manage().Window.Position = new Point(0, 0);
          this.firefoxDriver.Manage().Window.Size = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
          

          【讨论】:

            【解决方案9】:

            我使用了这个解决方案

                        OpenQA.Selenium.Chrome.ChromeOptions chromeoptions = new OpenQA.Selenium.Chrome.ChromeOptions();
                        chromeoptions.AddArgument("--start-maximized");
                        OpenQA.Selenium.Chrome.ChromeDriver chrome = new OpenQA.Selenium.Chrome.ChromeDriver(chromeoptions);
            

            【讨论】:

              【解决方案10】:

              driver.Manage().Window.Maximize();

              这适用于 IE 和 Firefox。铬不工作。 ChromeDriver 项目为此提交了一个错误。

              同时,chrome 的解决方法是实现 Joey V. 和 Coder323 的建议。

              ChromeOptions options = new ChromeOptions();
              options.addArgument("--start-maximized");
              driver = new ChromeDriver(options);
              

              【讨论】:

              • firefox 的这种方式是唯一有效的方式,javascript 在 selenium 2.21 上没有任何作用
              • 对于区分大小写的 Java => driver.manage().window().maximize();
              • AttributeError: 'WebDriver' object has no attribute 'Manage'
              • 好吧。我会说谢谢 :) 它确实适用于我的 chromedriver。
              • 我正在使用 FF53 和 Selenium WebDriver 3.3.0 。 driver.Manage().Window.Maximize();为我工作
              【解决方案11】:

              对于 IE 和 Firefox:

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

              对于 Chrome:

              ChromeOptions options = new ChromeOptions();
              options.addArguments("--start-maximized");
              driver = new ChromeDriver( options )
              

              【讨论】:

              • C# 是这样的。 driver.Manage().Window.Maximize();
              • driver.manage().window().maximize();也适用于 chrome
              • 谢谢 Chris,C# 需要大写方法:this。 driver.Manage().Window.Maximize();
              【解决方案12】:

              通过下面的代码我可以最大化窗口,

              ((JavascriptExecutor) driver).executeScript("if(window.screen){
                  window.moveTo(0, 0);
                  window.resizeTo(window.screen.availWidth, window.screen.availHeight);
                  };");
              

              【讨论】:

                【解决方案13】:
                using System.Windows.Forms;
                using System.Drawing;
                
                public static void MaximizeBrowser(this IE myBrowser)
                {
                    myBrowser.SizeWindow(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
                }
                

                我使用了 Jim 的代码,但稍作修改以与 WatiN 和 C# 一起使用以最大化浏览器。

                【讨论】:

                  【解决方案14】:

                  测试步骤/场景:
                  1. 打开浏览器并导航到TestURL
                  2.最大化浏览器

                  使用 C# (.NET) 最大化浏览器:

                  driver.Manage().Window.Maximize();
                  

                  使用 Java 最大化浏览器:

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

                  用 Java 做的另一种方式:

                  Toolkit toolkit = Toolkit.getDefaultToolkit();
                  Dimension screenResolution = new Dimension((int) 
                                      toolkit.getScreenSize().getWidth(), (int) 
                                      toolkit.getScreenSize().getHeight());
                  
                  driver.manage().window().setSize(screenResolution);
                  

                  【讨论】:

                  • 如果 chrome docker 容器在 sun.awt.HeadlessToolkit.getScreenSize(HeadlessToolkit.java:284) 出现错误 java.awt.HeadlessException,这将失败。你以前遇到过这个问题吗?
                  • 我试过 driver.Manage().Window.Maximize();在 FF 上的 Selenium WebDriver C# 中,它运行良好。我还没有尝试使用 Chrome。
                  • 这对我有用,但我必须在最后一行之前添加driver.manage().window().setPosition(new Point(0,0));,否则窗口不会位于正确的位置。
                  • swanhella:感谢分享这个
                  【解决方案15】:

                  这对我来说很好。

                  Capybara.current_session.driver.browser.manage.window.resize_to(1800, 1000)
                  

                  【讨论】:

                    【解决方案16】:

                    对于 Java:

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

                    它可以在 IE、Mozilla、Chrome 中运行

                    【讨论】:

                    • 我如何为 AndroidDriver() 设置相同的值;
                    【解决方案17】:

                    对于Webdriverjs(node.js),下面最大化chrome窗口。

                    var webdriver = require('selenium-webdriver');
                    var driver = new webdriver.Builder().
                    withCapabilities(webdriver.Capabilities.chrome()).build();
                    driver.manage().window().maximize();
                    driver.get('hxxp://localhost:8888');
                    

                    【讨论】:

                      【解决方案18】:

                      我尝试了上面的许多答案,但没有一个效果很好。 我的 chrome 驱动程序版本是 2.7,我使用 selenium-java vesion 是 2.9.0。 官方文档建议使用:

                      var capabilities = new DesiredCapabilities();
                      var switches = new List<string>
                                             {
                                                 "--start-maximized"
                                             };
                      capabilities.SetCapability("chrome.switches", switches);    
                      new ChromeDriver(chromedriver_path, capabilities);
                      

                      以上也行不通。我检查了 chrome 驱动程序JsonWireProtocolhttp://code.google.com/p/selenium/wiki/JsonWireProtocol

                      chrome的diver协议提供了最大化窗口的方法:

                      /session/:sessionId/window/:windowHandle/maximize,
                      

                      但是这个命令在 selenium-java 中没有使用。这意味着您还可以自己将命令发送到 chrome。一旦我这样做了,它就可以工作了。

                      【讨论】:

                        【解决方案19】:

                        Java

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

                        Python

                        driver.maximize_window()
                        

                        红宝石

                        @driver.manage.window.maximize
                        

                        max_width, max_height = driver.execute_script("return [window.screen.availWidth, window.screen.availHeight];")
                        @driver.manage.window.resize_to(max_width, max_height)
                        

                        target_size = Selenium::WebDriver::Dimension.new(1600, 1268)
                        @driver.manage.window.size = target_size
                        

                        【讨论】:

                          【解决方案20】:

                          对于 C#:

                          driver.Manage().Window.Maximize();
                          

                          对于 Java:

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

                          【讨论】:

                            【解决方案21】:

                            这个选项对我来说很好:

                            ChromeOptions options = new ChromeOptions();
                            options.addArguments("start-fullscreen");
                            

                            此选项适用于所有操作系统。

                            【讨论】:

                              【解决方案22】:

                              以下代码行将最大化 IE、Chrome 和 Mozilla

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

                              帖子中提到的上述代码行和其他解决方法不适用于 NodeWebKit 浏览器,因此作为一种解决方法,我必须使用如下所述的本机 C# 代码:

                              public static void MaximiseNWKBrowser(IWebDriver d)
                                      {
                                          var body = UICommon.GetElement(By.TagName("body"), d);
                                          body.Click();
                                          string alt = "%";
                                          string space = " ";
                                          string down = "{DOWN}";
                                          string enter = "{ENTER}";
                                          SendKeys.SendWait(alt + space);
                                          for(var i = 1; i <= 6; i++)
                                          {
                                              SendKeys.SendWait(down);
                                          }
                                          SendKeys.SendWait(enter);            
                                      }
                              

                              所以这个解决方法基本上使用“ALT+SPACE”来调出浏览器操作菜单,从选项中选择“MAXIMIZE”并按“ENTER”

                              【讨论】:

                                【解决方案23】:

                                Chrome 驱动已经支持:

                                Java:

                                webDriver = new ChromeDriver();
                                webDriver.manage().window().maximize();
                                

                                【讨论】:

                                  【解决方案24】:

                                  我们发现新驱动程序库存在错误。您可以使用能够处理新浏览器版本的稍微旧的 jar。

                                  主要的通用选项是:-

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

                                  您还可以使用其他选项来最大化浏览器窗口。

                                  例子:-

                                  添加以下选项并将其传递给驱动程序:-

                                      chromeOptions.addArguments("--start-maximized");
                                  

                                  完整的代码如下所示:-

                                  System.setProperty("webdriver.chrome.driver","D:\\Workspace\\JmeterWebdriverProject\\src\\lib\\chromedriver.exe");
                                  ChromeOptions chromeOptions = new ChromeOptions();
                                  chromeOptions.addArguments("--start-maximized");
                                  driver = new ChromeDriver(chromeOptions);
                                  

                                  Toolkit toolkit = Toolkit.getDefaultToolkit();
                                  int Width = (int) toolkit.getScreenSize().getWidth();
                                  int Height = (int)toolkit.getScreenSize().getHeight();
                                  //For Dimension class, Import following library "org.openqa.selenium.Dimension"  
                                  driver.manage().window().setSize(new Dimension(Width,Height));
                                  driver.get("https://google.com");
                                  

                                  在 safari 上试试这个:-

                                  JavascriptExecutor jse = (JavascriptExecutor)driver;
                                  String screenWidth = jse.executeScript("return screen.availWidth").toString();
                                  String screenHeight = jse.executeScript("return screen.availHeight").toString();
                                  int intScreenWidth = Integer.parseInt(screenWidth);
                                  int intScreenHeight = Integer.parseInt(screenHeight);
                                  Dimension d = new Dimension(intScreenWidth, intScreenHeight);
                                  driver.manage.window.setSize(d);
                                  

                                  【讨论】:

                                    【解决方案25】:

                                    只需使用Window.Maximize() 命令

                                    WebDriver driver= new ChromeDriver()
                                    driver.Manage().Window.Maximize();  
                                    

                                    【讨论】:

                                      【解决方案26】:

                                      对我来说,上述解决方案在使用 Selenium Web Driver C# + Chrome 时都不起作用:

                                      • window.resizeTo(1024, 768); - 我要使用整个屏幕
                                      • --start-maximized - 它被忽略了
                                      • driver.manage().window().maximize(); - 不起作用,因为它需要一些扩展程序,并且我不允许使用 Chrome 扩展程序

                                      我设法使用InputSimulator 让它工作:

                                      var inputSim = new InputSimulator();
                                      // WinKey + UP = Maximize focused window
                                      inputSim.Keyboard.ModifiedKeyStroke(VirtualKeyCode.LWIN, VirtualKeyCode.UP);
                                      

                                      【讨论】:

                                        【解决方案27】:

                                        我也遇到了同样的问题,不过可以用下面的代码解决这个问题。

                                        driver.manage().window().fullscreen();
                                        

                                        【讨论】:

                                          【解决方案28】:

                                          您可以尝试使用此代码最大化 chrome 窗口。

                                          ChromeOptions options = new ChromeOptions();
                                          options.addArguments("--window-size=1920,1080");
                                          
                                          WebDriver driver = new ChromeDriver(options);
                                          

                                          【讨论】:

                                          • 虽然提供纯代码的答案是可以接受的,但如果您还可以提供代码解释并帮助人们理解它解决问题的原因,它通常对社区更有用。这通常会减少后续问题的数量,并且可以真正帮助新开发人员理解底层概念。这在这里尤其重要,那里已经有 27 个其他答案;值得指出是什么使您的方法与现有答案不同。您介意用更多细节更新您的问题吗?
                                          【解决方案29】:

                                          对于 Chrome

                                          ChromeOptions options = new ChromeOptions();
                                          IWebDriver driver = new ChromeDriver(options);
                                          driver.Manage().Window.Maximize();
                                          

                                          【讨论】:

                                            猜你喜欢
                                            • 2012-05-25
                                            • 2020-05-27
                                            • 2012-12-12
                                            • 2017-04-01
                                            • 2017-07-27
                                            • 2016-03-07
                                            • 2013-05-26
                                            • 1970-01-01
                                            • 2021-07-22
                                            相关资源
                                            最近更新 更多