【问题标题】:Selenium Grid - Cannot Find Capabilities When Specifying IE VersionSelenium Grid - 指定 IE 版本时找不到功能
【发布时间】:2016-12-13 17:22:11
【问题描述】:

我在使用 Selenium Grid 并尝试使用特定版本的 IE 注册节点然后为该浏览器的实例调用 Grid Hub 时遇到问题。我的设置:

  • 带有 C# 绑定的 Selenium 3.0.1
  • 一个定义我的页面对象/框架的类库和一个包含我的 NUnit 3.5 测试的类库
  • 一个运行 Server 2008 的 VM 托管数据库和我的 Selenium Grid Hub,以“java -jar C:\Selenium\selenium-server-standalone-3.0.1.jar -role hub -maxSession 20”开始
  • 一个使用我的 webdriver 节点运行 Windows 7 和 IE9 的 VM

我以(我为可读性添加换行符,它是 bat 文件中的一行)开始我的节点:

java -Dwebdriver.ie.driver=C:\Selenium\IEDriverServer.exe -Dwebdriver.chrome.driver=C:\Selenium\chromedriver.exe -jar C:\Selenium\selenium-server-standalone-3.0.1.jar -role webdriver -hub http://10.10.1.20:4444/grid/register -port 5566 -maxSession 20
-browser "browserName=internet explorer,version=9,maxInstances=1,platform=ANY,seleniumProtocol=WebDriver"
-browser "browserName=chrome,maxInstances=5"
-browser "browserName=firefox,maxInstances=5"

我调用 RemoteWebDriver 的代码是:

caps = new DesiredCapabilities();
caps.SetCapability("browserName", "internet explorer");
caps.SetCapability("version", "9");
WebDriver = new RemoteWebDriver(new System.Uri("http://10.10.1.20:4444/wd/hub"), caps);

当我运行此代码时,当代码创建新的 RemoteWebDriver 集线器返回时:

INFO - Got a request to create a new session: Capabilities [{browserName=internet explorer, version=9}]

Visual Studio 然后显示返回以下错误:

System.InvalidOperationException : Error forwarding the new session cannot find : Capabilities [{browserName=internet explorer, version=9}] TearDown : System.NullReferenceException : Object reference not set to an instance of an object.

我尝试将节点和我的代码设置为使用“9.0”而不是“9”,并将 browserName 设置为“iexplore”而不是“Internet Explorer”,正如我在网上找到的一些帖子所建议的那样,但没有成功.我花了两个小时浏览 Google 和 Selenium 文档,但似乎没有人列举各种浏览器的“版本”功能所期望的格式,所以我什至不能确定我正在使用正确的价值观。如果我从节点启动批处理中删除版本标志并在我的 C# 代码中对版本的 setCapability 调用,浏览器启动正常。但是,我将有一个包含多个 IE 变体的网格进行测试,并且需要能够指定我想要的 IE 版本。谁能帮助我以正确的方式为特定版本的 IE 启动节点,将该节点注册到集线器,并使用 RemoteWebDriver 调用它?

【问题讨论】:

    标签: c# selenium internet-explorer selenium-webdriver selenium-grid2


    【解决方案1】:

    我找到了一个解决方案 - 虽然我无法使用命令行参数获取特定于版本的 IE 实例,但我能够使用基于 JSON 的配置来做到这一点。我现在使用以下命令启动我的 Selenium Grid 节点:

    java -Dwebdriver.ie.driver=C:\SeleniumGrid\IEDriverServer.exe -Dwebdriver.chrome.driver=C:\SeleniumGrid\chromedriver.exe -jar C:\SeleniumGrid\selenium-server-standalone-3.0.1 .jar -role webdriver -nodeConfig "C:\SeleniumGrid\NodeIE9.json"

    我的 NodeIE9.json 文件包含以下内容:

    {
      "capabilities":
      [
    
        {
          "browserName": "firefox",
          "maxInstances": 5,
          "seleniumProtocol": "WebDriver"
        },
        {
          "browserName": "chrome",
          "maxInstances": 5,
          "seleniumProtocol": "WebDriver"
        },
        {
          "browserName": "internet explorer",
          "version": "9",
          "maxInstances": 1,
          "seleniumProtocol": "WebDriver"
        }
      ],
      "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
      "maxSession": 11,
      "port": 5555,
      "register": true,
      "registerCycle": 5000,
      "hub": "http://10.10.1.20:4444",
      "nodeStatusCheckTimeout": 5000,
      "nodePolling": 5000,
      "role": "node",
      "unregisterIfStillDownAfter": 60000,
      "downPollingLimit": 2,
      "debug": false,
      "servlets" : [],
      "withoutServlets": [],
      "custom": {}
    }
    

    我在某处看到了一个建议,其中提到“版本”属性需要是字符串而不是 JSON 中的 int,所以可能通过命令行传入的参数被错误地解释了?无论哪种方式,这都非常有效,而且我更喜欢使用 JSON 配置节点而不是命令行参数。它更干净。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 2018-11-08
      • 2020-03-01
      相关资源
      最近更新 更多