From ead836680c6a041ef2da243fcd11db4f595efed9 Mon Sep 17 00:00:00 2001 From: aya Date: Wed, 19 Jun 2024 16:05:43 +0800 Subject: [PATCH] Fix bug 543 --- app/difficulty.py | 2 +- app/test/helper.py | 55 ++++++++++++------- app/test/test_bug543_Aya.py | 106 ++++++++++++++++++++++++++++++++++++ 3 files changed, 142 insertions(+), 21 deletions(-) create mode 100644 app/test/test_bug543_Aya.py diff --git a/app/difficulty.py b/app/difficulty.py index 1bd8d68..f90f761 100644 --- a/app/difficulty.py +++ b/app/difficulty.py @@ -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 diff --git a/app/test/helper.py b/app/test/helper.py index 2b0deec..a6991d0 100644 --- a/app/test/helper.py +++ b/app/test/helper.py @@ -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 \ No newline at end of file diff --git a/app/test/test_bug543_Aya.py b/app/test/test_bug543_Aya.py new file mode 100644 index 0000000..7df7544 --- /dev/null +++ b/app/test/test_bug543_Aya.py @@ -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() \ No newline at end of file -- 2.17.1