import time
import os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.edge.options import Options as EdgeOptions

def test_player_analysis_page():
    """
    测试球员分析页面的功能
    """
    print("开始测试球员分析页面...")
    
    # 设置Edge浏览器选项
    options = EdgeOptions()
    # 不使用无头模式，方便观察测试过程
    # options.add_argument('--headless')  # 注释掉无头模式
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    
    # 初始化WebDriver (使用系统自动找到的EdgeDriver)
    try:
        print("正在初始化Edge浏览器...")
        driver = webdriver.Edge(options=options)
        print("Edge浏览器初始化成功")
    except Exception as e:
        print(f"无法启动Edge浏览器: {str(e)}")
        print("请确保已安装Edge浏览器")
        return
    
    try:
        # 访问球员分析页面 (根据实际运行情况，端口应为8301)
        print("正在访问页面: http://localhost:8301/player-analysis")
        driver.get("http://localhost:8301/player-analysis")
        print("页面加载成功")
        
        # 等待页面加载完成
        wait = WebDriverWait(driver, 15)  # 增加等待时间
        
        # 检查是否显示了联赛列表
        print("等待联赛列表加载...")
        time.sleep(3)  # 给更多时间加载数据
        
        # 尝试多种选择器查找联赛列表
        league_selectors = [
            ".league-panel .list-item",
            ".flag-item",
            "[data-testid='league-item']",
            ".league-item",
            "div[class*='league'][class*='panel'] div[class*='list']"
        ]
        
        leagues = []
        for selector in league_selectors:
            try:
                leagues = wait.until(
                    EC.presence_of_all_elements_located((By.CSS_SELECTOR, selector))
                )
                if leagues:
                    print(f"使用选择器 '{selector}' 找到 {len(leagues)} 个联赛")
                    break
            except:
                continue
        
        if not leagues:
            print("未找到联赛列表，打印页面源码用于调试:")
            print(driver.page_source[:2000])  # 打印前2000个字符
            return
            
        print(f"找到 {len(leagues)} 个联赛")
        
        # 点击第一个联赛
        if leagues:
            print("点击第一个联赛...")
            leagues[0].click()
            print("点击了第一个联赛")
            
            # 等待球队列表加载
            print("等待球队列表加载...")
            time.sleep(3)
            
            # 尝试多种选择器查找球队列表
            team_selectors = [
                ".team-panel .list-item",
                ".team-item",
                "[data-testid='team-item']",
                "div[class*='team'][class*='panel'] div[class*='list']"
            ]
            
            teams = []
            for selector in team_selectors:
                try:
                    teams = wait.until(
                        EC.presence_of_all_elements_located((By.CSS_SELECTOR, selector))
                    )
                    if teams:
                        print(f"使用选择器 '{selector}' 找到 {len(teams)} 个球队")
                        break
                except:
                    continue
            
            if not teams:
                print("未找到球队列表，打印页面源码用于调试:")
                print(driver.page_source[:2000])  # 打印前2000个字符
            else:
                print(f"找到 {len(teams)} 个球队")
            
            # 点击第一个球队
            if teams:
                print("点击第一个球队...")
                teams[0].click()
                print("点击了第一个球队")
                
                # 等待球员列表加载
                print("等待球员列表加载...")
                time.sleep(3)
                
                # 尝试多种选择器查找球员列表
                player_selectors = [
                    ".player-panel .list-item",
                    ".player-item",
                    "[data-testid='player-item']",
                    "div[class*='player'][class*='panel'] div[class*='list']"
                ]
                
                players = []
                for selector in player_selectors:
                    try:
                        players = wait.until(
                            EC.presence_of_all_elements_located((By.CSS_SELECTOR, selector))
                        )
                        if players:
                            print(f"使用选择器 '{selector}' 找到 {len(players)} 个球员")
                            break
                    except:
                        continue
                
                if not players:
                    print("未找到球员列表，打印页面源码用于调试:")
                    print(driver.page_source[:2000])  # 打印前2000个字符
                else:
                    print(f"找到 {len(players)} 个球员")
                
                # 点击第一个球员
                if players:
                    print("点击第一个球员...")
                    players[0].click()
                    print("点击了第一个球员")
                    
                    # 等待球员详情加载
                    print("等待球员详情加载...")
                    time.sleep(3)
                    
                    # 尝试多种选择器查找统计数据表格
                    table_selectors = [
                        ".stats-table",
                        "[data-testid='stats-table']",
                        "table[class*='stats']",
                        "table"
                    ]
                    
                    stats_table = None
                    for selector in table_selectors:
                        try:
                            stats_table = wait.until(
                                EC.presence_of_element_located((By.CSS_SELECTOR, selector))
                            )
                            if stats_table:
                                print(f"使用选择器 '{selector}' 找到统计数据表格")
                                break
                        except:
                            continue
                    
                    if not stats_table:
                        print("未找到球员统计数据表格，打印页面源码用于调试:")
                        print(driver.page_source[:2000])  # 打印前2000个字符
                    else:
                        print("球员统计数据表格已加载")
                    
                    # 检查表格中是否有数据行
                    if stats_table:
                        row_selectors = [
                            ".stats-table tbody tr",
                            "tbody tr",
                            "tr"
                        ]
                        
                        rows = []
                        for selector in row_selectors:
                            try:
                                rows = driver.find_elements(By.CSS_SELECTOR, selector)
                                if rows:
                                    print(f"使用选择器 '{selector}' 找到 {len(rows)} 行统计数据")
                                    break
                            except:
                                continue
                        
                        if not rows:
                            print("未找到统计数据行")
                        else:
                            print(f"找到 {len(rows)} 行统计数据")
                    
        print("测试完成")
        
    except Exception as e:
        print(f"测试过程中出现错误: {str(e)}")
        import traceback
        traceback.print_exc()
        # 打印页面源码以便调试
        print(f"页面标题: {driver.title}")
        print(f"页面URL: {driver.current_url}")
        
    finally:
        # 关闭浏览器
        input("按回车键关闭浏览器...")
        driver.quit()
        print("浏览器已关闭")

if __name__ == "__main__":
    test_player_analysis_page()