Selenium Grid里有各种超时,包括slot的和session的以及webdriver的
slot的超时设置
slot属于node下的子节点,一般Selenium Grid会根据cpu核心数量分配对应的slot槽位,每个slot槽位可以同时允许一个session运行。
有时候这个session会因为代码异常中断没有触发session销毁机制,导致session长期占用slot槽位,当所有slot槽位都满了以后,这个node的后续请求只能积压在queue中,导致node被阻塞。
为了解决这个问题,在grid的config文件中可以设置session-timeout来释放超时的slot槽位
1 2 3 |
[node] #Let X be the session-timeout in seconds. The Node will automatically kill a session that has not had any activity in the last X seconds. This will release the slot for other tests. session-timeout = 1 |
以上设置表示当1秒内没有活动时自动释放slot槽位
设置slot超时除了可以解决代码异常中断的情况,还可以解决docker环境下session对应的container已经被释放但是session没有释放依旧占用slot的情况出现。
webdriver的超时设置
在session下的webdriver有一个超时设置,用于设置session内浏览器的超时行为,通过webapi进行设置
通过post以下json到{host}:{port}/session/{sessionId}/timeouts进行设置
1 2 3 4 5 |
{ "script": 30000, "pageLoad": 300000, "implicit": 0 } |
get同样地址可以获取当前超时设置
这几个配置项的作用
- implicit:设置find一个element时的等待时间
- pageLoad:页面加载超时
- script:异步时的等待时间
KnowMore
https://www.selenium.dev/documentation/grid/configuration/cli_options/#sessions
https://www.selenium.dev/documentation/grid/configuration/toml_options/
There are no comments yet