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 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_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 diff --git a/app/test/test_bug555_fangchen.py b/app/test/test_bug555_fangchen.py deleted file mode 100644 index d1edfb5..0000000 --- a/app/test/test_bug555_fangchen.py +++ /dev/null @@ -1,43 +0,0 @@ -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.") \ No newline at end of file