import random
import string
import time

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

HOME_PAGE = "http://127.0.0.1:5000/"

word = []
uname = 'lanhui'
password = 'l0ve1t'
def has_punctuation(s):  #用于检查单词是否包含标点符号
    return [c for c in s if c in string.punctuation] != []

def login(driver):
    driver.get(HOME_PAGE)
    assert 'English Pal - Learn English smartly!' in driver.page_source
    # 登录
    login_elem = driver.find_element_by_link_text('登录')
    login_elem.click()

    username_input = driver.find_element_by_id('username')
    username_input.send_keys(uname)

    password_input = driver.find_element_by_id('password')
    password_input.send_keys(password)

    login_btn = driver.find_element_by_xpath('//button[text()="登录"]')  # 找到登录按钮
    login_btn.click()

    # 确保页面加载完
    try:
        WebDriverWait(driver, 10).until(
            EC.title_is("EnglishPal Study Room for " + uname)  # 替换为实际的页面标题
        )
    except Exception as e:
        print("页面加载失败:", e)
        driver.quit()
        exit()
    assert 'EnglishPal Study Room for ' + uname in driver.title

def test_save_selected_word():
    global word
    # 调用本地chromedriver
    driver = webdriver.Chrome(executable_path="C:\Program Files\Google\Chrome\Application\chromedriver.exe")
    try:
        login(driver)
        #点击单词添加到已选单词列表
        # 获取文章内容
        elem = driver.find_element_by_id('text-content')
        essay_content = elem.text

        #随机选择单词 长度不小于6个字符,并且不包含标点符号
        elem = driver.find_element_by_id('selected-words')
        word = random.choice(essay_content.split())
        while 'font>' in word or 'br>' in word or 'p>' in word or len(word) < 6 or has_punctuation(word):
            word = random.choice(essay_content.split())
        print(type(word))  #str
        elem.send_keys(word) #单词输入到输入框

        # 检查单词是否已成功添加到已选列表
        # 再次获取<textarea>中的文本内容,以确认单词已被输入
        updated_textarea_content = elem.get_attribute('value')
        # 检查<textarea>中的内容是否包含输入的单词
        assert word == updated_textarea_content
        # 检查是否保存到 localStorage
        stored_words = driver.execute_script('return localStorage.getItem("selectedWords");')
        assert word == stored_words
        #检查退出登录、关闭web页面后是否保存已选单词
        # 退出登录
        elem = driver.find_element_by_link_text('退出')
        elem.click()

        # 关闭当前标签页
        driver.execute_script("window.open('');window.close();")

        # 等待一会儿,让浏览器有足够的时间关闭标签页
        time.sleep(2)

        # 重新打开一个新的标签页
        driver.execute_script("window.open('');")
        driver.switch_to.window(driver.window_handles[-1])  # 切换到新打开的标签页

        login(driver)
        elem = driver.find_element_by_id('selected-words')
        textarea_content = elem.get_attribute('value')
        print(f'word:{word}')
        print(f'selected:{textarea_content}')
        assert word == textarea_content
    except Exception as e:
        print("An error occurred:", e)
    finally:
        # 关闭浏览器
        driver.quit()

test_save_selected_word()