4

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

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

我使用 selenium 服务器独立 jar 文件创建了一个自定义模板,并安装了 Chocolatey 包,其中包含节点和集线器工件。

我启动了虚拟机(集线器和节点)。并在每个 vm 中手动下载了 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 中,我访问了我创建的 DevTest Lab 资源,查找每个 vm 并检查工件。在这种情况下:管理工件部分。在这里,我发现 Selenium-grid hub 和 Selenium-grid 节点在实施消息中显示错误。在此处输入图像描述

中心:

资源操作完成,终端配置状态为“失败”。处理扩展“customScriptArtifact-183362431”时,VM 报告失败。错误消息:“已完成执行命令”。

分机留言:

执行脚本 GridDeployer.ps1

参数 ---------- 作用:hub ConfigFile:testhub SeleniumGridJarFile:https://seleniumserverstandalonejardow

SeleniumGridJarFileName: s4o9Vx 从https://seleniumserverstandalonejardownload成功下载了 SeleniumGrid jar 文件。Invoke-WebRequest:无法解析远程名称:'testhub' At C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.9\Downloads\2\ 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 VM 执行它时

4

1 回答 1

2

好吧,我能够找到这个问题的答案。问题不在于门户网站 Azure 方面,而在于我的虚拟机。

我在 github 上阅读了很多论坛和问题,并在此处阅读了其他问题。最后我找到了一个关于防火墙问题的。

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

  1. 转到具有高级安全性的 Windows 防火墙
  2. 单击Windows 防火墙属性
  3. 私有和公共配置文件上,我将防火墙的状态更改为关闭。
  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。

ChromeOptions options = new ChromeOptions();
options.AddArgument("--start-maximized");
RemoteWebDriver(new Uri("http://myvirtualmachinename.server.cloudapp.azure.com:4444/wd/hub"), options.ToCapabilities());

我希望这也适用于你!

于 2018-04-23T20:56:50.403 回答