From 7c04885f485a54757fa443689c038c5d0ad581d1 Mon Sep 17 00:00:00 2001 From: GaoxingAbdullah Date: Sun, 16 Jun 2024 16:44:08 +0800 Subject: [PATCH] pickle_idea.py: Change unfamiliar --- app/pickle_idea.py | 17 +++-- app/test/helper.py | 48 +++++++++++++ app/test/test_bug518_mponeja.py | 121 ++++++++++++++++++++++++++++++++ 3 files changed, 181 insertions(+), 5 deletions(-) create mode 100644 app/test/helper.py create mode 100644 app/test/test_bug518_mponeja.py diff --git a/app/pickle_idea.py b/app/pickle_idea.py index 45bd19a..c172c32 100644 --- a/app/pickle_idea.py +++ b/app/pickle_idea.py @@ -54,12 +54,19 @@ def save_frequency_to_pickle(d, pickle_fname): pickle.dump(d2, f) f.close() -def unfamiliar(path,word): - f = open(path,"rb") +def unfamiliar(path, word): + f = open(path, "rb") dic = pickle.load(f) - dic[word] += [datetime.now().strftime('%Y%m%d%H%M')] - fp = open(path,"wb") - pickle.dump(dic,fp) + if word in dic: + if len(dic[word]) <= 16: # Check if the length of the list is less than 16 + dic[word].append(datetime.now().strftime('%Y%m%d%H%M')) + else: + dic[word].append(datetime.now().strftime('%Y%m%d%H%M')) + else: + dic[word] = [datetime.now().strftime('%Y%m%d%H%M')] + f.close() + with open(path, "wb") as fp: + pickle.dump(dic, fp) def familiar(path,word): f = open(path,"rb") diff --git a/app/test/helper.py b/app/test/helper.py new file mode 100644 index 0000000..a6991d0 --- /dev/null +++ b/app/test/helper.py @@ -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 \ No newline at end of file diff --git a/app/test/test_bug518_mponeja.py b/app/test/test_bug518_mponeja.py new file mode 100644 index 0000000..27bc19b --- /dev/null +++ b/app/test/test_bug518_mponeja.py @@ -0,0 +1,121 @@ +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) + + # # Keep track of the unfamiliar word count + # counter = 0 + # freq_count = driver.find_element(By.ID, 'freq_'+ word).text + # # counter = freq_count + # print(f"Unfamiliar word count: {freq_count}") + # time.sleep(3) + + #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) + + + # Verify that the number of unfamiliar words has decreased + # current_unfamiliar_count = driver.find_element(By.ID, 'freq_'+word).text + # print(f"Unfamiliar word second count: {current_unfamiliar_count}") + # time.sleep(3) + + # # Verify that the number of unfamiliar words remains the same + # assert current_unfamiliar_count == freq_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() \ No newline at end of file