如何在 Azure DevTestLabs 中部署 Selenium Grid

How to deploy Selenium Grid in Azure DevTestLabs

我正在尝试通过 Azure 执行远程 selenium 测试。

为此,我使用了 https://github.com/Azure/azure-devtestlab/tree/master/samples/DevTestLabs/QuickStartTemplates/201-dtl-create-lab-with-seleniumgrid

我使用 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 的论坛和问题以及此处的其他问题。最后我找到了一个关于防火墙问题的。

我刚刚做了什么?在我的虚拟机上我:

  1. 转到 Windows 具有高级安全性的防火墙
  2. 单击了 Windows 防火墙属性
  3. 开启 私人和 Public 配置文件 我将防火墙的状态更改为 关闭。
  4. 点击应用确定

然后,对于 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());

希望这对你也有用!