[英]How to determine a test has finished on a Selenium Grid
我正在寻找一种方法,以确保在Selenium Grid节点上进行每次测试后,某些事情会发生。 (例如,控制节点上的某些进程)
在Selenium Grid上做的最好方法是什么? 也许我不需要重新发明轮子,并且可以使用某种方式使用Selenium Grid基础结构来确定何时以编程方式完成对节点的测试?
使用SessionIds,
以下python代码将从网格中打印会话信息
import urllib.request
import json
grid_url = "http://127.0.0.1:4444/wd/hub"
sessions_req = urllib.request.urlopen(grid_url + "/sessions")
sessions_data = sessions_req.read()
sessions_encoding = sessions_req.info().get_content_charset('utf-8')
sessions = json.loads(sessions_data.decode(sessions_encoding))
for session in sessions["value"]:
print (session["id"])
print (session["capabilities"]["browserName"])
输出应为:
26294a77-7ab2-47f1-81fd-e11f593bd960 Firefox
29aa25cb-a60a-4454-a35c-315f76ff1251铬
测试完成后,您可以声明sessionIds以确定测试的状态。 活动会话必须具有ID。 要了解该特定测试,请将会话ID注入驱动程序实例中,并使用getCurrentUrl()或takeScreenshot()方法。
如果您专注于孤立浏览器的管理,那么Selenium Grid可以在配置级别为您提供帮助。 硒网格专门具有三个用于清理的参数。
browserTimeout以秒为单位:运行WebDriver命令时允许浏览器会话挂起的秒数(例如:driver.get(url))。 如果仍在处理WebDriver命令时达到超时,则会话将退出。 最小值为60。未指定,零或负值表示无限期等待。 默认值:0
cleanUpCycle(以毫秒为单位):指定集线器多久轮询一次正在运行的代理以获取超时(即挂起)的线程。 还必须指定超时选项。默认值:5000(5秒)
timeout,-sessionTimeout以秒为单位:指定在服务器自动终止最近X秒内没有任何活动的会话之前的超时。 然后将释放测试插槽,以供其他测试使用。 通常用于照顾客户
崩溃。 对于网格中心/节点角色,还必须设置cleanUpCycle。
默认值:1800
结合使用以上三个参数,可以将节点配置为自动关闭孤立的浏览器实例和会话。
您可以通过两种方式执行此操作
为了实现这一点,您应该构建自己的自定义代理(通过扩展org.openqa.grid.selenium.proxy.DefaultRemoteProxy
),并将清理逻辑嵌入到afterSession()
以便在driver.quit()
被执行,但是在Grid释放会话之前。 您需要确保在此不会触发任何异常。 请参考我在网格上撰写的这篇文章,以帮助您了解如何使用自定义代理。
(要么)
如果这是您想要的,那么
在调用driver.quit()
之前,您应该执行以下操作:
现在,在调用driver.quit()
之后,通过使用从上面获得的IP和端口地址,触发对添加到节点的servlet的http操作(GET/POST)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.