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的词根库中
 | 
					            if stem in d2:  # 如果用户的词的词根存在于词库d2的词根库中
 | 
				
			||||||
                d2[k] = d2[stem]  # 按照词根进行评级
 | 
					                d2[k] = d2[stem]  # 按照词根进行评级
 | 
				
			||||||
            else:
 | 
					            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
 | 
					    return d2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,7 @@ import uuid
 | 
				
			||||||
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 UnexpectedAlertPresentException, NoAlertPresentException
 | 
					from selenium.common.exceptions import UnexpectedAlertPresentException, NoAlertPresentException
 | 
				
			||||||
 | 
					from selenium.webdriver.common.by import By
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def signup(URL, driver):
 | 
					def signup(URL, driver):
 | 
				
			||||||
    username = 'TestUser' + str(uuid.uuid1()).split('-')[0].title()
 | 
					    username = 'TestUser' + str(uuid.uuid1()).split('-')[0].title()
 | 
				
			||||||
| 
						 | 
					@ -9,25 +10,39 @@ def signup(URL, driver):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    driver.get(URL)
 | 
					    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:
 | 
					    try:
 | 
				
			||||||
        WebDriverWait(driver, 1).until(EC.alert_is_present())
 | 
					        # Click the register link
 | 
				
			||||||
        driver.switch_to.alert.accept()
 | 
					        register_link = WebDriverWait(driver, 10).until(
 | 
				
			||||||
    except (UnexpectedAlertPresentException, NoAlertPresentException):
 | 
					            EC.element_to_be_clickable((By.LINK_TEXT, '注册'))
 | 
				
			||||||
        pass
 | 
					        )
 | 
				
			||||||
 | 
					        register_link.click()
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    return username, password
 | 
					        # 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
 | 
				
			||||||
| 
						 | 
					@ -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