forked from mrlan/EnglishPal
				
			Compare commits
	
		
			1 Commits 
		
	
	
		
			Bug585-zha
			...
			Bug513-May
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | 1f9aa562f0 | 
|  | @ -54,12 +54,27 @@ def save_frequency_to_pickle(d, pickle_fname): | ||||||
|     pickle.dump(d2, f) |     pickle.dump(d2, f) | ||||||
|     f.close() |     f.close() | ||||||
| 
 | 
 | ||||||
| def unfamiliar(path,word): | 
 | ||||||
|     f = open(path,"rb") | ''' | ||||||
|  | Updated function loads or initializes a dictionary, increments word counts and appends | ||||||
|  |  timestamps, then saves changes, ensuring accurate tracking of unfamiliar words with timestamps. | ||||||
|  | ''' | ||||||
|  | def unfamiliar(path, word): | ||||||
|  |     try: | ||||||
|  |         with open(path, "rb") as f: | ||||||
|             dic = pickle.load(f) |             dic = pickle.load(f) | ||||||
|     dic[word] += [datetime.now().strftime('%Y%m%d%H%M')] |     except FileNotFoundError: | ||||||
|     fp = open(path,"wb") |         dic = {} | ||||||
|     pickle.dump(dic,fp) | 
 | ||||||
|  |     if word in dic: | ||||||
|  |         count, timestamps = dic[word] | ||||||
|  |         dic[word] = (count + 1, timestamps + [datetime.now().strftime('%Y%m%d%H%M')]) | ||||||
|  |     else: | ||||||
|  |         dic[word] = (1, [datetime.now().strftime('%Y%m%d%H%M')]) | ||||||
|  | 
 | ||||||
|  |     with open(path, "wb") as fp: | ||||||
|  |         pickle.dump(dic, fp) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| def familiar(path,word): | def familiar(path,word): | ||||||
|     f = open(path,"rb") |     f = open(path,"rb") | ||||||
|  |  | ||||||
|  | @ -2,6 +2,7 @@ import uuid | ||||||
| from selenium.webdriver.support.ui import WebDriverWait | from selenium.webdriver.support.ui import WebDriverWait | ||||||
| from selenium.webdriver.support import expected_conditions as EC | from selenium.webdriver.support import expected_conditions as EC | ||||||
| from selenium.common.exceptions import UnexpectedAlertPresentException, NoAlertPresentException | from selenium.common.exceptions import UnexpectedAlertPresentException, NoAlertPresentException | ||||||
|  | from selenium.webdriver.common.by import By | ||||||
| 
 | 
 | ||||||
| def signup(URL, driver): | def signup(URL, driver): | ||||||
|     username = 'TestUser' + str(uuid.uuid1()).split('-')[0].title() |     username = 'TestUser' + str(uuid.uuid1()).split('-')[0].title() | ||||||
|  | @ -9,25 +10,39 @@ def signup(URL, driver): | ||||||
| 
 | 
 | ||||||
|     driver.get(URL) |     driver.get(URL) | ||||||
|      |      | ||||||
|     elem = driver.find_element_by_link_text('注册') |     try: | ||||||
|     elem.click() |         # Click the register link | ||||||
|  |         register_link = WebDriverWait(driver, 10).until( | ||||||
|  |             EC.element_to_be_clickable((By.LINK_TEXT, '注册')) | ||||||
|  |         ) | ||||||
|  |         register_link.click() | ||||||
|          |          | ||||||
|     elem = driver.find_element_by_id('username') |         # Fill the registration form | ||||||
|     elem.send_keys(username) |         username_field = WebDriverWait(driver, 10).until( | ||||||
|  |             EC.presence_of_element_located((By.ID, 'username')) | ||||||
|  |         ) | ||||||
|  |         username_field.send_keys(username) | ||||||
| 
 | 
 | ||||||
|     elem = driver.find_element_by_id('password') |         password_field = driver.find_element(By.ID, 'password') | ||||||
|     elem.send_keys(password) |         password_field.send_keys(password) | ||||||
| 
 | 
 | ||||||
|     elem = driver.find_element_by_id('password2') |         confirm_password_field = driver.find_element(By.ID, 'password2') | ||||||
|     elem.send_keys(password)     |         confirm_password_field.send_keys(password) | ||||||
| 
 | 
 | ||||||
|     elem = driver.find_element_by_class_name('btn') # 找到"注册"按钮 |         # Click the register button | ||||||
|     elem.click() |         register_button = driver.find_element(By.CLASS_NAME, 'btn') | ||||||
|  |         register_button.click() | ||||||
| 
 | 
 | ||||||
|  |         # Handle possible alert | ||||||
|         try: |         try: | ||||||
|             WebDriverWait(driver, 1).until(EC.alert_is_present()) |             WebDriverWait(driver, 1).until(EC.alert_is_present()) | ||||||
|         driver.switch_to.alert.accept() |             alert = driver.switch_to.alert | ||||||
|  |             alert.accept() | ||||||
|         except (UnexpectedAlertPresentException, NoAlertPresentException): |         except (UnexpectedAlertPresentException, NoAlertPresentException): | ||||||
|             pass |             pass | ||||||
|          |          | ||||||
|         return username, password |         return username, password | ||||||
|  |      | ||||||
|  |     except Exception as e: | ||||||
|  |         print(f"An error occurred: {e}") | ||||||
|  |         return None, None | ||||||
|  | @ -0,0 +1,108 @@ | ||||||
|  | import random | ||||||
|  | import string | ||||||
|  | import time | ||||||
|  | 
 | ||||||
|  | from selenium.webdriver.common.by import By | ||||||
|  | from selenium.webdriver.support.ui import WebDriverWait | ||||||
|  | from selenium.webdriver.support import expected_conditions as EC | ||||||
|  | 
 | ||||||
|  | from helper import signup | ||||||
|  | 
 | ||||||
|  | def has_punctuation(s): | ||||||
|  |     return any(c in string.punctuation for c in s) | ||||||
|  | 
 | ||||||
|  | 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}")) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 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 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def select_more_words(driver): | ||||||
|  |     elem = driver.find_element(By.ID, 'text-content') | ||||||
|  |     essay_content = elem.text | ||||||
|  |     valid_words = [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] | ||||||
|  |     words_to_send = ', '.join(valid_words[:7]) | ||||||
|  |     driver.find_element(By.ID, 'selected-words').send_keys(words_to_send) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def test_unfamiliar_button(driver, URL): | ||||||
|  |     try: | ||||||
|  |         username, password = signup(URL, driver) | ||||||
|  |         time.sleep(5) | ||||||
|  | 
 | ||||||
|  |         word = select_valid_word(driver) | ||||||
|  |          | ||||||
|  |        # Add selected word to the list of unfamiliar words | ||||||
|  |         time.sleep(5) | ||||||
|  |         add_to_unfamiliar_button =  driver.find_element(By.XPATH, '//button[text()="把生词加入我的生词库"]') | ||||||
|  |         add_to_unfamiliar_button.click() | ||||||
|  |         time.sleep(3) | ||||||
|  | 
 | ||||||
|  |         add_words_button =  driver.find_element(By.XPATH, '//button[text()="加入我的生词簿"]') # Replace with actual ID or selector | ||||||
|  |         add_words_button.click() | ||||||
|  |         # Wait for the page to update again | ||||||
|  |         time.sleep(2) | ||||||
|  | 
 | ||||||
|  |       # Check if the added word appears in the word container | ||||||
|  |         word_container = driver.find_element(By.CLASS_NAME, 'word-container') | ||||||
|  |         words = word_container.find_elements(By.TAG_NAME, 'p') | ||||||
|  |         added_word_exists = any(word.text == word for word in words) | ||||||
|  |         time.sleep(2) | ||||||
|  | 
 | ||||||
|  |         # Mark word as unfamiliar | ||||||
|  |         time.sleep(5) | ||||||
|  |         for _ in range(16): | ||||||
|  |             time.sleep(1) | ||||||
|  |             unfamiliar_btn = driver.find_element(By.XPATH, '//a[contains(@class, "btn-warning") and text()="不熟悉"]') | ||||||
|  |             unfamiliar_btn.click() | ||||||
|  |         # Wait for the page to updatec | ||||||
|  |         time.sleep(5) | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |         #Get unfimiliar word count  | ||||||
|  |         initial_count = driver.find_element(By.ID, 'freq_'+ word).text  | ||||||
|  |          | ||||||
|  |         #add new words | ||||||
|  |         word = select_more_words(driver) | ||||||
|  |         add_to_unfamiliar_button =  driver.find_element(By.XPATH, '//button[text()="把生词加入我的生词库"]') | ||||||
|  |         add_to_unfamiliar_button.click() | ||||||
|  |         time.sleep(5) | ||||||
|  | 
 | ||||||
|  |         #add the words to the list of words | ||||||
|  |         add_words_again =  driver.find_element(By.XPATH, '//button[text()="加入我的生词簿"]') # Replace with actual ID or selector | ||||||
|  |         add_words_again.click() | ||||||
|  |         time.sleep(3) | ||||||
|  |        | ||||||
|  |        | ||||||
|  |         #Count unfamiliar words | ||||||
|  |         current_unfamiliar_count = driver.find_element(By.XPATH, '//a[contains(@class, "btn-warning") and text()="不熟悉"]') | ||||||
|  |         current_unfamiliar_count = int(unfamiliar_btn.text) | ||||||
|  |         time.sleep(4) | ||||||
|  | 
 | ||||||
|  |          # Verify that the number of unfamiliar words has increased | ||||||
|  |         assert current_unfamiliar_count > initial_count, "Unfamiliar word count did not increase as expected" | ||||||
|  |         time.sleep(3) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         # Log out and close the browser | ||||||
|  |         driver.find_element(By.XPATH, '//a[contains(@class, "btn-secondary") and text()="退出"]') | ||||||
|  |         driver.execute_script("window.open('');window.close();") | ||||||
|  |         WebDriverWait(driver, 2) | ||||||
|  |         driver.execute_script("window.open('');") | ||||||
|  |         driver.switch_to.window(driver.window_handles[-1]) | ||||||
|  | 
 | ||||||
|  |     finally: | ||||||
|  |         driver.quit() | ||||||
		Loading…
	
		Reference in New Issue