Skip to content

在hook.py中before_all_extend方法中启动浏览器,在运行feature时遇到了同步异步的问题 #329

@VencentMei

Description

@VencentMei

问题描述 / Describe the bug
在before_all_extend方法中使用sync_playwright()启用了浏览器,手动编写step,但在运行feature时报错It looks like you are using Playwright Sync API inside the asyncio loop.

问题复现步骤 / To Reproduce
源码:
hook.py文件

from playwright.sync_api import Page, sync_playwright
from flybirds.core.global_context import GlobalContext
import flybirds.utils.flybirds_log as log
import flybirds.core.global_resource as gr

def get_page() -> Page:
    """
    获取页面对象
    """
    return gr.get_value("plugin_page").page

def before_all_extend(context):
    playwright = sync_playwright().start()
    try:
        browser = playwright.chromium.launch(headless=False)
        browser_context = browser.new_context(ignore_https_errors=True)
        page = browser_context.new_page()
        log.info("before_all_extend")
        page.goto("https://www.jd.com")
        page.wait_for_load_state("domcontentloaded")
        gr.set_value("playwright", playwright)
        gr.set_value("browser", browser)
        gr.set_value("plugin_page", page)

    except Exception as e:
        log.error("before_all_extend error:" + str(e))
        if browser:
            browser.close()
        raise


def after_all_extend(context):
    browser = gr.get_value("browser")
    playwright = gr.get_value("playwright")
    if browser:
        browser.close()
    if playwright:
        playwright.stop()
    else:
        log.error("Error: Playwright or Browser not properly initialized.")

steps.py

import flybirds.core.global_resource as gr
import pscript.custom_handle.operation as operation
from flybirds.utils.flybirds_log import logger as log
from behave import step, when
from playwright.sync_api import Page

def get_page() -> Page:
    """
    获取页面对象
    """
    return gr.get_value("plugin_page")

@step("访问百度")
def visit_baidu(context):
    page = get_page()
    page.goto("https://www.baidu.com")
    page.wait_for_load_state("domcontentloaded")
    log.info("visit_baidu")

test_baidu.feature

# language: zh-CN

功能: 测试同浏览器跳转

    场景: 测试跳转百度
         访问百度

报错

2024-11-27 15:08:42,876 - flybirds_log - INFO - before_all_extend
2024-11-27 15:08:43,236 - flybirds_log - INFO - [web run] OnBefore run event!
2024-11-27 15:08:43,236 - flybirds_log - ERROR - Init browser has error! Error msg is:
2024-11-27 15:08:43,236 - flybirds_log - ERROR - It looks like you are using Playwright Sync API inside the asyncio loop.
Please use the Async API instead.
2024-11-27 15:08:43,237 - flybirds_log - INFO - global initialization error
2024-11-27 15:08:43,237 - flybirds_log - INFO - Traceback (most recent call last):
  File "C:\Users\12077\miniconda3\envs\test3.10\lib\site-packages\flybirds\core\plugin/event\web_run.py", line 67, in run
    OnBefore.init_ui_driver(context)
  File "C:\Users\12077\miniconda3\envs\test3.10\lib\site-packages\flybirds\core\plugin/event\web_run.py", line 32, in init_ui_driver
    play_wright, browser = ui_driver.init_driver()
TypeError: cannot unpack non-iterable NoneType object

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions