Compare commits
	
		
			12 Commits 
		
	
	
		
			master
			...
			Bug555-che
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | 6733ed9f86 | |
|  | a49019eb78 | |
|  | 3bde0b0156 | |
|  | b518dab6c9 | |
|  | 7b74a970c7 | |
|  | 7fbccd554a | |
|  | a56c16cc6b | |
|  | 29627ec87a | |
|  | aa8d8b75e0 | |
|  | bb838ad51a | |
|  | d414eaa144 | |
|  | 4b185df84f | 
|  | @ -108,7 +108,7 @@ | ||||||
| 
 | 
 | ||||||
|                 <p><b id="question">{{ today_article['question'] }}</b></p><br/> |                 <p><b id="question">{{ today_article['question'] }}</b></p><br/> | ||||||
|                 <script type="text/javascript"> |                 <script type="text/javascript"> | ||||||
|                     function toggle_visibility(id) { {# https://css-tricks.com/snippets/javascript/showhide-element/#} |                     function toggle_visibility(id) { | ||||||
|                         const e = document.getElementById(id); |                         const e = document.getElementById(id); | ||||||
|                         if (e.style.display === 'block') |                         if (e.style.display === 'block') | ||||||
|                             e.style.display = 'none'; |                             e.style.display = 'none'; | ||||||
|  | @ -195,55 +195,11 @@ | ||||||
|     {% endfor %} |     {% endfor %} | ||||||
| {% endif %} | {% endif %} | ||||||
| <script type="text/javascript"> | <script type="text/javascript"> | ||||||
|     window.onload = function () { // 页面加载时执行 |  | ||||||
|         const settings = { |  | ||||||
|             // initialize settings from localStorage |  | ||||||
|             highlightChecked: localStorage.getItem('highlightChecked') !== 'false', // localStorage stores strings, default to true. same below |  | ||||||
|             readChecked: localStorage.getItem('readChecked') !== 'false', |  | ||||||
|             chooseChecked: localStorage.getItem('chooseChecked') !== 'false', |  | ||||||
|             rangeValue: localStorage.getItem('rangeValue') || '1', |  | ||||||
|             selectedWords: localStorage.getItem('selectedWords') || '' |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         const elements = { |  | ||||||
|             highlightCheckbox: document.querySelector('#highlightCheckbox'), |  | ||||||
|             readCheckbox: document.querySelector('#readCheckbox'), |  | ||||||
|             chooseCheckbox: document.querySelector('#chooseCheckbox'), |  | ||||||
|             rangeComponent: document.querySelector('#rangeComponent'), |  | ||||||
|             rangeValueDisplay: document.querySelector('#rangeValue'), |  | ||||||
|             selectedWordsInput: document.querySelector('#selected-words') |  | ||||||
|         }; |  | ||||||
|         // 应用设置到页面元素 |  | ||||||
|         elements.highlightCheckbox.checked = settings.highlightChecked; |  | ||||||
|         elements.readCheckbox.checked = settings.readChecked; |  | ||||||
|         elements.chooseCheckbox.checked = settings.chooseChecked; |  | ||||||
|         elements.rangeComponent.value = settings.rangeValue; |  | ||||||
|         elements.rangeValueDisplay.textContent = `${settings.rangeValue}x`; |  | ||||||
|         elements.selectedWordsInput.value = settings.selectedWords; |  | ||||||
| 
 |  | ||||||
|         // 刷新页面或进入页面时判断,若不是首篇文章,则上一篇按钮可见 |  | ||||||
|         if (sessionStorage.getItem('pre_page_button') !== 'display' && sessionStorage.getItem('pre_page_button')) { |  | ||||||
|             $('#load_pre_article').show(); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // 事件监听器 |  | ||||||
|         elements.selectedWordsInput.addEventListener('input', () => { |  | ||||||
|             localStorage.setItem('selectedWords', elements.selectedWordsInput.value); |  | ||||||
|         }); |  | ||||||
| 
 |  | ||||||
|         elements.rangeComponent.addEventListener('input', () => { |  | ||||||
|             const rangeValue = elements.rangeComponent.value; |  | ||||||
|             elements.rangeValueDisplay.textContent = `${rangeValue}x`; |  | ||||||
|             localStorage.setItem('rangeValue', rangeValue); |  | ||||||
|         }); |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     function clearSelectedWords() { |     function clearSelectedWords() { | ||||||
|         localStorage.removeItem('selectedWords'); |         localStorage.removeItem('selectedWords'); | ||||||
|         document.querySelector('#selected-words').value = ''; |         document.querySelector('#selected-words').value = ''; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|     function load_next_article() { |     function load_next_article() { | ||||||
|         $("#load_next_article").prop("disabled", true) |         $("#load_next_article").prop("disabled", true) | ||||||
|         $.ajax({ |         $.ajax({ | ||||||
|  | @ -295,7 +251,6 @@ | ||||||
|         }, 2000); |         }, 2000); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     <!-- 检查是否存在上一篇或下一篇,不存在则对应按钮隐藏--> |  | ||||||
|     function check_pre(visited_articles) { |     function check_pre(visited_articles) { | ||||||
|         if ((visited_articles == '') || (visited_articles['index'] <= 0)) { |         if ((visited_articles == '') || (visited_articles['index'] <= 0)) { | ||||||
|             $('#load_pre_article').hide(); |             $('#load_pre_article').hide(); | ||||||
|  | @ -321,13 +276,74 @@ | ||||||
|             $('#read_all').show(); |             $('#read_all').show(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     function longPolling() { | ||||||
|  |         $.ajax({ | ||||||
|  |             url: '/get_next_article/{{username}}', // 这里的URL根据需要更改 | ||||||
|  |             dataType: 'json', | ||||||
|  |             success: function(data) { | ||||||
|  |                 if (data['today_article']) { | ||||||
|  |                     update(data['today_article']); | ||||||
|  |                     check_pre(data['visited_articles']); | ||||||
|  |                     check_next(data['result_of_generate_article']); | ||||||
|  |                     toggleHighlighting(); | ||||||
|  |                 } | ||||||
|  |                 // 发起下一次Long Polling请求 | ||||||
|  |                 longPolling(); | ||||||
|  |             }, | ||||||
|  |             error: function() { | ||||||
|  |                 // 处理错误情况 | ||||||
|  |                 // 发起下一次Long Polling请求 | ||||||
|  |                 longPolling(); | ||||||
|  |             }, | ||||||
|  |             timeout: 30000 // 设置超时时间,单位为毫秒 | ||||||
|  |         }); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     window.onload = function () { // 页面加载时执行 | ||||||
|  |         longPolling(); | ||||||
|  | 
 | ||||||
|  |         const settings = { | ||||||
|  |             // initialize settings from localStorage | ||||||
|  |             highlightChecked: localStorage.getItem('highlightChecked') !== 'false', // localStorage stores strings, default to true. same below | ||||||
|  |             readChecked: localStorage.getItem('readChecked') !== 'false', | ||||||
|  |             chooseChecked: localStorage.getItem('chooseChecked') !== 'false', | ||||||
|  |             rangeValue: localStorage.getItem('rangeValue') || '1', | ||||||
|  |             selectedWords: localStorage.getItem('selectedWords') || '' | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         const elements = { | ||||||
|  |             highlightCheckbox: document.querySelector('#highlightCheckbox'), | ||||||
|  |             readCheckbox: document.querySelector('#readCheckbox'), | ||||||
|  |             chooseCheckbox: document.querySelector('#chooseCheckbox'), | ||||||
|  |             rangeComponent: document.querySelector('#rangeComponent'), | ||||||
|  |             rangeValueDisplay: document.querySelector('#rangeValue'), | ||||||
|  |             selectedWordsInput: document.querySelector('#selected-words') | ||||||
|  |         }; | ||||||
|  |         // 应用设置到页面元素 | ||||||
|  |         elements.highlightCheckbox.checked = settings.highlightChecked; | ||||||
|  |         elements.readCheckbox.checked = settings.readChecked; | ||||||
|  |         elements.chooseCheckbox.checked = settings.chooseChecked; | ||||||
|  |         elements.rangeComponent.value = settings.rangeValue; | ||||||
|  |         elements.rangeValueDisplay.textContent = `${settings.rangeValue}x`; | ||||||
|  |         elements.selectedWordsInput.value = settings.selectedWords; | ||||||
|  | 
 | ||||||
|  |         // 刷新页面或进入页面时判断,若不是首篇文章,则上一篇按钮可见 | ||||||
|  |         if (sessionStorage.getItem('pre_page_button') !== 'display' && sessionStorage.getItem('pre_page_button')) { | ||||||
|  |             $('#load_pre_article').show(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         // 事件监听器 | ||||||
|  |         elements.selectedWordsInput.addEventListener('input', () => { | ||||||
|  |             localStorage.setItem('selectedWords', elements.selectedWordsInput.value); | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         elements.rangeComponent.addEventListener('input', () => { | ||||||
|  |             const rangeValue = elements.rangeComponent.value; | ||||||
|  |             elements.rangeValueDisplay.textContent = `${rangeValue}x`; | ||||||
|  |             localStorage.setItem('rangeValue', rangeValue); | ||||||
|  |         }); | ||||||
|  |     }; | ||||||
| </script> | </script> | ||||||
| </body> | </body> | ||||||
| <style> |  | ||||||
|     mark { |  | ||||||
|         color: #{{ yml['highlight']['color'] }}; |  | ||||||
|         background-color: rgba(0, 0, 0, 0); |  | ||||||
|     } |  | ||||||
| </style> |  | ||||||
| 
 |  | ||||||
| </html> | </html> | ||||||
										
											Binary file not shown.
										
									
								
							|  | @ -9,5 +9,7 @@ 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     |     my_driver = webdriver.Chrome() | ||||||
|     return my_driver |     return my_driver | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,43 @@ | ||||||
|  | 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