如何在 Azure DevTestLabs 中部署 Selenium Grid
How to deploy Selenium Grid in Azure DevTestLabs
我正在尝试通过 Azure 执行远程 selenium 测试。
我使用 selenium 服务器独立 jar 文件创建了一个自定义模板,并安装了包含节点和集线器工件的 Chocolatey 包。
我启动了虚拟机(集线器和节点)。并在每个虚拟机中手动下载 java 独立 jar 文件,并在命令提示符下使用正确的命令启动每个虚拟机:
中心:
java -jar selenium-server-standalone-3.11.0.jar -role hub
集线器给了我一个 IP 供节点连接。 (对于此示例,我将使用:10.0.0.2)
节点
java -Dwebdriver.chrome.driver="C:\tryGrid\chromedriver.exe" -jar selenium-server-standalone-3.11.0.jar -role node -hub http://10.0.0.2:4444/grid/register/
但是节点无法连接到集线器。
所以我在天蓝色的论坛上搜索解决这个问题。我发现我必须添加工件。因此,在 Azure 中,我转到了我创建的开发测试实验室资源,查找每个虚拟机并检查工件。在这种情况下:管理工件部分。在这里,我发现 Selenium-grid hub 和 Selenium-grid node 在 Implementation Message 中显示了一个错误。
中心:
The resource operation completed with terminal provisioning state
'Failed'. VM has reported a failure when processing extension
'customScriptArtifact-183362431'. Error message: "Finished executing
command".
分机留言:
Executing script GridDeployer.ps1
Parameters
---------- Role: hub ConfigFile: testhub SeleniumGridJarFile: https://seleniumserverstandalonejardow
SeleniumGridJarFileName: s4o9Vx Successfully downloaded the
SeleniumGrid jar file from https://seleniumserverstandalonejardownload. Invoke-WebRequest :
The remote name could not be resolved: 'testhub' At
C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension.9\Downloads\
PublicRepo\master\b8dcb684950157e2f6c44e9774ad70f0b27443d3\Artifacts\windows-se
leniumgrid-hub\scripts\GridDeployer.ps1:58 char:5
+ Invoke-WebRequest -Uri $configFile -OutFile "$PWD$configFileName"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:Htt pWebRequest) [Invoke-WebRequest],
WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShe
ll.Commands.InvokeWebRequestCommand
所以我现在不知道我应该做什么。求助!
PS。我在本地机器上使用这些节点和集线器配置,它工作得很棒,但问题是当我想用 azure VMs
执行它时
好吧,我找到了这个问题的答案。问题不在门户 azure 端,而是在我的虚拟机中。
我阅读了很多关于 github 的论坛和问题以及此处的其他问题。最后我找到了一个关于防火墙问题的。
我刚刚做了什么?在我的虚拟机上我:
- 转到 Windows 具有高级安全性的防火墙
- 单击了 Windows 防火墙属性
- 开启 私人和 Public 配置文件 我将防火墙的状态更改为 关闭。
- 点击应用和确定
然后,对于 Hub 配置,您可以编写一个 json 文件并将其保存在与 selenium 服务器相同的路径中。该文件应包含如下内容:
{
"host": "85.168.37.178",
"port": 4444,
"newSessionWaitTimeout": -1,
"servlets" : [],
"prioritizer": null,
"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent": true,
"nodePolling": 5000,
"cleanUpCycle": 5000,
"timeout": 300000,
"maxSession": 5
}
我将文件保存为 hub.json。在控制台上你写
java -jar selenium-server-standalone-2.6.0.jar -role hub -hubConfig hub.json
对于节点你也可以这样写一个配置文件:
{
"capabilities":
[
{
"browserName": "firefox",
"maxInstances": 5
},
{
"browserName": "chrome",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "internet explorer",
"maxInstances": 1
}
],
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 5,
"port": 5555,
"register": true,
"registerCycle": 5000,
"hub": "http://85.168.37.178:4444/",
"nodeStatusCheckTimeout": 5000,
"nodePolling": 5000,
"role": "node",
"unregisterIfStillDownAfter": 60000,
"downPollingLimit": 2,
"debug": false,
"servlets" : [],
"withoutServlets": [],
"custom": {}
}
最后,在你的 程序中 你可以写 IP 或 DNS,我用了 DNS 因为是 public。
ChromeOptions options = new ChromeOptions();
options.AddArgument("--start-maximized");
RemoteWebDriver(new Uri("http://myvirtualmachinename.server.cloudapp.azure.com:4444/wd/hub"), options.ToCapabilities());
希望这对你也有用!
我正在尝试通过 Azure 执行远程 selenium 测试。
我使用 selenium 服务器独立 jar 文件创建了一个自定义模板,并安装了包含节点和集线器工件的 Chocolatey 包。
我启动了虚拟机(集线器和节点)。并在每个虚拟机中手动下载 java 独立 jar 文件,并在命令提示符下使用正确的命令启动每个虚拟机:
中心:
java -jar selenium-server-standalone-3.11.0.jar -role hub
集线器给了我一个 IP 供节点连接。 (对于此示例,我将使用:10.0.0.2)
节点
java -Dwebdriver.chrome.driver="C:\tryGrid\chromedriver.exe" -jar selenium-server-standalone-3.11.0.jar -role node -hub http://10.0.0.2:4444/grid/register/
但是节点无法连接到集线器。
所以我在天蓝色的论坛上搜索解决这个问题。我发现我必须添加工件。因此,在 Azure 中,我转到了我创建的开发测试实验室资源,查找每个虚拟机并检查工件。在这种情况下:管理工件部分。在这里,我发现 Selenium-grid hub 和 Selenium-grid node 在 Implementation Message 中显示了一个错误。
中心:
The resource operation completed with terminal provisioning state 'Failed'. VM has reported a failure when processing extension 'customScriptArtifact-183362431'. Error message: "Finished executing command".
分机留言:
Executing script GridDeployer.ps1
Parameters ---------- Role: hub ConfigFile: testhub SeleniumGridJarFile: https://seleniumserverstandalonejardow
SeleniumGridJarFileName: s4o9Vx Successfully downloaded the SeleniumGrid jar file from https://seleniumserverstandalonejardownload. Invoke-WebRequest : The remote name could not be resolved: 'testhub' At C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension.9\Downloads\ PublicRepo\master\b8dcb684950157e2f6c44e9774ad70f0b27443d3\Artifacts\windows-se leniumgrid-hub\scripts\GridDeployer.ps1:58 char:5 + Invoke-WebRequest -Uri $configFile -OutFile "$PWD$configFileName" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:Htt pWebRequest) [Invoke-WebRequest], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShe
ll.Commands.InvokeWebRequestCommand
所以我现在不知道我应该做什么。求助!
PS。我在本地机器上使用这些节点和集线器配置,它工作得很棒,但问题是当我想用 azure VMs
执行它时好吧,我找到了这个问题的答案。问题不在门户 azure 端,而是在我的虚拟机中。
我阅读了很多关于 github 的论坛和问题以及此处的其他问题。最后我找到了一个关于防火墙问题的。
我刚刚做了什么?在我的虚拟机上我:
- 转到 Windows 具有高级安全性的防火墙
- 单击了 Windows 防火墙属性
- 开启 私人和 Public 配置文件 我将防火墙的状态更改为 关闭。
- 点击应用和确定
然后,对于 Hub 配置,您可以编写一个 json 文件并将其保存在与 selenium 服务器相同的路径中。该文件应包含如下内容:
{
"host": "85.168.37.178",
"port": 4444,
"newSessionWaitTimeout": -1,
"servlets" : [],
"prioritizer": null,
"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent": true,
"nodePolling": 5000,
"cleanUpCycle": 5000,
"timeout": 300000,
"maxSession": 5
}
我将文件保存为 hub.json。在控制台上你写
java -jar selenium-server-standalone-2.6.0.jar -role hub -hubConfig hub.json
对于节点你也可以这样写一个配置文件:
{
"capabilities":
[
{
"browserName": "firefox",
"maxInstances": 5
},
{
"browserName": "chrome",
"maxInstances": 5,
"seleniumProtocol": "WebDriver"
},
{
"browserName": "internet explorer",
"maxInstances": 1
}
],
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"maxSession": 5,
"port": 5555,
"register": true,
"registerCycle": 5000,
"hub": "http://85.168.37.178:4444/",
"nodeStatusCheckTimeout": 5000,
"nodePolling": 5000,
"role": "node",
"unregisterIfStillDownAfter": 60000,
"downPollingLimit": 2,
"debug": false,
"servlets" : [],
"withoutServlets": [],
"custom": {}
}
最后,在你的 程序中 你可以写 IP 或 DNS,我用了 DNS 因为是 public。
ChromeOptions options = new ChromeOptions();
options.AddArgument("--start-maximized");
RemoteWebDriver(new Uri("http://myvirtualmachinename.server.cloudapp.azure.com:4444/wd/hub"), options.ToCapabilities());
希望这对你也有用!