[英](Python) Function decorator to pass Playwright Page object to wrapped function
目標:我正在嘗試創建一個 function 裝飾器,它將劇作家Page
( playwright.sync_api._generated.Page)
object 傳遞給包裝的 ZC1C425268E68385D1AB5074C17A9。
問題:對於大多數 function 調用,我將能夠返回 function 調用返回的值。 但是,由於 Playwright 需要browser.close()
調用,我不能簡單地返回Page
object。 我不確定問題出在(1)我定義的 function 裝飾器,還是(2)我使用 function 裝飾器。
在pytest
固定裝置之后,我嘗試了 model 我的裝飾器。 使用pytest
,我會做這樣的事情:
@pytest.fixture(scope="module")
def playwright_page():
with sync_playwright() as play:
browser = play.chromium.launch()
page = browser.new_page()
yield page
browser.close()
接着
def open_google(playwright_page):
playwright_page.goto("https://google.com")
Function 探測器:
>>> from playwright.sync_api import sync_playwright
>>> def playwright_page(func):
def wrapper(*args, **kwargs):
with sync_playwright() as play:
browser = play.chromium.launch()
page = browser.new_page()
yield page
browser.close()
return wrapper
嘗試 1 :
>>> @playwright_page
def open_google():
page.goto("https://google.com")
>>> open_google()
<generator object playwright_page.<locals>.wrapper at 0x0000015C5F6CBC10>
嘗試 2 :
>>> @playwright_page
def open_google():
page = next(page)
page.goto("https://google.com")
>>> open_google()
<generator object playwright_page.<locals>.wrapper at 0x0000015C5FDB7F90>
而不是試圖產生Page
object,例如pytest
夾具,我應該調用func
並傳遞Page
object。
>>> from playwright.sync_api import sync_playwright
>>> def playwright_page(func):
def wrapper():
with sync_playwright() as play:
browser = play.chromium.launch()
page = browser.new_page()
results = func(page)
browser.close()
return results
return wrapper
>>> @playwright_page
def open_google(page):
page.goto("https://google.com")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.