2016-05-12 125 views
4

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

driver.set_window_size(1920, 1080) 

但是,下面的代码为ChromeIE返回不同的值:

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

为视区(其中网页内容显示)的大小是不同的( 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设置浏览器窗口的大小?

+0

你试过吗? http://stackoverflow.com/questions/15397483/how-do-i-set-browser-width-and-height-in-selenium-webdriver这是一个java的例子,但有一个python等效代码 –

+0

@Pete,你意思???我已经做到了:) – Andersson

+0

@RafaelAlmeida,感谢您的建议,但它似乎是一个不同的问题 – Andersson

回答

4

这里是函数来设置视口大小:

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];") 
+0

这也将包括水平和垂直页面滚动条的大小(每个大约17px),但它确定:)谢谢 – Andersson

+0

要获得没有滚动条大小的视口大小,请使用'document.body.clientWidth'和'document.body.clientHeight'分别代替'window.innerWidth'和'window.innerHeight'。 – kanaka

1

我使用这个:

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

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

+1

从文档:“[...]这将更改外部窗口维度,而不仅仅是视图端口[ ...]“ – crusy