Это мой файл conftest.py:
Код: Выделить всё
import pytest_asyncio
import asyncio
from playwright.async_api import async_playwright
from src.page_object.factory.playwright import PWPageOjectFactory
@pytest_asyncio.fixture(scope="session")
def event_loop(request):
"""Create an instance of the default event loop for each test case."""
loop = asyncio.get_event_loop_policy().new_event_loop()
yield loop
loop.close()
@pytest_asyncio.fixture(scope="module")
async def browser():
async with async_playwright() as p:
browser = await p.chromium.launch()
yield browser
await browser.close()
@pytest_asyncio.fixture(scope="module")
async def page(browser):
factory = PWPageOjectFactory("https://www.google.com", browser)
print(factory.url)
page = await factory.create_page_object()
print(page)
return page
Код: Выделить всё
import pytest
from src.page_object.element.playwright import PWElement
from src.page_object.page.playwright import PWPageObject
pytest_plugins = ("pytest_asyncio",)
@pytest.mark.asyncio
async def test_po_factory(page):
assert page is not None
assert isinstance(page, PWPageObject)
@pytest.mark.asyncio
async def test_get_active_element(page):
element = await page.get_active_element()
assert element is not None
assert isinstance(element, PWElement)
@pytest.mark.asyncio
async def test_navigate(page):
element = await page.get_active_element()
await page.navigate_forward()
new_element = await page.get_active_element()
assert element.get_attribute("id") != new_element.get_attribute("id")
await page.navigate_backward()
new_element = await page.get_active_element()
assert element.get_attribute("id") == new_element.get_attribute("id")
Чего мне здесь не хватает?
Что я пробовал:
- Раньше у меня были фикстуры в области модуля в тестовом файле, и поведение было таким же. Я понимаю, что это ничего не меняет.
- Я удалил фикстуру event_loop из файла conftest.py и получил тот же результат.
- Я искал способы запуска всех своих тестов без использования плагина Playwright для pytest, так как считаю, что должен быть способ запускать тесты без него.
- Я нашел здесь аналогичный вопрос, но на него нет ответа, поэтому я спрашиваю о моем конкретном случае, который также касается драматурга.
Это результат pytest -vvv -s:
Код: Выделить всё
(example) C:\Users\MyUser\Desktop\projects\example>pytest -vvv -s
================================================= test session starts =================================================
platform win32 -- Python 3.12.2, pytest-8.1.1, pluggy-1.4.0 -- C:\Users\MyUser\miniconda3\envs\example\python.exe
cachedir: .pytest_cache
rootdir: C:\Users\MyUser\Desktop\projects\example
plugins: asyncio-0.23.6
asyncio: mode=Mode.STRICT
collected 5 items
tests/test_pageobject.py::test_po_factory https://www.google.com
PASSED
tests/test_pageobject.py::test_get_active_element

Возможно, есть и другие детали, которые я не упомянул:
- Я занимаюсь разработкой в среде conda
- Я использую компьютер под управлением Windows
Подробнее здесь: https://stackoverflow.com/questions/783 ... est-passes