Files
smart-management-auto-test/zhyy/test_case/TestCase/UI自动化/switch4/test_switch4_page.py

276 lines
11 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import pytest
from playwright.sync_api import sync_playwright, expect
import allure
import os
import sys
import configparser
# 添加项目根目录到 Python 路径
current_file_path = os.path.abspath(__file__)
project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(current_file_path))))))
sys.path.insert(0, project_root)
# 配置参数
class Config:
"""测试配置类"""
PAGE_LOAD_WAIT = 5
ELEMENT_WAIT = 3
ACTION_WAIT = 2
FINAL_WAIT = 5
# 读取配置文件
def get_config():
config = configparser.ConfigParser()
config_file = os.path.join(project_root, 'base_framework', 'base_config', 'config.ini')
config.read(config_file, encoding='utf-8')
return config
@allure.feature('Switch4 Page')
class TestSwitch4Page:
"""Switch4 页面自动化测试用例"""
@classmethod
def setup_class(cls):
"""测试类设置,只执行一次"""
config = get_config()
cls.switch4_url = config.get('QA', 'switch4')
cls.playwright = sync_playwright().start()
cls.browser = cls.playwright.chromium.launch(
headless=False,
slow_mo=300
)
cls.context = cls.browser.new_context()
cls.page = cls.context.new_page()
@classmethod
def teardown_class(cls):
"""测试类清理,只执行一次"""
print(f"测试完成,{Config.FINAL_WAIT}秒后关闭浏览器...")
import time
time.sleep(Config.FINAL_WAIT)
cls.context.close()
cls.browser.close()
cls.playwright.stop()
@allure.title("测试页面导航和加载状态")
def test_page_navigation_and_load_state(self):
"""测试页面导航和加载状态"""
with allure.step("导航到页面"):
self.page.goto(self.switch4_url)
with allure.step("等待页面加载完成"):
self.page.wait_for_load_state('networkidle')
with allure.step("验证页面标题"):
# 直接检查标题是否包含 survey不区分大小写
title = self.page.title()
assert "survey" in title.lower(), f"页面标题不包含 survey实际标题: {title}"
with allure.step("验证页面可见性"):
expect(self.page.locator('body')).to_be_visible()
@allure.title("测试所有可交互元素")
def test_all_interactive_elements(self):
"""测试所有可交互元素(按钮、输入框、链接)"""
self.page.goto(self.switch4_url)
self.page.wait_for_load_state('networkidle')
with allure.step("测试 Back 按钮"):
back_button = self.page.get_by_role('button', name='Back')
expect(back_button).to_be_visible()
expect(back_button).to_be_enabled()
with allure.step("测试 Joyhub ID/邮箱输入框"):
joyhub_input = self.page.get_by_role('textbox', name='Your Joyhub ID or registered email')
expect(joyhub_input).to_be_visible()
expect(joyhub_input).to_be_enabled()
with allure.step("测试 Amazon Order ID 输入框"):
amazon_input = self.page.get_by_role('textbox', name='Your Amazon Order ID')
expect(amazon_input).to_be_visible()
expect(amazon_input).to_be_enabled()
with allure.step("测试 PayPal 按钮"):
paypal_button = self.page.get_by_role('button', name='PayPal')
expect(paypal_button).to_be_visible()
expect(paypal_button).to_be_enabled()
with allure.step("测试 Cash App 按钮"):
cashapp_button = self.page.get_by_role('button', name='Cash App')
expect(cashapp_button).to_be_visible()
expect(cashapp_button).to_be_enabled()
with allure.step("测试 Amazon Gift Card 按钮"):
giftcard_button = self.page.get_by_role('button', name='Amazon Gift Card')
expect(giftcard_button).to_be_visible()
expect(giftcard_button).to_be_enabled()
with allure.step("测试 PayPal/Venmo 邮箱输入框"):
paypal_email_input = self.page.get_by_role('textbox', name='Your PayPal/Venmo email')
expect(paypal_email_input).to_be_visible()
expect(paypal_email_input).to_be_enabled()
with allure.step("测试 Submit 按钮"):
submit_button = self.page.get_by_role('button', name='Submit')
expect(submit_button).to_be_visible()
with allure.step("测试电话号码链接"):
phone_link = self.page.get_by_role('link', name='+1(888)820-9880')
expect(phone_link).to_be_visible()
expect(phone_link).to_be_enabled()
@allure.title("测试空输入边界条件")
def test_empty_input_boundary(self):
"""测试空输入边界条件"""
self.page.goto(self.switch4_url)
self.page.wait_for_load_state('networkidle')
with allure.step("不输入任何内容,直接点击提交"):
submit_button = self.page.get_by_role('button', name='Submit')
expect(submit_button).to_be_disabled()
@allure.title("测试超长输入边界条件")
def test_long_input_boundary(self):
"""测试超长输入边界条件"""
self.page.goto(self.switch4_url)
self.page.wait_for_load_state('networkidle')
with allure.step("输入超长字符串到 Joyhub ID 输入框"):
long_string = 'a' * 500
joyhub_input = self.page.get_by_role('textbox', name='Your Joyhub ID or registered email')
joyhub_input.fill(long_string)
with allure.step("验证输入内容"):
expect(joyhub_input).to_have_value(long_string)
@allure.title("测试特殊字符输入边界条件")
@pytest.mark.parametrize("special_chars", [
"!@#$%^&*()",
"<script>alert('test')</script>",
"测试中文输入",
"日本語の入力",
"emoji 🚀🎉",
"\\n\\r\\t",
"..//..//etc/passwd"
])
def test_special_characters_input(self, special_chars):
"""测试特殊字符输入边界条件"""
self.page.goto(self.switch4_url)
self.page.wait_for_load_state('networkidle')
with allure.step(f"输入特殊字符: {special_chars[:20]}..."):
joyhub_input = self.page.get_by_role('textbox', name='Your Joyhub ID or registered email')
joyhub_input.fill(special_chars)
with allure.step("验证输入成功"):
expect(joyhub_input).to_have_value(special_chars)
@allure.title("测试正常表单填写流程")
def test_normal_form_submission(self):
"""测试正常表单填写流程"""
self.page.goto(self.switch4_url)
self.page.wait_for_load_state('networkidle')
with allure.step("选择 PayPal 支付方式"):
paypal_button = self.page.get_by_role('button', name='PayPal')
paypal_button.click()
with allure.step("输入 Joyhub ID"):
joyhub_input = self.page.get_by_role('textbox', name='Your Joyhub ID or registered email')
joyhub_input.fill('test@example.com')
with allure.step("输入 Amazon Order ID"):
amazon_input = self.page.get_by_role('textbox', name='Your Amazon Order ID')
amazon_input.fill('123-4567890-1234567')
with allure.step("输入 PayPal/Venmo 邮箱"):
paypal_email_input = self.page.get_by_role('textbox', name='Your PayPal/Venmo email')
paypal_email_input.fill('paypal@example.com')
with allure.step("验证所有输入"):
expect(joyhub_input).to_have_value('test@example.com')
expect(amazon_input).to_have_value('123-4567890-1234567')
expect(paypal_email_input).to_have_value('paypal@example.com')
@allure.title("测试按钮点击状态变化")
def test_button_state_changes(self):
"""测试按钮点击状态变化"""
self.page.goto(self.switch4_url)
self.page.wait_for_load_state('networkidle')
with allure.step("点击 PayPal 按钮"):
paypal_button = self.page.get_by_role('button', name='PayPal')
paypal_button.click()
with allure.step("验证 PayPal 按钮被选中"):
pass
with allure.step("点击 Cash App 按钮切换"):
cashapp_button = self.page.get_by_role('button', name='Cash App')
cashapp_button.click()
with allure.step("验证 Cash App 按钮被选中"):
pass
@allure.title("测试链接点击行为")
def test_link_click_behavior(self):
"""测试链接点击行为"""
self.page.goto(self.switch4_url)
self.page.wait_for_load_state('networkidle')
with allure.step("滚动到电话号码链接"):
phone_link = self.page.get_by_role('link', name='+1(888)820-9880')
phone_link.scroll_into_view_if_needed()
with allure.step("点击电话号码链接"):
phone_link.click()
with allure.step("验证链接仍然可见"):
expect(phone_link).to_be_visible()
@allure.title("测试页面标题和内容")
def test_page_content(self):
"""测试页面标题和内容"""
self.page.goto(self.switch4_url)
self.page.wait_for_load_state('networkidle')
with allure.step("验证页面主标题"):
main_title = self.page.get_by_role('heading', level=1, name='Try Our Toys for FREE')
expect(main_title).to_be_visible()
with allure.step("验证二级标题"):
before_start_title = self.page.get_by_role('heading', level=2, name='Before You Start')
expect(before_start_title).to_be_visible()
steps_title = self.page.get_by_role('heading', level=2, name='Simple Steps to Get Your Cashback')
expect(steps_title).to_be_visible()
with allure.step("验证页面描述"):
feedback_text = self.page.get_by_text('Leave Your Feedback for More Rewards')
expect(feedback_text).to_be_visible()
@allure.title("测试表单重置行为")
def test_form_reset(self):
"""测试表单重置行为"""
self.page.goto(self.switch4_url)
self.page.wait_for_load_state('networkidle')
with allure.step("填写表单"):
joyhub_input = self.page.get_by_role('textbox', name='Your Joyhub ID or registered email')
joyhub_input.fill('test@example.com')
amazon_input = self.page.get_by_role('textbox', name='Your Amazon Order ID')
amazon_input.fill('123-4567890-1234567')
with allure.step("刷新页面"):
self.page.reload()
self.page.wait_for_load_state('networkidle')
with allure.step("验证表单被重置"):
expect(joyhub_input).to_have_value('')
expect(amazon_input).to_have_value('')
if __name__ == "__main__":
pytest.main([__file__, "-v"])