import time
import pytest
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.common.exceptions import NoSuchElementException, TimeoutException
from selenium.webdriver import ActionChains

# 导入 app/test/conftest.py 中的 signup 函数
from app.test.conftest import signup

def select_text_in_article(driver):
    elem = driver.find_element(By.CSS_SELECTOR, '#article')
    
    action = ActionChains(driver)
    # 从左上角点击并按住
    action.move_to_element_with_offset(elem, 0, 0)
    action.click_and_hold()
    # 移动到右下角的某个位置(例如,右下角偏移100, 100)
    action.move_by_offset(100, 100)
    action.release()
    action.perform()

def verify_highlight(driver):
    # 检查是否有高亮的元素
    highlighted_elements = driver.execute_script("""
        return Array.from(document.querySelectorAll('#article mark')).map(mark => mark.innerText);
    """)
    print("Highlighted elements:", highlighted_elements)
    return len(highlighted_elements) > 0

def test_bug561(URL, driver):
    try:
        driver.maximize_window()
        username, password = signup(URL, driver)

        time.sleep(3)  # 等待页面加载完成

        select_text_in_article(driver)
        if verify_highlight(driver):
            print("Text highlighted after selection")
        else:
            print("No text highlighted after selection")

        # 点击“下一页”按钮
        next_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'load_next_article')))
        next_button.click()
        print("Clicked next article button.")
        
        # 等待“上一页”按钮加载完成
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'load_pre_article')))
        print("Next article loaded.")

        # 点击“上一页”按钮
        prev_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'load_pre_article')))
        prev_button.click()
        print("Clicked previous article button.")
        
        # 确认高亮是否保留
        if verify_highlight(driver):
            print("Highlighted text preserved after switching articles")
        else:
            print("Highlighted text not preserved after switching articles")
        
    except Exception as e:
        print(f"Error during test: {e}")
    finally:
        driver.quit()
        print("Driver closed.")

if __name__ == "__main__":
    pytest.main([__file__])