【问题标题】:How to determine a test has finished on a Selenium Grid如何确定测试已在 Selenium Grid 上完成
【发布时间】:2018-04-15 16:12:51
【问题描述】:

我正在寻找一种方法,可以确保在 Selenium Grid 节点上的每次测试后发生某些事情。 (例如控制节点上的某些进程)

在 Selenium Grid 上最好的方法是什么?也许我不需要重新发明轮子,并且有某种方法可以使用 Selenium Grid 基础架构以编程方式确定节点上的测试何时完成?

【问题讨论】:

  • 您使用的是哪些 Selenium 客户端? Java/Python?
  • @DebanjanB 嗨,我正在运行 Java。

标签: java selenium selenium-webdriver selenium-grid selenium-grid2


【解决方案1】:

你可以通过两种方式做到这一点

  1. 如果您希望无论测试完成什么都进行清理,也就是说,假设您不关心测试,您只想知道用户何时调用 driver.quit(),它会向集线器,以便您可以在节点上运行某种清理。

为了实现这一点,您应该构建自己的自定义代理(通过扩展 org.openqa.grid.selenium.proxy.DefaultRemoteProxy)并将您的清理逻辑嵌入到 afterSession() 中,以便在执行 driver.quit() 之后但在会话之前执行由网格发布。您需要确保此处不会触发任何异常。请参考我在网格上写的this 文章,以帮助您了解如何使用自定义代理。

(或)

  1. 如果您希望仅针对某些特定测试进行清理,例如,假设您可能一直在运行某些特定测试,您希望完成屏幕录制并且只想停止它对于那些要求它的测试。

如果这是你想要的,那么

  • 首先,您应该构建一个 servlet,它在被调用时可以为您进行清理。您只需将此 servlet 注入节点。要了解如何执行此操作,请参阅我的 this 文章。
  • 在致电driver.quit() 之前,您应该执行以下操作:

    1. 获取测试路由到的机器的 IP 和端口地址。您可以参考我的 this 博客文章,或使用我的 this 库来了解如何做到这一点。

现在在您调用driver.quit() 之后,利用您从上面获得的IP 和端口地址,对您添加到节点的servlet 触发http 操作(GET/POST)

【讨论】:

  • 好东西!太感谢了。我认为解决方案可能是按照 Selenium 官方文档的建议通过使用网格现有基础设施,但找不到任何好的资源或教程来指导我完成该任务。
【解决方案2】:

使用 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 in seconds : 在 WebDriver 命令运行时允许浏览器会话挂起的秒数(例如: 驱动程序.get(url))。如果在执行 WebDriver 命令时达到超时 仍在处理中,会话将退出。最小值为 60。 未指定、零或负值表示无限期等待。 默认值:0

  • cleanUpCycle(以毫秒为单位):指定集线器轮询的频率 为超时(即挂起)线程运行代理。还必须指定 超时选项。默认值:5000(5 秒)

  • timeout, -sessionTimeout in seconds : 指定之前的超时时间 服务器自动终止没有任何活动的会话 在最后 X 秒内。然后将释放测试槽以供另一个测试使用。这通常用于照顾客户
    崩溃。对于网格中心/节点角色,还必须设置 cleanUpCycle。
    默认值:1800

结合使用以上 3 个参数,您可以 可以将您的节点配置为自动关闭孤立的浏览器 实例和会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多