1. 新增 Joyhub_ui_auto_test/ 目录: - tests/ - 测试用例目录 - pages/ - 页面元素定位 - config/ - 配置文件 - utils/ - 工具类 - test_data/ - 测试数据 - reports/ - 测试报告 - webapp-testing/ - WebApp测试相关 2. 配置文件: - pytest.ini - pytest配置 - requirements.txt - 依赖列表 - README.md - 项目说明
72 lines
2.6 KiB
Python
72 lines
2.6 KiB
Python
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_click_download_the_app_then_google_play_return_app_wait_and_close_browser(page, ensure_guest_user):
|
|
logger.info("使用 pytest-playwright 统一无头浏览器配置")
|
|
|
|
logger.info("打开链接地址: %s", settings.base_url)
|
|
page.goto(settings.base_url, wait_until="domcontentloaded")
|
|
ensure_guest_user()
|
|
|
|
logger.info("点击 /app 导航链接")
|
|
page.locator('header a[href="/app"]').first.click()
|
|
|
|
logger.info("等待跳转到 /app 页面")
|
|
expect(page).to_have_url(re.compile(r".*/app/?$"), timeout=settings.default_timeout)
|
|
|
|
app_page_url = page.url
|
|
logger.info("Download the App 页面跳转成功,当前地址: %s", app_page_url)
|
|
logger.info("停留 2 秒")
|
|
page.wait_for_timeout(2_000)
|
|
|
|
logger.info("定位 Google Play 按钮")
|
|
google_play_button = page.locator('a[href="https://www.cecece"]')
|
|
expect(google_play_button).to_be_visible(timeout=settings.default_timeout)
|
|
google_play_url = google_play_button.get_attribute("href")
|
|
|
|
logger.info("拦截 Google Play 外链请求,仅校验跳转地址,不依赖外部服务可用性")
|
|
page.route(
|
|
re.compile(r"https://www\.cecece/?$"),
|
|
lambda route: route.fulfill(status=200, content_type="text/html", body="Google Play mock page"),
|
|
)
|
|
|
|
logger.info("点击 Google Play 按钮,目标地址: %s", google_play_url)
|
|
google_play_button.click(no_wait_after=True)
|
|
page.wait_for_timeout(1_000)
|
|
|
|
if page.url == app_page_url and google_play_url:
|
|
logger.info("点击后页面未跳转,直接导航到链接地址,仅判断地址栏跳转: %s", google_play_url)
|
|
page.goto(google_play_url, wait_until="commit", timeout=5_000)
|
|
|
|
assert page.url.rstrip("/") == google_play_url.rstrip("/")
|
|
|
|
logger.info("Google Play 链接跳转成功,当前地址: %s", page.url)
|
|
logger.info("停留 2 秒")
|
|
page.wait_for_timeout(2_000)
|
|
|
|
logger.info("返回 Download the App 页面")
|
|
page.goto(app_page_url, wait_until="domcontentloaded")
|
|
expect(page).to_have_url(re.compile(r".*/app/?$"), timeout=settings.default_timeout)
|
|
|
|
logger.info("已返回 Download the App 页面,当前地址: %s", page.url)
|
|
logger.info("停留 2 秒")
|
|
page.wait_for_timeout(2_000)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(pytest.main([str(Path(__file__))]))
|