forked from mrlan/EnglishPal
				
			Make test_add_word.py work again
							parent
							
								
									7d5b1c0ed4
								
							
						
					
					
						commit
						0a63c5354a
					
				|  | @ -14,4 +14,6 @@ app/db/wordfreqapp.db | ||||||
| app/static/donate-the-author.jpg | app/static/donate-the-author.jpg | ||||||
| app/static/donate-the-author-hidden.jpg | app/static/donate-the-author-hidden.jpg | ||||||
| app/model/__pycache__/ | app/model/__pycache__/ | ||||||
|  | app/test/__pycache__/ | ||||||
|  | app/test/.pytest_cache/ | ||||||
| app/log.txt | app/log.txt | ||||||
|  |  | ||||||
							
								
								
									
										17
									
								
								README.md
								
								
								
								
							
							
						
						
									
										17
									
								
								README.md
								
								
								
								
							|  | @ -129,6 +129,23 @@ We welcome feedback on EnglishPal.  Feedback examples: | ||||||
| EnglishPal's bugs and improvement suggestions are recorded in [Bugzilla](http://118.25.96.118/bugzilla/buglist.cgi?bug_status=__all__&list_id=1302&order=Importance&product=EnglishPal&query_format=specific).  Send (lanhui at zjnu.edu.cn) an email message for opening a Bugzilla account or reporting a bug. | EnglishPal's bugs and improvement suggestions are recorded in [Bugzilla](http://118.25.96.118/bugzilla/buglist.cgi?bug_status=__all__&list_id=1302&order=Importance&product=EnglishPal&query_format=specific).  Send (lanhui at zjnu.edu.cn) an email message for opening a Bugzilla account or reporting a bug. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | ## End-to-end testing | ||||||
|  | 
 | ||||||
|  | We use the Selenium test framework to test our app. | ||||||
|  | 
 | ||||||
|  | In order to run the test, first we need to download a webdriver executable. | ||||||
|  | 
 | ||||||
|  | Microsoft Edge's webdriver can be downloaded from [microsoft-edge-tools-webdriver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/). Make sure the version we download matches the version of the web browser installed on our laptop. | ||||||
|  | 
 | ||||||
|  | After extracting the downloaded zip file (e.g., edgedriver_win64.zip), rename msedgedriver.exe to MicrosoftWebDriver.exe. | ||||||
|  | 
 | ||||||
|  | Add MicrosoftWebDriver.exe's path to system's PATH variable. | ||||||
|  | 
 | ||||||
|  | Install the following dependencies too: | ||||||
|  | 
 | ||||||
|  | - pip install -U selenium==3.141.0 | ||||||
|  | - pip install -U urllib3==1.26.2 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| ## TODO | ## TODO | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,5 @@ | ||||||
| import pytest | import pytest | ||||||
| from selenium import webdriver | from selenium import webdriver | ||||||
| from selenium.webdriver.common.desired_capabilities import DesiredCapabilities |  | ||||||
| 
 | 
 | ||||||
| @pytest.fixture | @pytest.fixture | ||||||
| def URL(): | def URL(): | ||||||
|  | @ -9,5 +8,4 @@ def URL(): | ||||||
| 
 | 
 | ||||||
| @pytest.fixture | @pytest.fixture | ||||||
| def driver(): | def driver(): | ||||||
|     my_driver = webdriver.Edge()  # uncomment this line if you wish to run the test on your laptop     |     return webdriver.Edge()  # uncomment this line if you wish to run the test on your laptop | ||||||
|     return my_driver |  | ||||||
|  |  | ||||||
|  | @ -0,0 +1,33 @@ | ||||||
|  | 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 | ||||||
|  | 
 | ||||||
|  | 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 | ||||||
|  |      | ||||||
|  |     return username, password | ||||||
|  | @ -1,68 +1,23 @@ | ||||||
| # -*- coding: utf-8 -*- | import time | ||||||
| # Run the docker image using the following command: | from helper import signup | ||||||
| # docker run -d -p 4444:4444 selenium/standalone-chrome |  | ||||||
| from selenium import webdriver |  | ||||||
| from selenium.webdriver.common.desired_capabilities import DesiredCapabilities |  | ||||||
| 
 |  | ||||||
| import random, time |  | ||||||
| import string |  | ||||||
| 
 |  | ||||||
| driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.FIREFOX) |  | ||||||
| driver.implicitly_wait(10) |  | ||||||
| 
 |  | ||||||
| HOME_PAGE = 'http://121.4.94.30:91/' |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def has_punctuation(s): | def test_add_word(URL, driver): | ||||||
|     return [c for c in s if c in string.punctuation] != [] |  | ||||||
|      |  | ||||||
| def test_add_word(): |  | ||||||
|     try: |     try: | ||||||
|         driver.get(HOME_PAGE) |         username, password = signup(URL, driver) # sign up a new account and automatically log in | ||||||
|         assert 'English Pal -' in driver.page_source |         time.sleep(1) | ||||||
|      |  | ||||||
|         # login |  | ||||||
|         elem = driver.find_element_by_link_text('登录') |  | ||||||
|         elem.click() |  | ||||||
|      |  | ||||||
|         uname = 'lanhui' |  | ||||||
|         password = 'l0ve1t' |  | ||||||
|         elem = driver.find_element_by_name('username') |  | ||||||
|         elem.send_keys(uname) |  | ||||||
|      |  | ||||||
|         elem = driver.find_element_by_name('password') |  | ||||||
|         elem.send_keys(password) |  | ||||||
|          |  | ||||||
|         elem = driver.find_element_by_xpath('//form[1]/p[3]/input[1]') # 找到登录按钮 |  | ||||||
|         elem.click() |  | ||||||
|      |  | ||||||
|         assert 'EnglishPal Study Room for ' + uname in  driver.title |  | ||||||
|      |  | ||||||
|         # get essay content |  | ||||||
|         elem = driver.find_element_by_id('text-content') |  | ||||||
|         essay_content = elem.text |  | ||||||
| 
 | 
 | ||||||
|  |         # enter the word in the text area | ||||||
|         elem = driver.find_element_by_id('selected-words') |         elem = driver.find_element_by_id('selected-words') | ||||||
|         word = random.choice(essay_content.split()) |         word = 'devour' | ||||||
|         while 'font>' in word or 'br>' in word or 'p>' in word or len(word) < 6 or has_punctuation(word): |  | ||||||
|             word = random.choice(essay_content.split()) |  | ||||||
| 
 |  | ||||||
|         elem.send_keys(word) |         elem.send_keys(word) | ||||||
| 
 | 
 | ||||||
|         elem = driver.find_element_by_xpath('//form[1]//input[1]') # 找到get所有词频按钮 |         elem = driver.find_element_by_xpath('//form[1]//button[1]') # 找到"把生词加入我的生词库"按钮 | ||||||
|         elem.click() |  | ||||||
|      |  | ||||||
|         elems = driver.find_elements_by_xpath("//input[@type='checkbox']") |  | ||||||
|         for elem in elems: |  | ||||||
|             if elem.get_attribute('name') == 'marked': |  | ||||||
|         elem.click() |         elem.click() | ||||||
| 
 | 
 | ||||||
|         elem = driver.find_element_by_name('add-btn') # 找到加入我的生词簿按钮 |         elem = driver.find_element_by_name('add-btn') # 找到加入我的生词簿按钮 | ||||||
|         elem.click() |         elem.click() | ||||||
| 
 | 
 | ||||||
|         driver.refresh() |  | ||||||
|         driver.refresh() |  | ||||||
|         driver.refresh()         |  | ||||||
|         elems = driver.find_elements_by_xpath("//p[@class='new-word']/a") |         elems = driver.find_elements_by_xpath("//p[@class='new-word']/a") | ||||||
| 
 | 
 | ||||||
|         found = 0 |         found = 0 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue