Bug585-chengchuhang #205
|
@ -5,91 +5,123 @@ from selenium.webdriver.common.keys import Keys
|
||||||
from selenium.webdriver.support.ui import WebDriverWait
|
from selenium.webdriver.support.ui import WebDriverWait
|
||||||
from selenium.webdriver.support import expected_conditions as EC
|
from selenium.webdriver.support import expected_conditions as EC
|
||||||
from selenium.common.exceptions import NoSuchElementException, TimeoutException
|
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):
|
import unittest
|
||||||
try:
|
|
||||||
driver.get(URL+"/login")
|
|
||||||
|
|
||||||
# 输入用户名
|
class Test_Bug528_Tangjiao(unittest.TestCase):
|
||||||
username_elem = driver.find_element_by_id('username')
|
def test_login_password_with_space(self):
|
||||||
username_elem.send_keys("test_user")
|
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')
|
username_elem = driver.find_element(By.ID, 'username')
|
||||||
password_elem.send_keys("password with space")
|
username_elem.send_keys("test_user")
|
||||||
|
|
||||||
# 提交登录表单
|
# 输入包含空格的密码
|
||||||
elem = driver.find_element_by_class_name('btn') # 找到提交按钮
|
password_elem = driver.find_element(By.ID, 'password')
|
||||||
elem.click()
|
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
|
WebDriverWait(driver, 10).until(EC.alert_is_present())
|
||||||
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_signup_password_with_space(driver, URL):
|
def test_signup_password_with_space(self):
|
||||||
try:
|
URL = 'http://127.0.0.1:5000'
|
||||||
driver.get(URL+"/signup")
|
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 = driver.find_element(By.ID, 'username')
|
||||||
username_elem.send_keys("new_user")
|
username_elem.send_keys("new_user")
|
||||||
|
|
||||||
# 输入包含空格的密码
|
# 输入包含空格的密码
|
||||||
password_elem = driver.find_element_by_id('password')
|
password_elem = driver.find_element(By.ID, 'password')
|
||||||
password_elem.send_keys("password with space")
|
password_elem.send_keys("password with space")
|
||||||
|
|
||||||
# 再次输入密码
|
# 再次输入密码
|
||||||
password2_elem = driver.find_element_by_id('password2')
|
password2_elem = driver.find_element(By.ID, 'password2')
|
||||||
password2_elem.send_keys("password with space")
|
password2_elem.send_keys("password with space")
|
||||||
|
|
||||||
# 提交注册表单
|
# 提交注册表单
|
||||||
elem = driver.find_element_by_class_name('btn') # 找到提交按钮
|
elem = driver.find_element(By.ID, 'btn') # 找到提交按钮
|
||||||
elem.click()
|
elem.click()
|
||||||
|
|
||||||
# 显式等待直到警告框出现
|
# 显式等待直到警告框出现
|
||||||
WebDriverWait(driver, 10).until(EC.alert_is_present())
|
WebDriverWait(driver, 10).until(EC.alert_is_present())
|
||||||
|
|
||||||
# 检查是否弹出警告框
|
# 检查是否弹出警告框
|
||||||
alert = driver.switch_to.alert
|
alert = driver.switch_to.alert
|
||||||
assert "输入不能包含空格!" in alert.text
|
assert "输入不能包含空格!" in alert.text
|
||||||
except (NoSuchElementException, TimeoutException) as e:
|
except (NoSuchElementException, TimeoutException) as e:
|
||||||
pytest.fail("页面元素未找到或超时: {}".format(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):
|
# 2. 完成登录
|
||||||
try:
|
WebDriverWait(driver, 10).until(
|
||||||
driver.get(URL+"/reset")
|
EC.presence_of_element_located((By.ID, 'username'))
|
||||||
|
).send_keys("student6") # 替换为有效的测试用户名
|
||||||
|
|
||||||
# 输入用户名
|
driver.find_element(By.ID, 'password').send_keys("ad1258@#$") # 替换为有效的密码
|
||||||
username_elem = driver.find_element_by_id('username')
|
driver.find_element(By.ID, 'btn').click()
|
||||||
username_elem.send_keys("test_user")
|
|
||||||
|
|
||||||
# 输入包含空格的密码
|
# 4. 现在访问重置密码页面
|
||||||
password_elem = driver.find_element_by_id('password')
|
driver.get(URL + "/reset")
|
||||||
password_elem.send_keys("password with space")
|
|
||||||
|
|
||||||
# 提交重设密码表单
|
# 5. 确保重置页面加载完成
|
||||||
elem = driver.find_element_by_class_name('btn') # 找到提交按钮
|
WebDriverWait(driver, 10).until(
|
||||||
elem.click()
|
EC.presence_of_element_located((By.ID, 'old-password'))
|
||||||
|
)
|
||||||
|
|
||||||
# 显式等待直到警告框出现
|
# 6. 执行测试 - 输入包含空格的密码
|
||||||
WebDriverWait(driver, 10).until(EC.alert_is_present())
|
old_password = driver.find_element(By.ID, 'old-password')
|
||||||
|
old_password.send_keys("ad1258@#$")
|
||||||
|
|
||||||
# 检查是否弹出警告框
|
# 填写其他字段(避免因其他验证失败而影响测试)
|
||||||
alert = driver.switch_to.alert
|
driver.find_element(By.ID, 'new-password').send_keys("new pass")
|
||||||
assert "输入不能包含空格!" in alert.text
|
driver.find_element(By.ID, 're-new-password').send_keys("new pass")
|
||||||
except (NoSuchElementException, TimeoutException) as e:
|
|
||||||
pytest.fail("页面元素未找到或超时: {}".format(e))
|
# 提交表单
|
||||||
|
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()
|
|
@ -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
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue