forked from mrlan/EnglishPal
				
			test: update test file, update username/password config, add pytest to requirements.txt
							parent
							
								
									83491ce28c
								
							
						
					
					
						commit
						b5bde9d33d
					
				
										
											Binary file not shown.
										
									
								
							|  | @ -11,3 +11,13 @@ def URL(): | |||
| def driver(): | ||||
|     my_driver = webdriver.Edge()  # uncomment this line if you wish to run the test on your laptop | ||||
|     return my_driver | ||||
| 
 | ||||
| 
 | ||||
| @pytest.fixture | ||||
| def UNAME(): | ||||
|     return 'lanhui' | ||||
| 
 | ||||
| 
 | ||||
| @pytest.fixture | ||||
| def PASSWORD(): | ||||
|     return 'l0ve1t' | ||||
|  |  | |||
|  | @ -1,98 +1,56 @@ | |||
| import random | ||||
| import string | ||||
| import time | ||||
| 
 | ||||
| from selenium import webdriver | ||||
| from selenium.webdriver.support.wait import WebDriverWait | ||||
| from selenium.webdriver.common.by import By | ||||
| from selenium.webdriver.support.ui import WebDriverWait | ||||
| from selenium.webdriver.support import expected_conditions as EC | ||||
| from conftest import driver, URL, UNAME, PASSWORD | ||||
| 
 | ||||
| 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 has_punctuation(s): | ||||
|     return any(c in string.punctuation for c in s) | ||||
| 
 | ||||
| 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) | ||||
| def login(driver, home, uname, password): | ||||
|     driver.get(home) | ||||
|     WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, '登录'))).click() | ||||
|     driver.find_element(By.ID, 'username').send_keys(uname) | ||||
|     driver.find_element(By.ID, 'password').send_keys(password) | ||||
|     driver.find_element(By.XPATH, '//button[text()="登录"]').click() | ||||
|     WebDriverWait(driver, 10).until(EC.title_is(f"EnglishPal Study Room for {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') | ||||
| def select_valid_word(driver): | ||||
|     elem = driver.find_element(By.ID, 'text-content') | ||||
|     essay_content = elem.text | ||||
|     valid_word = random.choice([word for word in essay_content.split() if len(word) >= 6 and not has_punctuation( | ||||
|         word) and 'font>' not in word and 'br>' not in word and 'p>' not in word]) | ||||
|     driver.find_element(By.ID, 'selected-words').send_keys(valid_word) | ||||
|     return valid_word | ||||
| 
 | ||||
|         #随机选择单词 长度不小于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 | ||||
| def test_save_selected_word(driver, URL, UNAME, PASSWORD): | ||||
|     try: | ||||
|         login(driver, URL, UNAME, PASSWORD) | ||||
|         word = select_valid_word(driver) | ||||
|         stored_words = driver.execute_script('return localStorage.getItem("selectedWords");') | ||||
|         assert word == stored_words | ||||
|         #检查退出登录、关闭web页面后是否保存已选单词 | ||||
|         # 退出登录 | ||||
|         elem = driver.find_element_by_link_text('退出') | ||||
|         elem.click() | ||||
| 
 | ||||
|         # 关闭当前标签页 | ||||
|         assert word == stored_words, "Selected word not saved to localStorage correctly" | ||||
|         # 退出并重新登录以检查存储的单词 | ||||
|         driver.find_element(By.LINK_TEXT, '退出').click() | ||||
|         driver.execute_script("window.open('');window.close();") | ||||
| 
 | ||||
|         # 等待一会儿,让浏览器有足够的时间关闭标签页 | ||||
|         time.sleep(2) | ||||
|         WebDriverWait(driver, 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) | ||||
|         login(driver, URL, UNAME, PASSWORD) | ||||
|         textarea_content = driver.find_element(By.ID, 'selected-words').get_attribute('value') | ||||
|         assert word == textarea_content, "Selected word not preserved after re-login" | ||||
|     finally: | ||||
|         # 关闭浏览器 | ||||
|         driver.quit() | ||||
| 
 | ||||
| test_save_selected_word() | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     test_save_selected_word(driver, URL, UNAME, PASSWORD) | ||||
|  |  | |||
|  | @ -4,3 +4,5 @@ PyYAML~=6.0 | |||
| pony==0.7.16 | ||||
| snowballstemmer==2.2.0 | ||||
| Werkzeug==2.2.2 | ||||
| 
 | ||||
| pytest~=8.1.1 | ||||
		Loading…
	
		Reference in New Issue