指令碼超時

指令碼超時錯誤是一種WebDriver 錯誤,當用戶提供的指令碼在會話的指令碼超時持續時間到期之前未完成時發生。

指令碼超時持續時間是一個可配置的功能,這意味著您可以更改驅動程式在中斷注入的指令碼之前等待的時間。驅動程式預設會等待 30 秒,然後中斷指令碼並返回指令碼超時錯誤,但可以延長、縮短或設定為無限期。

如果使用 null 值將會話指令碼超時持續時間設定為無限期,則您的會話有陷入不可恢復狀態的風險。請注意,應謹慎使用此功能。

示例

考慮以下非同步指令碼,該指令碼將在 35 秒後解析 promise 或呼叫回撥

python
from selenium import webdriver
from selenium.common import exceptions

session = webdriver.Firefox()
try:
    session.execute_script("""
        let [resolve] = arguments;
        setTimeout(resolve, 35000);
        """)
except exceptions.ScriptTimeoutException as e:
    print(e.message)

輸出

ScriptTimeoutException: Timed out after 35000 ms

但是,如果您期望指令碼需要更長時間才能完成,則可以使用功能來延長會話的預設指令碼超時。

python
from selenium import webdriver
from selenium.common import exceptions

session = webdriver.Firefox(capabilities={"alwaysMatch": {"timeouts": {"script": 150000}}})
session.execute_script("""
    let [resolve] = arguments;
    setTimeout(resolve, 35000);
    """)
print("finished successfully")

輸出

finished successfully

另見