超时

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 }