Compare commits
	
		
			6 Commits 
		
	
	
		
			master
			...
			Bug518-Mpo
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | 430705aef5 | |
|  | 35751c2c5f | |
|  | 35a6f1c828 | |
|  | a42e63dc27 | |
|  | 6500eeca84 | |
|  | 7d65782728 | 
|  | @ -0,0 +1 @@ | |||
| Subproject commit 8cbc7c9a0ce543db48f80a743c4168ca847ca500 | ||||
|  | @ -54,13 +54,28 @@ def save_frequency_to_pickle(d, pickle_fname): | |||
|     pickle.dump(d2, f) | ||||
|     f.close() | ||||
| 
 | ||||
| ''' | ||||
| Fixed function initializes a dictionary if file doesn't exist, increments word counts correctly, and  | ||||
| appends timestamps, preventing unintended count increases for previously marked words in subsequent uses. | ||||
| ''' | ||||
| def unfamiliar(path, word): | ||||
|     f = open(path,"rb") | ||||
|     try: | ||||
|         with open(path, "rb") as f: | ||||
|             dic = pickle.load(f) | ||||
|     dic[word] += [datetime.now().strftime('%Y%m%d%H%M')] | ||||
|     fp = open(path,"wb") | ||||
|     except FileNotFoundError: | ||||
|         dic = {}  # Initialize an empty dictionary if the file doesn't exist | ||||
| 
 | ||||
|     if word in dic: | ||||
|         dic[word][0] += 1  # Increment the count of the word | ||||
|     else: | ||||
|         dic[word] = [1, []]  # Initialize count to 1 and empty list for timestamps | ||||
| 
 | ||||
|     dic[word][1].append(datetime.now().strftime('%Y%m%d%H%M'))  # Add timestamp | ||||
| 
 | ||||
|     with open(path, "wb") as fp: | ||||
|         pickle.dump(dic, fp) | ||||
| 
 | ||||
| 
 | ||||
| def familiar(path,word): | ||||
|     f = open(path,"rb") | ||||
|     dic = pickle.load(f) | ||||
|  |  | |||
|  | @ -157,6 +157,7 @@ | |||
|                     update(data['today_article']); | ||||
|                     check_pre(data['visited_articles']); | ||||
|                     check_next(data['result_of_generate_article']); | ||||
|                     toggleHighlighting(); | ||||
|                 } | ||||
|             } | ||||
|         }); | ||||
|  | @ -170,6 +171,7 @@ | |||
|                 if(data['today_article']){ | ||||
|                     update(data['today_article']); | ||||
|                     check_pre(data['visited_articles']); | ||||
|                     toggleHighlighting(); | ||||
|                 } | ||||
|             } | ||||
|         }); | ||||
|  |  | |||
|  | @ -9,5 +9,5 @@ def URL(): | |||
| 
 | ||||
| @pytest.fixture | ||||
| def driver(): | ||||
|     my_driver = webdriver.Edge()  # uncomment this line if you wish to run the test on your laptop     | ||||
|     my_driver = webdriver.Chrome() | ||||
|     return my_driver | ||||
|  |  | |||
|  | @ -0,0 +1,48 @@ | |||
| import uuid | ||||
| from selenium.webdriver.support.ui import WebDriverWait | ||||
| from selenium.webdriver.support import expected_conditions as EC | ||||
| from selenium.common.exceptions import UnexpectedAlertPresentException, NoAlertPresentException | ||||
| from selenium.webdriver.common.by import By | ||||
| 
 | ||||
| def signup(URL, driver): | ||||
|     username = 'TestUser' + str(uuid.uuid1()).split('-')[0].title() | ||||
|     password = '[Abc+123]' | ||||
| 
 | ||||
|     driver.get(URL) | ||||
|      | ||||
|     try: | ||||
|         # Click the register link | ||||
|         register_link = WebDriverWait(driver, 10).until( | ||||
|             EC.element_to_be_clickable((By.LINK_TEXT, '注册')) | ||||
|         ) | ||||
|         register_link.click() | ||||
|          | ||||
|         # Fill the registration form | ||||
|         username_field = WebDriverWait(driver, 10).until( | ||||
|             EC.presence_of_element_located((By.ID, 'username')) | ||||
|         ) | ||||
|         username_field.send_keys(username) | ||||
| 
 | ||||
|         password_field = driver.find_element(By.ID, 'password') | ||||
|         password_field.send_keys(password) | ||||
| 
 | ||||
|         confirm_password_field = driver.find_element(By.ID, 'password2') | ||||
|         confirm_password_field.send_keys(password) | ||||
| 
 | ||||
|         # Click the register button | ||||
|         register_button = driver.find_element(By.CLASS_NAME, 'btn') | ||||
|         register_button.click() | ||||
| 
 | ||||
|         # Handle possible alert | ||||
|         try: | ||||
|             WebDriverWait(driver, 1).until(EC.alert_is_present()) | ||||
|             alert = driver.switch_to.alert | ||||
|             alert.accept() | ||||
|         except (UnexpectedAlertPresentException, NoAlertPresentException): | ||||
|             pass | ||||
|          | ||||
|         return username, password | ||||
|      | ||||
|     except Exception as e: | ||||
|         print(f"An error occurred: {e}") | ||||
|         return None, None | ||||
|  | @ -0,0 +1,107 @@ | |||
| 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) | ||||
|          | ||||
|         # Wait for the button to be clickable | ||||
|         time.sleep(8) | ||||
|        # Add selected word to the list of unfamiliar words | ||||
|         add_to_unfamiliar_button =  driver.find_element(By.XPATH, '//button[text()="把生词加入我的生词库"]') | ||||
|         add_to_unfamiliar_button.click() | ||||
|         # Wait for the page to update | ||||
|         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) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|         #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() | ||||
|         # Wait for the page to update again | ||||
|         time.sleep(3) | ||||
|        | ||||
|        | ||||
|         #current count after adding new words | ||||
|         current_unfamiliar_count = driver.find_element(By.XPATH, '//a[contains(@class, "btn-warning") and text()="不熟悉"]') | ||||
|         current_unfamiliar_count = int(unfamiliar_btn.text.split('(')[1].split(')')[0]) | ||||
|         print(f"Unfamiliar word count: {current_unfamiliar_count}") | ||||
|         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() | ||||
|  | @ -0,0 +1,43 @@ | |||
| import time | ||||
| import pytest | ||||
| import uuid | ||||
| from selenium import webdriver | ||||
| from selenium.webdriver import ActionChains | ||||
| 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 UnexpectedAlertPresentException, NoAlertPresentException, NoSuchElementException, \ | ||||
|     TimeoutException | ||||
| from conftest import URL | ||||
| driver = webdriver.Chrome() | ||||
| def test_bug555(): | ||||
|     try: | ||||
|         driver.maximize_window() | ||||
|         base_url = "http://127.0.0.1:5000" | ||||
|         driver.get(base_url) | ||||
|         article = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'article'))) | ||||
|         perform_actions_on_article(driver, article) | ||||
| 
 | ||||
|         next_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'load_next_article'))) | ||||
|         next_button.click() | ||||
|         print("Clicked next article button.") | ||||
| 
 | ||||
|         prev_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'load_pre_article'))) | ||||
|         prev_button.click() | ||||
|         print("Clicked previous article button.") | ||||
| 
 | ||||
|     except (TimeoutException, NoSuchElementException) as e: | ||||
|         print(f"An error occurred: {e}") | ||||
| 
 | ||||
|     finally: | ||||
|         driver.quit() | ||||
|         print("Driver closed.") | ||||
| 
 | ||||
| def perform_actions_on_article(driver, article): | ||||
|     actions = ActionChains(driver) | ||||
|     actions.move_to_element(article) | ||||
|     actions.click_and_hold() | ||||
|     actions.move_by_offset(450, 200) | ||||
|     actions.release() | ||||
|     actions.perform() | ||||
|     print("Performed actions on article.") | ||||
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 20 KiB | 
		Loading…
	
		Reference in New Issue