forked from mrlan/EnglishPal
				
			Test case scripts
							parent
							
								
									4b6342cf3e
								
							
						
					
					
						commit
						7b29f8d652
					
				| 
						 | 
				
			
			@ -54,12 +54,19 @@ def save_frequency_to_pickle(d, pickle_fname):
 | 
			
		|||
    pickle.dump(d2, f)
 | 
			
		||||
    f.close()
 | 
			
		||||
 | 
			
		||||
def unfamiliar(path,word):
 | 
			
		||||
    f = open(path,"rb")
 | 
			
		||||
def unfamiliar(path, word):
 | 
			
		||||
    f = open(path, "rb")
 | 
			
		||||
    dic = pickle.load(f)
 | 
			
		||||
    dic[word] += [datetime.now().strftime('%Y%m%d%H%M')]
 | 
			
		||||
    fp = open(path,"wb")
 | 
			
		||||
    pickle.dump(dic,fp)
 | 
			
		||||
    if word in dic:
 | 
			
		||||
        if len(dic[word]) <= 16:  # Check if the length of the list is less than 16
 | 
			
		||||
            dic[word].append(datetime.now().strftime('%Y%m%d%H%M'))
 | 
			
		||||
        else:
 | 
			
		||||
            dic[word].append(datetime.now().strftime('%Y%m%d%H%M'))
 | 
			
		||||
    else:
 | 
			
		||||
        dic[word] = [datetime.now().strftime('%Y%m%d%H%M')]
 | 
			
		||||
    f.close()
 | 
			
		||||
    with open(path, "wb") as fp:
 | 
			
		||||
        pickle.dump(dic, fp)
 | 
			
		||||
 | 
			
		||||
def familiar(path,word):
 | 
			
		||||
    f = open(path,"rb")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@ 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()
 | 
			
		||||
| 
						 | 
				
			
			@ -9,25 +10,39 @@ def signup(URL, driver):
 | 
			
		|||
 | 
			
		||||
    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()
 | 
			
		||||
        
 | 
			
		||||
    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,121 @@
 | 
			
		|||
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_unfamiliar_button(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(8)
 | 
			
		||||
       # Add selected word to the list of unfamiliar words
 | 
			
		||||
        add_to_unfamiliar_button =  driver.find_element(By.XPATH, '//button[text()="把生词加入我的生词库"]')
 | 
			
		||||
        add_to_unfamiliar_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)
 | 
			
		||||
 | 
			
		||||
        # Mark word as unfamiliar
 | 
			
		||||
        time.sleep(5)
 | 
			
		||||
        for _ in range(16):
 | 
			
		||||
            time.sleep(1)
 | 
			
		||||
            unfamiliar_btn = driver.find_element(By.XPATH, '//a[contains(@class, "btn-warning") and text()="不熟悉"]')
 | 
			
		||||
            unfamiliar_btn.click()
 | 
			
		||||
        # Wait for the page to updatec
 | 
			
		||||
        time.sleep(5)
 | 
			
		||||
 | 
			
		||||
        # # Keep track of the unfamiliar word count
 | 
			
		||||
        # counter = 0
 | 
			
		||||
        # freq_count = driver.find_element(By.ID, 'freq_'+ word).text 
 | 
			
		||||
        # # counter = freq_count
 | 
			
		||||
        # print(f"Unfamiliar word count: {freq_count}")
 | 
			
		||||
        # time.sleep(3)
 | 
			
		||||
 | 
			
		||||
        #add new words
 | 
			
		||||
        word = select_more_words(driver)
 | 
			
		||||
        add_to_unfamiliar_button =  driver.find_element(By.XPATH, '//button[text()="把生词加入我的生词库"]')
 | 
			
		||||
        add_to_unfamiliar_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)
 | 
			
		||||
      
 | 
			
		||||
      
 | 
			
		||||
        #current count after adding new words
 | 
			
		||||
        current_unfamiliar_count = driver.find_element(By.XPATH, '//a[contains(@class, "btn-warning") and text()="不熟悉"]')
 | 
			
		||||
        current_unfamiliar_count = int(unfamiliar_btn.text.split('(')[1].split(')')[0])
 | 
			
		||||
        print(f"Unfamiliar word count: {current_unfamiliar_count}")
 | 
			
		||||
        time.sleep(3)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        # Verify that the number of unfamiliar words has decreased
 | 
			
		||||
        # current_unfamiliar_count = driver.find_element(By.ID, 'freq_'+word).text
 | 
			
		||||
        # print(f"Unfamiliar word second count: {current_unfamiliar_count}")
 | 
			
		||||
        # time.sleep(3)
 | 
			
		||||
 | 
			
		||||
        # # Verify that the number of unfamiliar words remains the same
 | 
			
		||||
        # assert current_unfamiliar_count == freq_count, "Unfamiliar word count did not increase as expected"
 | 
			
		||||
        # time.sleep(3)
 | 
			
		||||
 | 
			
		||||
        # 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()
 | 
			
		||||
| 
						 | 
				
			
			@ -1,43 +0,0 @@
 | 
			
		|||
import time
 | 
			
		||||
import pytest
 | 
			
		||||
import uuid
 | 
			
		||||
from selenium import webdriver
 | 
			
		||||
from selenium.webdriver import ActionChains
 | 
			
		||||
from selenium.webdriver.common.by import By
 | 
			
		||||
from selenium.webdriver.support.ui import WebDriverWait
 | 
			
		||||
from selenium.webdriver.support import expected_conditions as EC
 | 
			
		||||
from selenium.common.exceptions import UnexpectedAlertPresentException, NoAlertPresentException, NoSuchElementException, \
 | 
			
		||||
    TimeoutException
 | 
			
		||||
from conftest import URL
 | 
			
		||||
driver = webdriver.Chrome()
 | 
			
		||||
def test_bug555():
 | 
			
		||||
    try:
 | 
			
		||||
        driver.maximize_window()
 | 
			
		||||
        base_url = "http://127.0.0.1:5000"
 | 
			
		||||
        driver.get(base_url)
 | 
			
		||||
        article = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'article')))
 | 
			
		||||
        perform_actions_on_article(driver, article)
 | 
			
		||||
 | 
			
		||||
        next_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'load_next_article')))
 | 
			
		||||
        next_button.click()
 | 
			
		||||
        print("Clicked next article button.")
 | 
			
		||||
 | 
			
		||||
        prev_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'load_pre_article')))
 | 
			
		||||
        prev_button.click()
 | 
			
		||||
        print("Clicked previous article button.")
 | 
			
		||||
 | 
			
		||||
    except (TimeoutException, NoSuchElementException) as e:
 | 
			
		||||
        print(f"An error occurred: {e}")
 | 
			
		||||
 | 
			
		||||
    finally:
 | 
			
		||||
        driver.quit()
 | 
			
		||||
        print("Driver closed.")
 | 
			
		||||
 | 
			
		||||
def perform_actions_on_article(driver, article):
 | 
			
		||||
    actions = ActionChains(driver)
 | 
			
		||||
    actions.move_to_element(article)
 | 
			
		||||
    actions.click_and_hold()
 | 
			
		||||
    actions.move_by_offset(450, 200)
 | 
			
		||||
    actions.release()
 | 
			
		||||
    actions.perform()
 | 
			
		||||
    print("Performed actions on article.")
 | 
			
		||||
		Loading…
	
		Reference in New Issue