forked from mrlan/EnglishPal
				
			Fix bug 543
							parent
							
								
									d8af2a7e54
								
							
						
					
					
						commit
						ead836680c
					
				|  | @ -67,7 +67,7 @@ def get_difficulty_level_for_user(d1, d2): | |||
|             if stem in d2:  # 如果用户的词的词根存在于词库d2的词根库中 | ||||
|                 d2[k] = d2[stem]  # 按照词根进行评级 | ||||
|             else: | ||||
|                 d2[k] = 3  # 如果k的词根都不在,那么就当认为是3级 | ||||
|                 d2[k] = 6  # 如果k的词根都不在,那么就当认为是6级, If a word does not exist in the known dictionary, it is likely a complex or rare word. Hence, it deserves a higher difficulty rating (6) | ||||
|     return d2 | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,32 +2,47 @@ 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) | ||||
|          | ||||
|     elem = driver.find_element_by_link_text('注册') | ||||
|     elem.click() | ||||
|      | ||||
|     elem = driver.find_element_by_id('username') | ||||
|     elem.send_keys(username) | ||||
|      | ||||
|     elem = driver.find_element_by_id('password') | ||||
|     elem.send_keys(password) | ||||
| 
 | ||||
|     elem = driver.find_element_by_id('password2') | ||||
|     elem.send_keys(password)     | ||||
|      | ||||
|     elem = driver.find_element_by_class_name('btn') # 找到"注册"按钮 | ||||
|     elem.click() | ||||
| 
 | ||||
|     try: | ||||
|         WebDriverWait(driver, 1).until(EC.alert_is_present()) | ||||
|         driver.switch_to.alert.accept() | ||||
|     except (UnexpectedAlertPresentException, NoAlertPresentException): | ||||
|         pass | ||||
|         # 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 | ||||
|      | ||||
|     return username, password | ||||
|     except Exception as e: | ||||
|         print(f"An error occurred: {e}") | ||||
|         return None, None | ||||
|  | @ -0,0 +1,106 @@ | |||
| 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): | ||||
|     list_of_words = [ | ||||
|         "vulture", "vitreous", "vertebrata", "suture", "sessile", "prodigal", "presumptuous", "prehension","pedunculated", | ||||
|          "parturition", "ovigerous", "ova", "orifice", "obliterate", "niggard", "lineal", "glottis", "frena", "ductus",  | ||||
|          "dorsal", "crustacean", "cornea", "cirriped", "chromatic", "canon","branchiae", "auditory", "articulata", | ||||
|           "alimentary", "adduce" | ||||
|     ] | ||||
|      | ||||
|    # valid_words = [word for word in list_of_words 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(list_of_words) | ||||
|     driver.find_element(By.ID, 'selected-words').send_keys(words_to_send) | ||||
| 
 | ||||
| 
 | ||||
| def test_get_user_level(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(10) | ||||
|        # Add selected word to the list of  words | ||||
|         add_words_button =  driver.find_element(By.XPATH, '//button[text()="把生词加入我的生词库"]') | ||||
|         add_words_button.click() | ||||
|         # Wait for the page to update | ||||
|         time.sleep(4) | ||||
| 
 | ||||
|         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(4) | ||||
| 
 | ||||
|       # 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(4) | ||||
| 
 | ||||
| 
 | ||||
|         #add words that are not from d2 | ||||
|         time.sleep(5) | ||||
|         word = select_more_words(driver) | ||||
|         time.sleep(5) | ||||
|         add_button =  driver.find_element(By.XPATH, '//button[text()="把生词加入我的生词库"]') | ||||
|         add_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 | ||||
|         time.sleep(4) | ||||
|         add_words_again.click() | ||||
|         # Wait for the page to update again | ||||
|         time.sleep(5) | ||||
|        | ||||
|      | ||||
|         # compare user level  | ||||
|         default_user_level = 3.0 | ||||
|         user_current_level = driver.find_element(By.ID, "user_level") | ||||
|         current_level = float(user_current_level.text) | ||||
|         assert current_level > default_user_level,  "The user level has dropped to 3 your bugfix is not working" | ||||
|         time.sleep(5) | ||||
| 
 | ||||
|      | ||||
|         # 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