diff --git a/app/test/test_bug528_tangjiao.py b/app/test/test_bug528_tangjiao.py index 802423c..9ddc9fc 100644 --- a/app/test/test_bug528_tangjiao.py +++ b/app/test/test_bug528_tangjiao.py @@ -5,91 +5,123 @@ from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import NoSuchElementException, TimeoutException - - +from selenium import webdriver +from selenium.webdriver.edge.service import Service +from selenium.webdriver.common.by import By # 测试登录页面输入密码包含空格的情况 -def test_login_password_with_space(driver, URL): - try: - driver.get(URL+"/login") +import unittest - # 输入用户名 - username_elem = driver.find_element_by_id('username') - username_elem.send_keys("test_user") +class Test_Bug528_Tangjiao(unittest.TestCase): + def test_login_password_with_space(self): + URL = 'http://127.0.0.1:5000' + service = Service(executable_path=r'D:\studey\webdrive\edge\msedgedriver.exe') + driver = webdriver.Edge(service=service) + try: + driver.get(URL + "/login") - # 输入包含空格的密码 - password_elem = driver.find_element_by_id('password') - password_elem.send_keys("password with space") + # 输入用户名 + username_elem = driver.find_element(By.ID, 'username') + username_elem.send_keys("test_user") - # 提交登录表单 - elem = driver.find_element_by_class_name('btn') # 找到提交按钮 - elem.click() + # 输入包含空格的密码 + password_elem = driver.find_element(By.ID, 'password') + password_elem.send_keys("password with space") - # 显式等待直到警告框出现 - WebDriverWait(driver, 10).until(EC.alert_is_present()) + # 提交登录表单 + elem = driver.find_element(By.ID, 'btn') # 找到提交按钮 + elem.click() - # 检查是否弹出警告框 - alert = driver.switch_to.alert - assert "输入不能包含空格!" in alert.text - except (NoSuchElementException, TimeoutException) as e: - pytest.fail("页面元素未找到或超时: {}".format(e)) + # 显式等待直到警告框出现 + WebDriverWait(driver, 10).until(EC.alert_is_present()) + # 检查是否弹出警告框 + alert = driver.switch_to.alert + assert "输入不能包含空格!" in alert.text + except (NoSuchElementException, TimeoutException) as e: + pytest.fail("页面元素未找到或超时: {}".format(e)) -# 测试注册页面输入密码包含空格的情况 + # 测试注册页面输入密码包含空格的情况 -def test_signup_password_with_space(driver, URL): - try: - driver.get(URL+"/signup") + def test_signup_password_with_space(self): + URL = 'http://127.0.0.1:5000' + service = Service(executable_path=r'D:\studey\webdrive\edge\msedgedriver.exe') + driver = webdriver.Edge(service=service) + try: + driver.get(URL + "/signup") - # 输入用户名 - username_elem = driver.find_element_by_id('username') - username_elem.send_keys("new_user") + # 输入用户名 + username_elem = driver.find_element(By.ID, 'username') + username_elem.send_keys("new_user") - # 输入包含空格的密码 - password_elem = driver.find_element_by_id('password') - password_elem.send_keys("password with space") + # 输入包含空格的密码 + password_elem = driver.find_element(By.ID, 'password') + password_elem.send_keys("password with space") - # 再次输入密码 - password2_elem = driver.find_element_by_id('password2') - password2_elem.send_keys("password with space") + # 再次输入密码 + password2_elem = driver.find_element(By.ID, 'password2') + password2_elem.send_keys("password with space") - # 提交注册表单 - elem = driver.find_element_by_class_name('btn') # 找到提交按钮 - elem.click() + # 提交注册表单 + elem = driver.find_element(By.ID, 'btn') # 找到提交按钮 + elem.click() - # 显式等待直到警告框出现 - WebDriverWait(driver, 10).until(EC.alert_is_present()) + # 显式等待直到警告框出现 + WebDriverWait(driver, 10).until(EC.alert_is_present()) - # 检查是否弹出警告框 - alert = driver.switch_to.alert - assert "输入不能包含空格!" in alert.text - except (NoSuchElementException, TimeoutException) as e: - pytest.fail("页面元素未找到或超时: {}".format(e)) + # 检查是否弹出警告框 + alert = driver.switch_to.alert + assert "输入不能包含空格!" in alert.text + except (NoSuchElementException, TimeoutException) as e: + pytest.fail("页面元素未找到或超时: {}".format(e)) + # 测试重设密码页面输入新密码包含空格的情况 + def test_reset_password_with_space(self): + URL = 'http://127.0.0.1:5000' + service = Service(executable_path=r'D:\studey\webdrive\edge\msedgedriver.exe') + driver = webdriver.Edge(service=service) -# 测试重设密码页面输入新密码包含空格的情况 + try: + # 1. 先访问登录页面 + driver.get(URL + "/login") + driver.maximize_window() -def test_reset_password_with_space(driver, URL): - try: - driver.get(URL+"/reset") + # 2. 完成登录 + WebDriverWait(driver, 10).until( + EC.presence_of_element_located((By.ID, 'username')) + ).send_keys("student6") # 替换为有效的测试用户名 - # 输入用户名 - username_elem = driver.find_element_by_id('username') - username_elem.send_keys("test_user") + driver.find_element(By.ID, 'password').send_keys("ad1258@#$") # 替换为有效的密码 + driver.find_element(By.ID, 'btn').click() - # 输入包含空格的密码 - password_elem = driver.find_element_by_id('password') - password_elem.send_keys("password with space") + # 4. 现在访问重置密码页面 + driver.get(URL + "/reset") - # 提交重设密码表单 - elem = driver.find_element_by_class_name('btn') # 找到提交按钮 - elem.click() + # 5. 确保重置页面加载完成 + WebDriverWait(driver, 10).until( + EC.presence_of_element_located((By.ID, 'old-password')) + ) - # 显式等待直到警告框出现 - WebDriverWait(driver, 10).until(EC.alert_is_present()) + # 6. 执行测试 - 输入包含空格的密码 + old_password = driver.find_element(By.ID, 'old-password') + old_password.send_keys("ad1258@#$") - # 检查是否弹出警告框 - alert = driver.switch_to.alert - assert "输入不能包含空格!" in alert.text - except (NoSuchElementException, TimeoutException) as e: - pytest.fail("页面元素未找到或超时: {}".format(e)) + # 填写其他字段(避免因其他验证失败而影响测试) + driver.find_element(By.ID, 'new-password').send_keys("new pass") + driver.find_element(By.ID, 're-new-password').send_keys("new pass") + + # 提交表单 + submit_btn = driver.find_element(By.ID, 'submit') + submit_btn.click() + + # 7. 验证预期结果 + WebDriverWait(driver, 10).until(EC.alert_is_present()) + alert = driver.switch_to.alert + assert "输入不能包含空格!" in alert.text + alert.accept() + + except Exception as e: + driver.save_screenshot("reset_error.png") + pytest.fail(f"测试失败: {e}") + finally: + driver.quit() \ No newline at end of file diff --git a/app/test_vocabulary.py b/app/test_vocabulary.py new file mode 100644 index 0000000..b3ed0f8 --- /dev/null +++ b/app/test_vocabulary.py @@ -0,0 +1,12 @@ +from vocabulary import UserVocabularyLevel, ArticleVocabularyLevel + + +def test_article_level(): + ''' Boundary case test ''' + article = ArticleVocabularyLevel('') + assert article.level == 0 + +def test_user_level(): + ''' Boundary case test ''' + user = UserVocabularyLevel({}) + assert user.level == 0 \ No newline at end of file diff --git a/app/vocabulary.py b/app/vocabulary.py new file mode 100644 index 0000000..4d1d76a --- /dev/null +++ b/app/vocabulary.py @@ -0,0 +1,63 @@ +''' + Estimate a user's vocabulary level given his vocabulary data + Estimate an English article's difficulty level given its content + Preliminary design + + Hui, 2024-09-23 + Last upated: 2024-09-25, 2024-09-30 +''' + +import pickle + + +def load_record(pickle_fname): + with open(pickle_fname, 'rb') as f: + d = pickle.load(f) + return d + + +class VocabularyLevelEstimator: + _test = load_record('static\words_and_tests.p') # map a word to the sources where it appears + + @property + def level(self): + total = len(self._test) + num = 0 + for word in self.word_lst: + num += 1 + if word in self._test: + print(f'{word} : {self._test[word]}') + else: + print(f'{word}') + if num == 0: + return 0 + return total/num + + +class UserVocabularyLevel(VocabularyLevelEstimator): + def __init__(self, d): + self.d = d + self.word_lst = list(d.keys()) + # just look at the most recently-added words + + +class ArticleVocabularyLevel(VocabularyLevelEstimator): + def __init__(self, content): + self.content = content + self.word_lst = content.lower().split() + # select the 10 most difficult words + + +if __name__ == '__main__': + d = load_record('frequency_zhangsan.pickle') + print(d) + #换行 + print('------------') + user = UserVocabularyLevel(d) + print(user.level) # level is a property + print('------------') + article = ArticleVocabularyLevel('This is an interesting article') + print(article.level) + + +