如何设置浏览器视口大小

How to set browser viewport size

本文关键字:浏览器 视口 设置 何设置      更新时间:2023-09-26

我正在尝试创建一个跨浏览器的Python-Selenium测试脚本。所以我需要所有的结果都是相同的,无论我使用哪个webdriverChromeIE)。我可以设置浏览器窗口大小如下:

driver.set_window_size(1920, 1080)

但以下代码将为ChromeIE返回不同的值:

element = driver.find_element_by_xpath('some_xpath')
element.location

因为尽管窗口大小相同,但视口区域(显示web内容的地方)的大小不同(Chrome-1910x998、IE-1904x965)。为了得到这些值,我使用

driver.execute_script('return document.documentElement.clientHeight')
driver.execute_script('return document.documentElement.clientWidth')

所以我尝试了

driver.execute_script('document.documentElement.clientHeight = "990px";')
driver.execute_script('document.documentElement.clientWeight = "1900px";')

但运气不好

所以问题是如何在selenium中设置浏览器视口大小?

以下是设置视口大小的函数:

def set_viewport_size(driver, width, height):
    window_size = driver.execute_script("""
        return [window.outerWidth - window.innerWidth + arguments[0],
          window.outerHeight - window.innerHeight + arguments[1]];
        """, width, height)
    driver.set_window_size(*window_size)

用法:

from selenium import webdriver
driver = webdriver.Chrome()
# set the viewport size to 800 x 600
set_viewport_size(driver, 800, 600)
# display the viewport size
print driver.execute_script("return [window.innerWidth, window.innerHeight];")

这是@Florent B.的Java版本。答案:

        int width = "500";
        int height = "500";
        //Remove the window from fullscreen (optional), if it s in fullscreen the outerHeight is not accurate
        browser.manage().window().setSize(new Dimension(800,800));
        JavascriptExecutor js= (JavascriptExecutor)browser;
        String windowSize = js.executeScript("return (window.outerWidth - window.innerWidth + "+width+") + ',' + (window.outerHeight - window.innerHeight + "+height+"); ").toString();
        //Get the values
        width = Integer.parseInt(windowSize.split(",")[0]);
        height = Integer.parseInt(windowSize.split(",")[1]);
        //Set the window
        browser.manage().window().setSize(new Dimension(width, height));

这是@Florent B.的C#版本答案:

   public static void SetViewportSize(RemoteWebDriver driver, int width, int height)
{            
    var jsGetPadding = @"return [ window.outerWidth - window.innerWidth,window.outerHeight - window.innerHeight ];";
    var paddingArray = driver.ExecuteScript(jsGetPadding) as ReadOnlyCollection<object>; 
    driver.Manage().Window.Size = new Size(width + int.Parse(paddingArray[0].ToString()), height + int.Parse(paddingArray[1].ToString()));
}

用法:

  RemoteWebDriver driver = new EdgeDriver();
  SetViewportSize(driver,800, 800);

我使用的是:

driver.manage().window().setSize(new org.openqa.selenium.Dimension(1900, 990));

其中1900是宽度,990是高度。