我运行下面的代码,在 Google Chrome、Microsoft Edge 和 Firefox 上截取 Django Admin 的 3 张屏幕截图。 *我使用 Django、pytest-django 和 Selenium:
import os
import pytest
from selenium import webdriver
def take_screenshot(driver, name):
# time.sleep(1)
os.makedirs(os.path.join("screenshot", os.path.dirname(name)), exist_ok=True)
driver.save_screenshot(os.path.join("screenshot", name))
@pytest.fixture(params=["chrome", "edge", "firefox"], scope="class")
def driver_init(request):
if request.param == "chrome":
web_driver = webdriver.Chrome()
request.cls.browser = "chrome"
if request.param == "edge":
web_driver = webdriver.Edge()
request.cls.browser = "edge"
if request.param == "firefox":
web_driver = webdriver.Firefox()
request.cls.browser = "firefox"
request.cls.driver = web_driver
yield
web_driver.close()
@pytest.mark.usefixtures("driver_init")
class Screenshot:
def screenshot_admin(self, live_server):
self.driver.get(("%s%s" % (live_server.url, "/admin/")))
take_screenshot(self.driver, "admin/" + self.browser + ".png")
然后,我可以截取 3 张屏幕截图,根据浏览器的不同,它们具有不同的窗口大小,如下所示:
chrome.png
:
edge.png
:
firefox.png
:
那么,什么是以及如何知道 Selenium 中浏览器的默认屏幕截图窗口大小?
您可以使用 get_window_size() 来获取 Selenium 中浏览器的屏幕截图窗口大小,如下所示:
...
@pytest.mark.usefixtures("driver_init")
class Screenshot:
def screenshot_admin(self, live_server):
print(self.driver.get_window_size()) # Here
self.driver.get(("%s%s" % (live_server.url, "/admin/")))
take_screenshot(self.driver, "admin/" + self.browser + ".png")
输出:
$ pytest -q -rP
...
.. [100%]
=============== PASSES ================
_ Screenshot.screenshot_admin[chrome] _
...
-------- Captured stdout call ---------
{'width': 945, 'height': 1012}
__ Screenshot.screenshot_admin[edge] __
...
-------- Captured stdout call ---------
{'width': 945, 'height': 1012}
_ Screenshot.screenshot_admin[firefox] _
...
-------- Captured stdout call ---------
{'width': 1292, 'height': 934}
3 passed in 18.33s
此外,您还可以分别获得
width
和height
,如下图:
...
@pytest.mark.usefixtures("driver_init")
class Screenshot:
def screenshot_admin(self, live_server):
print(self.driver.get_window_size().get('width')) # Here
print(self.driver.get_window_size().get('height')) # Here
print(self.driver.get_window_size()['width']) # Here
print(self.driver.get_window_size()['height']) # Here
self.driver.get(("%s%s" % (live_server.url, "/admin/")))
take_screenshot(self.driver, "admin/" + self.browser + ".png")