超時

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 }