簡體   English   中英

(Python) Function 裝飾器傳遞編劇頁面 object 到包裝 function

[英](Python) Function decorator to pass Playwright Page object to wrapped function

目標:我正在嘗試創建一個 function 裝飾器,它將劇作家Pageplaywright.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM