我正在寻找一种方法,我可以确保在Selenium Grid节点上的每次测试后发生某些事情。 (例如,控制节点上的某些进程)
Selenium Grid的最佳方法是什么?也许我不需要重新发明轮子,我可以通过某种方式使用Selenium Grid基础架构来确定测试何时以编程方式完成?
答案 0 :(得分:1)
使用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 火狐
29aa25cb-A60A-4454-A35C-315f76ff1251 铬
测试完成后,您可以断言sessionIds以确定测试的状态。活动会话必须具有Id。要获得该特定测试的见解,请在驱动程序实例中注入Session Id并使用getCurrentUrl()或takeScreenshot()方法。
如果您专注于孤儿浏览器的管理,那么selenium Grid可以在配置级别为您提供帮助。 selenium Grid专门有三个用于清理的参数。
browserTimeout(秒):WebDriver命令运行时允许浏览器会话挂起的秒数(例如: driver.get(URL))。如果在WebDriver命令时达到超时 仍处理,会话将退出。最小值为60 未指定,零或负值意味着无限期等待。 默认值:0
cleanUpCycle(以毫秒为单位):指定集线器轮询的频率 为超时(即挂起)线程运行代理。还必须指定 超时选项。默认:5000(5秒)
timeout,-sessionTimeout in seconds:指定之前的超时 服务器会自动杀死没有任何活动的会话 在最后X秒。然后将释放测试槽以供另一个测试使用。这通常用于照顾客户 崩溃。对于网格集线器/节点角色,还必须设置cleanUpCycle 默认值:1800
使用以上所有3个参数的组合,你 可以将您的节点配置为自动关闭孤立的浏览器 实例和会话。
答案 1 :(得分:1)
你可以用两种方式做到这一点
为了实现这一目标,您应该构建自己的自定义代理(通过扩展org.openqa.grid.selenium.proxy.DefaultRemoteProxy
)并将清理逻辑作为afterSession()
的一部分嵌入,以便在driver.quit()
之后执行在Grid发布会话之前执行。您需要确保在此处不触发任何异常。请参阅我在网格上写的this文章,以帮助您了解如何使用自定义代理。
<强>(或)强>
如果这是你想要的,那么
在致电driver.quit()
之前,您应该执行以下操作:
现在,在调用driver.quit()
之后,通过使用从上面获取的IP和端口地址,触发对添加到节点的servlet的http操作(GET/POST)
。