如何确定测试已在Selenium Grid上完成

时间:2017-11-03 01:34:07

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

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

Selenium Grid的最佳方法是什么?也许我不需要重新发明轮子,我可以通过某种方式使用Selenium Grid基础架构来确定测试何时以编程方式完成?

2 个答案:

答案 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)

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

  1. 如果你想要进行清理而不管测试结束了什么,比如说你不关心测试,你只想知道用户何时调用driver.quit()来向终端会话消息发出信号。集线器,以便您可以在节点上进行某种清理。
  2. 为了实现这一目标,您应该构建自己的自定义代理(通过扩展org.openqa.grid.selenium.proxy.DefaultRemoteProxy)并将清理逻辑作为afterSession()的一部分嵌入,以便在driver.quit()之后执行在Grid发布会话之前执行。您需要确保在此处不触发任何异常。请参阅我在网格上写的this文章,以帮助您了解如何使用自定义代理。

    <强>(或)

    1. 如果你想仅针对某些特定的测试进行清理,即,假设您可能已经运行了一些特定的测试,您希望屏幕录制完成并且只想停止它那些要求它的测试。
    2. 如果这是你想要的,那么

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

        1. 获取测试路由到的计算机的IP和端口地址。您可以参考我的this博客文章,或仅使用我的this图书馆了解如何执行此操作。

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