首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Python)函数修饰器将剧作家Page对象传递给包装函数

(Python)函数修饰器将剧作家Page对象传递给包装函数
EN

Stack Overflow用户
提问于 2021-04-19 16:24:13
回答 1查看 436关注 0票数 1

:我正在尝试创建一个函数装饰器,它将一个剧作家Page(playwright.sync_api._generated.Page)对象)传递给包装好的函数。

发出:对于大多数函数调用,我将能够返回函数调用返回的值。但是,由于剧作家需要browser.close()调用,所以我不能简单地返回Page对象。我不确定问题是在(1)我定义的函数装饰器中,还是(2)函数装饰符的用法中。

我试着在pytest固定装置之后给我的装潢师做模特。使用pytest,我会做这样的事情:

代码语言:javascript
复制
@pytest.fixture(scope="module")
def playwright_page():
    with sync_playwright() as play:
        browser = play.chromium.launch()
        page = browser.new_page()
        yield page
        browser.close()

然后

代码语言:javascript
复制
def open_google(playwright_page):
    playwright_page.goto("https://google.com")

函数译码器

代码语言:javascript
复制
>>> 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

代码语言:javascript
复制
>>> @playwright_page
def open_google():
    page.goto("https://google.com")

    
>>> open_google()
<generator object playwright_page.<locals>.wrapper at 0x0000015C5F6CBC10>

尝试2

代码语言:javascript
复制
>>> @playwright_page
    def open_google():
        page = next(page)
        page.goto("https://google.com")

    
>>> open_google()
<generator object playwright_page.<locals>.wrapper at 0x0000015C5FDB7F90>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-19 22:45:39

我应该调用Page对象并传递Page对象,而不是试图生成pytest对象,比如pytest的对象。

代码语言:javascript
复制
>>> 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")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67165764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档