forked from mrlan/EnglishPal
				
			Fix bug 543
							parent
							
								
									d8af2a7e54
								
							
						
					
					
						commit
						ead836680c
					
				| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			@ -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()
 | 
			
		||||
		Loading…
	
		Reference in New Issue