from pathlib import Path import re import sys import pytest from playwright.sync_api import expect PROJECT_ROOT = Path(__file__).resolve().parents[1] if str(PROJECT_ROOT) not in sys.path: sys.path.insert(0, str(PROJECT_ROOT)) from config.settings import settings from utils.logger import get_logger logger = get_logger(__name__) def test_partnerships_page_key_content_visible(page): logger.info("使用 pytest-playwright 统一无头浏览器配置") logger.info("打开 Partnerships 页面") page.goto("/partnerships", wait_until="domcontentloaded") logger.info("校验 Partnerships 页面地址、标题和页面内容已加载") expect(page).to_have_url(re.compile(r".*/partnerships/?$"), timeout=settings.default_timeout) assert page.title().strip() expect(page.locator("body")).to_be_visible(timeout=settings.default_timeout) visible_headings_count = page.get_by_role("heading").count() logger.info("当前 Partnerships 页面标题元素数量: %s", visible_headings_count) assert visible_headings_count > 0 def test_partnerships_contact_form_fields_visible_and_editable(page): logger.info("使用 pytest-playwright 统一无头浏览器配置") logger.info("打开 Partnerships 页面") page.goto("/partnerships", wait_until="domcontentloaded") logger.info("动态校验合作表单字段可见并可输入") form_inputs = page.locator('section input[type="text"]:not([readonly])') form_textareas = page.locator("section textarea") submit_button = page.locator("section button").last name_input = form_inputs.nth(0) email_input = form_inputs.nth(1) business_input = form_inputs.nth(2) collaboration_input = page.locator('section input[readonly]').first message_input = form_textareas.first expect(name_input).to_be_editable(timeout=settings.default_timeout) expect(email_input).to_be_editable(timeout=settings.default_timeout) expect(business_input).to_be_editable(timeout=settings.default_timeout) expect(message_input).to_be_editable(timeout=settings.default_timeout) name_input.fill("Joyhub Tester") email_input.fill("tester@example.com") business_input.fill("https://example.com") message_input.fill("I want to explore product testing collaboration.") expect(name_input).to_have_value("Joyhub Tester", timeout=settings.default_timeout) expect(email_input).to_have_value("tester@example.com", timeout=settings.default_timeout) expect(business_input).to_have_value("https://example.com", timeout=settings.default_timeout) expect(collaboration_input).to_be_visible(timeout=settings.default_timeout) expect(collaboration_input).to_have_attribute("readonly", "", timeout=settings.default_timeout) expect(message_input).to_have_value("I want to explore product testing collaboration.", timeout=settings.default_timeout) expect(submit_button).to_be_visible(timeout=settings.default_timeout) if __name__ == "__main__": raise SystemExit(pytest.main([str(Path(__file__))]))