超时
与 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 }