forked from mrlan/EnglishPal
				
			Compare commits
	
		
			No commits in common. "Bug555-chenshiying" and "master" have entirely different histories. 
		
	
	
		
			Bug555-che
			...
			master
		
	
		| 
						 | 
				
			
			@ -108,7 +108,7 @@
 | 
			
		|||
 | 
			
		||||
                <p><b id="question">{{ today_article['question'] }}</b></p><br/>
 | 
			
		||||
                <script type="text/javascript">
 | 
			
		||||
                    function toggle_visibility(id) {
 | 
			
		||||
                    function toggle_visibility(id) { {# https://css-tricks.com/snippets/javascript/showhide-element/#}
 | 
			
		||||
                        const e = document.getElementById(id);
 | 
			
		||||
                        if (e.style.display === 'block')
 | 
			
		||||
                            e.style.display = 'none';
 | 
			
		||||
| 
						 | 
				
			
			@ -195,11 +195,55 @@
 | 
			
		|||
    {% endfor %}
 | 
			
		||||
{% endif %}
 | 
			
		||||
<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() {
 | 
			
		||||
        localStorage.removeItem('selectedWords');
 | 
			
		||||
        document.querySelector('#selected-words').value = '';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    function load_next_article() {
 | 
			
		||||
        $("#load_next_article").prop("disabled", true)
 | 
			
		||||
        $.ajax({
 | 
			
		||||
| 
						 | 
				
			
			@ -251,6 +295,7 @@
 | 
			
		|||
        }, 2000);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    <!-- 检查是否存在上一篇或下一篇,不存在则对应按钮隐藏-->
 | 
			
		||||
    function check_pre(visited_articles) {
 | 
			
		||||
        if ((visited_articles == '') || (visited_articles['index'] <= 0)) {
 | 
			
		||||
            $('#load_pre_article').hide();
 | 
			
		||||
| 
						 | 
				
			
			@ -276,74 +321,13 @@
 | 
			
		|||
            $('#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>
 | 
			
		||||
</body>
 | 
			
		||||
<style>
 | 
			
		||||
    mark {
 | 
			
		||||
        color: #{{ yml['highlight']['color'] }};
 | 
			
		||||
        background-color: rgba(0, 0, 0, 0);
 | 
			
		||||
    }
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
</html>
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -9,7 +9,5 @@ def URL():
 | 
			
		|||
 | 
			
		||||
@pytest.fixture
 | 
			
		||||
def driver():
 | 
			
		||||
    my_driver = webdriver.Chrome()
 | 
			
		||||
    my_driver = webdriver.Edge()  # uncomment this line if you wish to run the test on your laptop    
 | 
			
		||||
    return my_driver
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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