slo*_*vic 5 selenium-grid selenium-grid2
如何在Selenium Grid中终止会话?我的问题是,如果我的测试失败集线器仍然保持此测试的会话,我不能运行另一个测试(它运行但失败,因为无法获得免费节点,因为它在集线器中注册).我已经找到了如何在Selenium Grid节点中杀死线程并且有一个使用的答案,DELETE /session/:sessionId但它对我不起作用.关于Selenium Grid或Extras的文档是非常纯粹的,也许有些人有类似的问题并知道如何解决它?
Kri*_*van 12
集线器永远不会拒绝新的会话请求,因为插槽不可用.新会话最终在Grid的队列中.
您需要查看代码以检查为什么driver.quit()不一直被调用(无论测试失败的原因).
有时您的客户端可能会崩溃(例如,运行测试用例的JVM可能会崩溃,或者您可能会stop button在IDE中点击以终止测试.在这种情况下,您最终会创建孤立的会话.
但是Grid还有一些机制可以通过在启动时为Grid指定的属性来清除它们.
selenium Grid专门有三个参数,用于这些清理.
-browserTimeout 以秒为单位:WebDriver命令运行时允许浏览器会话挂起的秒数(例如:driver.get(url)).如果在WebDriver命令仍在处理时达到超时,则会话将退出.最小值为60.未指定,零或负值意味着无限期等待.Default: 0
-cleanUpCycle 以毫秒为单位:指定集线器为超时(即挂起)线程轮询运行代理的频率.还必须指定timeout选项.Default: 5000(5秒)
-timeout,-sessionTimeout 以秒为单位:指定服务器自动终止在过去X秒内没有任何活动的会话之前的超时.然后将释放测试槽以供另一个测试使用.这通常用于处理客户端崩溃.对于网格集线器/节点角色,还必须设置cleanUpCycle.Default: 1800
使用上述所有3个参数的组合,您可以将节点配置为自动关闭孤立的浏览器实例和会话.
该文档在selenium uber jar本身作为命令行文档提供.您可以参考此 SO答案,了解如何获取它并查看可用的其他选项.
还有相关的一些其它文档timeouts的Grid'2 wiki页面在这里.
有关更多信息,请参阅stackoverflow帖子中的我的注释:如果在Jenkins上中止测试,则Selenium驱动程序实例仍然存在
The delete method works for me. This is my python code:
def clear_sessions(session_id=None):
"""
Here we query and delete orphan sessions
docs: https://www.selenium.dev/documentation/grid/advanced_features/endpoints/
:return: None
"""
url = "http://127.0.0.1:4444"
if not session_id:
# delete all sessions
r = requests.get("{}/status".format(url))
data = json.loads(r.text)
for node in data['value']['nodes']:
for slot in node['slots']:
if slot['session']:
id = slot['session']['sessionId']
r = requests.delete("{}/session/{}".format(url, id))
else:
# delete session from params
r = requests.delete("{}/session/{}".format(url, session_id))
Run Code Online (Sandbox Code Playgroud)
I hope this is helpful for you
| 归档时间: |
|
| 查看次数: |
9392 次 |
| 最近记录: |