f14002559e
refactor(components): 调整头部和页脚布局样式 style(hero-section): 更新徽章动画效果 docs: 添加测试框架README文档 test: 实现首页、导航和联系表单的测试用例 ci: 添加CI测试脚本和配置
210 lines
7.0 KiB
Python
210 lines
7.0 KiB
Python
"""
|
|
导航测试模块
|
|
测试网站导航功能
|
|
"""
|
|
|
|
import pytest
|
|
from typing import Dict, Any
|
|
|
|
from pages.home_page import HomePage
|
|
|
|
|
|
class TestNavigation:
|
|
"""导航测试类"""
|
|
|
|
@pytest.mark.navigation
|
|
@pytest.mark.smoke
|
|
def test_navigate_to_home(self, home_page: HomePage):
|
|
"""测试导航到首页"""
|
|
home_page.navigate()
|
|
home_page.assert_url_equals(home_page._get_full_url("/"))
|
|
|
|
@pytest.mark.navigation
|
|
@pytest.mark.smoke
|
|
def test_navigate_to_contact_page(self, home_page: HomePage, contact_page):
|
|
"""测试导航到联系页面"""
|
|
contact_page.navigate()
|
|
contact_page.assert_url_equals(
|
|
home_page._get_full_url("/contact")
|
|
)
|
|
|
|
@pytest.mark.navigation
|
|
@pytest.mark.interactive
|
|
def test_click_navigation_to_about(self, home_page: HomePage):
|
|
"""测试点击导航到关于区域"""
|
|
home_page.navigate()
|
|
home_page.click_navigation_link("about")
|
|
home_page.assert_element_visible("#about", timeout=5000)
|
|
|
|
@pytest.mark.navigation
|
|
@pytest.mark.interactive
|
|
def test_click_navigation_to_services(self, home_page: HomePage):
|
|
"""测试点击导航到服务区域"""
|
|
home_page.navigate()
|
|
home_page.click_navigation_link("services")
|
|
home_page.assert_element_visible("#services", timeout=5000)
|
|
|
|
@pytest.mark.navigation
|
|
@pytest.mark.interactive
|
|
def test_click_navigation_to_products(self, home_page: HomePage):
|
|
"""测试点击导航到产品区域"""
|
|
home_page.navigate()
|
|
home_page.click_navigation_link("products")
|
|
home_page.assert_element_visible("#products", timeout=5000)
|
|
|
|
@pytest.mark.navigation
|
|
@pytest.mark.interactive
|
|
def test_click_navigation_to_news(self, home_page: HomePage):
|
|
"""测试点击导航到新闻区域"""
|
|
home_page.navigate()
|
|
home_page.click_navigation_link("news")
|
|
home_page.assert_element_visible("#news", timeout=5000)
|
|
|
|
@pytest.mark.navigation
|
|
@pytest.mark.interactive
|
|
def test_click_navigation_to_contact(self, home_page: HomePage):
|
|
"""测试点击导航到联系区域"""
|
|
home_page.navigate()
|
|
home_page.click_navigation_link("contact")
|
|
home_page.assert_element_visible("#contact", timeout=5000)
|
|
|
|
@pytest.mark.navigation
|
|
def test_smooth_scroll_to_section(self, home_page: HomePage):
|
|
"""测试平滑滚动到区域"""
|
|
home_page.navigate()
|
|
|
|
# 先滚动到页面底部
|
|
home_page.scroll_to_bottom()
|
|
|
|
# 然后滚动到顶部
|
|
home_page.scroll_to_top()
|
|
|
|
# 验证
|
|
home_page.assert_element_visible("header")
|
|
|
|
@pytest.mark.navigation
|
|
def test_scroll_to_each_section(self, home_page: HomePage):
|
|
"""测试滚动到每个区域"""
|
|
home_page.navigate()
|
|
|
|
sections = ["home", "about", "services", "products", "news", "contact"]
|
|
|
|
for section in sections:
|
|
home_page.scroll_to_section(section)
|
|
home_page.assert_element_visible(f"#{section}", timeout=5000)
|
|
|
|
@pytest.mark.navigation
|
|
def test_page_back(self, home_page: HomePage, contact_page):
|
|
"""测试返回上一页"""
|
|
# 先访问联系页面
|
|
contact_page.navigate()
|
|
contact_page.assert_url_equals(home_page._get_full_url("/contact"))
|
|
|
|
# 返回首页
|
|
home_page.go_back()
|
|
|
|
# 验证
|
|
home_page.assert_url_equals(home_page._get_full_url("/"))
|
|
|
|
@pytest.mark.navigation
|
|
def test_page_forward(self, home_page: HomePage, contact_page):
|
|
"""测试前进到下一页"""
|
|
# 访问首页
|
|
home_page.navigate()
|
|
|
|
# 后退(此时没有上一页,应该保持在首页)
|
|
home_page.go_back()
|
|
|
|
# 前进(此时没有下一页,应该保持在首页)
|
|
home_page.go_forward()
|
|
|
|
home_page.assert_url_equals(home_page._get_full_url("/"))
|
|
|
|
@pytest.mark.navigation
|
|
def test_page_reload(self, home_page: HomePage):
|
|
"""测试页面刷新"""
|
|
home_page.navigate()
|
|
home_page.reload()
|
|
home_page.verify_page_loaded()
|
|
|
|
@pytest.mark.navigation
|
|
def test_navigation_link_count(self, home_page: HomePage):
|
|
"""测试导航链接数量"""
|
|
home_page.navigate()
|
|
|
|
nav_links = home_page._find_all("nav a")
|
|
|
|
# 应该有6个导航链接
|
|
assert len(nav_links) >= 5, f"导航链接数量不足,当前{len(nav_links)}个"
|
|
|
|
@pytest.mark.navigation
|
|
def test_navigation_link_text(self, home_page: HomePage):
|
|
"""测试导航链接文本"""
|
|
home_page.navigate()
|
|
|
|
expected_links = ["首页", "关于我们", "核心业务", "产品服务", "新闻动态", "联系我们"]
|
|
|
|
for link_text in expected_links:
|
|
link = home_page.page.locator(f"nav a:has-text('{link_text}')")
|
|
assert link.count() > 0, f"未找到导航链接: {link_text}"
|
|
|
|
@pytest.mark.navigation
|
|
@pytest.mark.responsive
|
|
def test_navigation_mobile(self, home_page: HomePage):
|
|
"""测试移动端导航"""
|
|
# 设置移动端视口
|
|
home_page.page.set_viewport_size({"width": 375, "height": 667})
|
|
home_page.navigate()
|
|
|
|
# 移动端应该显示汉堡菜单
|
|
menu_button = home_page.page.locator("button:has-text('菜单'), .mobile-menu")
|
|
|
|
if menu_button.count() > 0:
|
|
home_page.logger.info("移动端显示汉堡菜单")
|
|
else:
|
|
home_page.logger.info("移动端导航可能已内联显示")
|
|
|
|
@pytest.mark.navigation
|
|
def test_url_hash_navigation(self, home_page: HomePage):
|
|
"""测试URL哈希导航"""
|
|
home_page.navigate()
|
|
|
|
# 直接访问带哈希的URL
|
|
home_page.navigate(path="/#about")
|
|
home_page.wait_for_load()
|
|
|
|
# 验证滚动到指定区域
|
|
home_page.assert_element_visible("#about", timeout=5000)
|
|
|
|
@pytest.mark.navigation
|
|
def test_browser_back_button(self, home_page: HomePage, contact_page):
|
|
"""测试浏览器后退按钮"""
|
|
# 访问首页
|
|
home_page.navigate()
|
|
|
|
# 访问联系页面
|
|
contact_page.navigate()
|
|
|
|
# 使用浏览器后退
|
|
home_page.page.go_back()
|
|
|
|
# 验证返回首页
|
|
home_page.assert_url_equals(home_page._get_full_url("/"))
|
|
|
|
@pytest.mark.interactive
|
|
def test_cta_button_navigation(self, home_page: HomePage):
|
|
"""测试CTA按钮导航"""
|
|
home_page.navigate()
|
|
|
|
# 查找CTA按钮(如果有)
|
|
cta_button = home_page.page.locator(
|
|
"a[href*='contact'], a.cta, a.button:has-text('联系')"
|
|
)
|
|
|
|
if cta_button.count() > 0:
|
|
cta_button.first.click()
|
|
home_page.wait_for_load()
|
|
|
|
# 应该导航到联系区域
|
|
home_page.assert_element_visible("#contact", timeout=5000)
|