# -*- coding: utf-8 -*-
# Run the docker image using the following command:
# docker run -d -p 4444:4444 selenium/standalone-chrome
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
import logging
import time
import pytest

# driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.FIREFOX)
# HOME_PAGE = 'http://121.4.94.30:91/'


# 我使用的是Chrome浏览器,所以我又通过安装webdriver-manager插件来配置浏览器的驱动
# 我通过 'pip install webdriver-manager==4.00' 命令安装webdriver-manager,并且设置其版本为4.00
driver = webdriver.Chrome(ChromeDriverManager().install())
HOME_PAGE = 'http://127.0.0.1:5000/'
driver.implicitly_wait(10)


@pytest.mark.parametrize("test_input",("‘test1’","'test2'","“test3”","it's","hello,I'm linshan","Happy New Year!?","My favorite book is 《Harry Potter》。"))
@pytest.mark.parametrize("expected",(["test1"],["test2"],["test3"],["it's"],["hello","i'm","linshan"],["happy","new","year"],["potter","harry","my","favorite","book","is"]))
def test_bug553_LinShan(test_input,expected):
    try:
        # 打开对应地址的网页
        driver.get(HOME_PAGE)

        # 浏览器最大窗口化
        driver.maximize_window()

        # 判断网页源代码中是否有English Pal -文字
        assert 'English Pal -' in driver.page_source

        # 将测试的数据输入到主页的textarea里
        driver.find_element_by_xpath("//textarea[@name='content']").send_keys(Keys.CONTROL, "a")
        driver.find_element_by_xpath("//textarea[@name='content']").send_keys(test_input)
        time.sleep(2)

        # 点击按钮获取单词
        driver.find_element_by_xpath("//input[@value='get文章中的词频']").click()
        time.sleep(2)

        # 获取筛选后的单词
        words = driver.find_elements_by_xpath("//p/a")

        # 遍历获取到的单词,并判断单词与预期的相同
        for word in words:
            # 判断单词是否在预期结果中
            assert word.text in expected
            
        # 返回上一页网页
        driver.find_element_by_xpath("//input[@value='确定并返回']").click()
        time.sleep(2)

    except Exception as e:
        # 输出异常信息
        logging.error(e)
        # 关闭浏览器
    finally:
        driver.quit()