forked from mrlan/EnglishPal
				
			test script and helper function
							parent
							
								
									6c81329cdd
								
							
						
					
					
						commit
						ecefeb69b8
					
				
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -9,5 +9,5 @@ def URL(): | ||||||
| 
 | 
 | ||||||
| @pytest.fixture | @pytest.fixture | ||||||
| def driver(): | def driver(): | ||||||
|     my_driver = webdriver.Chrome() |     my_driver = webdriver.Chrome() or Edge() | ||||||
|     return my_driver |     return my_driver | ||||||
|  |  | ||||||
|  | @ -0,0 +1,48 @@ | ||||||
|  | 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) | ||||||
|  |      | ||||||
|  |     try: | ||||||
|  |         # 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 | ||||||
|  |      | ||||||
|  |     except Exception as e: | ||||||
|  |         print(f"An error occurred: {e}") | ||||||
|  |         return None, None | ||||||
|  | @ -0,0 +1,93 @@ | ||||||
|  | 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_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(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) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         #add new words | ||||||
|  |         word = select_more_words(driver) | ||||||
|  |         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 | ||||||
|  |         add_words_again.click() | ||||||
|  |         # Wait for the page to update again | ||||||
|  |         time.sleep(3) | ||||||
|  |        | ||||||
|  |      | ||||||
|  |         # compare user level  | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  |         # 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