超時
與 WebDriver 會話相關聯的是各種超時定義,這些定義控制 指令碼注入、文件導航 和 元素檢索 的行為。
你會發現 超時物件 用於幾個不同的上下文中。它可以用作 建立新會話(透過 功能)時的配置,在會話建立後作為匹配的有效功能的一部分返回,以及用作 設定超時 和 獲取超時 命令的輸入和輸出。
預設值可以在 建立會話 時被覆蓋,並且它們將一直有效,直到會話關閉。如果你在會話生命週期內呼叫 設定超時,預設值將被覆蓋,並將對會話的生命週期有效,直到再次呼叫 設定超時。
有效載荷
超時物件 是一個 JSON 物件,它描述當前會話的超時值,或者用作配置超時的輸入
隱式-
以毫秒為單位的時間,用於在查詢元素時重試 元素定位策略。預設值為 0,這意味著策略只執行一次。
頁面載入-
以毫秒為單位的時間,用於等待文件完成載入。預設情況下,WebDriver 將等待五分鐘(或 300,000 毫秒)。
指令碼-
使用 執行指令碼 或 執行非同步指令碼 注入的指令碼將一直執行,直到它們達到指令碼超時時間,這也是以毫秒為單位。然後指令碼將被中斷,並返回 指令碼超時錯誤。預設值為 30 秒(或 30,000 毫秒)。
當物件用作 設定超時 命令的輸入或 超時功能 的一部分時,在 建立新會話 時,所有欄位都是可選的。這意味著你可以單獨或一次性配置零個或多個超時時間值。
示例
在會話建立時設定超時
你可以在啟動新的 WebDriver 會話時提供 超時功能物件 來覆蓋預設的會話超時
python
import urllib
from selenium import webdriver
def inline(doc):
return "data:text/html;charset=utf-8,{}".format(urllib.quote(doc))
session = webdriver.Firefox(capabilities={"timeouts": {"implicit": 4500}})
session.get(inline("""
<h1>Example</h1>
<script>
// Inserts <p> below <h1> after 2.5 seconds:
setTimeout(() => {
const delayedElement = document.createElement("p");
const h1 = document.querySelector("h1");
document.body.insertAfter(delayedElement, h1);
}, 2500);
</script>
""")
# This will cause the driver to wait 4.5 seconds
# for #foo to appear in the DOM:
delayed_element = session.find_element_by_tag_name("p")
在執行時設定和獲取超時
超時也可以在執行時使用設定超時命令進行設定。這些將覆蓋會話的當前超時,並將對會話的整個生命週期有效,直到對同一命令進行後續呼叫
python
from selenium import webdriver
session = webdriver.Firefox()
session.set_timeouts({"implicit": 4.5})
print(session.get_timeouts)
輸出將以秒為單位,因為這是 Python 中的習慣用法時間單位
json
{ "implicit": 4.5, "script": 300, "pageLoad": 30000 }