如何使用 Selenium Grid Extras/json 配置文件设置 Selenium 节点的 ID?

How do I set a Selenium node's id with Selenium Grid Extras/json config files?

我正在将我们的 Selenium Grid 转换为使用 Selenium Grid Extras,到目前为止看起来很棒!但是我遇到了一个问题,以前我们的节点在网格控制台中由它们的机器名称表示(例如 id : http://SELENIUMXX:5555, OS : WINDOWS),但现在只由它们的 IP 地址表示(例如 id : http://x.x.x.x:5556, OS : WINDOWS) .由于前者更容易阅读,我想知道如何使用 SGE/json 配置文件设置节点 ID 属性。用于打开节点本身的 bat 文件都是 SGE 从配置文件动态构建的,所以我不能在那里设置 ID。

我有一个传入的 "friendlyHostName" 参数,但只有当您单击配置选项卡时,该参数才会显示在控制台中。

您应该在下载 Selenium Grid Extras jar 的目录中找到一个节点配置文件。打开那个 JSON 文件并添加一个属性

"host": "MyMachineNameGoesHere"

键下"configuration"

我决定试一试 Selenium Grid 附加功能,这是我的完整节点配置文件的样子

{
  "capabilities": [
    {
      "seleniumProtocol": "WebDriver",
      "browserName": "chrome",
      "maxInstances": 3,
      "version": "52",
      "platform": "MAC"
    }
  ],
  "configuration": {
    "proxy": "com.groupon.seleniumgridextras.grid.proxies.SetupTeardownProxy",
    "maxSession": 3,
    "port": 5555,
    "register": true,
    "unregisterIfStillDownAfter": 10000,
    "hubPort": 4444,
    "hubHost": "127.0.0.1",
    "host": "dragonlair.local",
    "nodeStatusCheckTimeout": 10000,
    "downPollingLimit": 0
  },
  "loadedFromFile": "node_5555.json"
}

我找到了一种通用的方法,因此您不必手动更改每一个。在您的配置目录中,设置一个主节点配置文件,根据 Krishnan Mahadevan 的回答在配置中添加 "host": "HOSTNAME", 行,然后 运行 这个批处理文件:

@echo off
set str1=   "host": "HOSTNAME",
set str2=   "host": 
set inputfile=node_master.json
set outputfile=[YOUR OUTPUT FILE]
for /d %%v in ("*") do ( 
  COPY %inputfile% %%v
  cd %%v
  >"%outputfile%" (
    for /f "usebackq delims=" %%A in (%inputfile%) do (
      if "%%A" equ "%str1%" (echo %str2% "%%v",) else (echo %%A)
    )
  )
  del %inputfile%
  cd ..
)

用 Selenium 3.141 反复研究这个问题,试图让 json 文件正常工作。然后偶然发现了解决方案...

问题: 我的 Selenium 3.x "Grid Console" 没有显示我在 json配置文件。

解决方法:不要使用json配置文件。相反,在命令行中放置“-id nodeName”。

示例:

java.exe -jar /pathToJar/selenium-server-standalone-3.141.59.jar -id MyNodeName -role node -nodeConfig /pathToMyConfig/nodeConfig.json

其中 "MyNodeName" 是您希望网格控制台(网站)将您的 Selenium 节点显示为的任何唯一名称(而不是默认 IP 地址)。

总结: 在命令行中,使用“-id EnterNodeNameHere”。

不知道顺序是否重要...但我把 -id 放在 -role parm 之前。