Это базовая структура моего проекта:

Мне интересно узнать, как лучше всего использовать приспособления pytest для инициализации объектов моей страницы, поэтому мне придется сделать это только один раз, а затем только для вызова фикстур в соответствующих тестах.
Это мой файл test_login.py:
Код: Выделить всё
import pytest
from playwright.async_api import async_playwright
from ...infra.page_objects.login.login_page import LoginPage
@pytest.fixture
async def browser():
async with async_playwright() as playwright:
browser = await playwright.chromium.launch()
yield browser
await browser.close()
@pytest.fixture
async def login_page_fixture(browser):
page = await browser.new_page()
print("page created")
login_page = LoginPage(page)
print("login_page created")
yield login_page
await page.close()
@pytest.mark.asyncio
async def test_login_with_valid_credentials(login_page_fixture):
login_page = await login_page_fixture
print(f"login page url: {login_page.url}")
Код: Выделить всё
from playwright.async_api import Page, expect
class LoginPage:
def __init__(self, page: Page):
self.page = page
self.url = 'https://opensource-demo.orangehrmlive.com/web/index.php/auth/login'
self.header = page.locator(".orangehrm-login-branding")
self.header_logo = page.get_by_role("img", name="company-branding")
self.username_field = page.get_by_placeholder("Username")
self.password_field = page.get_by_placeholder("Password")
self.login_button = page.get_by_role("button", name="Login")
self.forgot_password_link = page.get_by_text("Forgot your password?")
async def goto(self) :
await self.page.goto(self.url)
async def verify_page_loaded(self) :
await expect(self.header).to_be_visible()
await expect(self.login_title).to_be_visible()
async def login(self, username: str, password: str) :
await self.fill_username(username)
await self.fill_password(password)
await self.click_login_button()
async def fill_username(self, username:str) :
await self.username_field.fill(username)
async def fill_password(self, password: str) :
await self.password_field.fill(password)
async def click_login_button(self) :
await self.login_button.click()
async def click_forgot_password(self) :
await self.forgot_password_link.click()
Код: Выделить всё
> login_page_fixture =
@pytest.mark.asyncio
async def test_login_with_valid_credentials(login_page_fixture):
> print(f"login page url: {login_page_fixture.url}")
E AttributeError: 'coroutine' object has no attribute 'url'
test_login2.py:22: AttributeError
================================================================================= short test summary info =================================================================================
FAILED test_login2.py::test_login_with_valid_credentials - AttributeError: 'coroutine' object has no attribute 'url'
==================================================================================== 1 failed in 0.05s ====================================================================================
sys:1: RuntimeWarning: coroutine 'login_page_fixture' was never awaited
Мобильная версия