设置selenium网格以使用Microsoft边缘

时间:2016-11-02 19:15:28

标签: selenium selenium-webdriver vaadin microsoft-edge

环境:

  • win10(build 10240)
  • Vaadin Testbench 4.1
  • Selenium 2.53
  • 适用于构建10240的Firefox,Chrome,IE11和Edge的驱动程序

节点和集线器

启动java -jar c:\ users \ powder \ vaadin-testbench-standalone-4.1.0.jar -role hub
启动java -jar c:\ users \ powder \ vaadin-testbench-standalone-4.1.0.jar -role node -Dwebdriver.edge.driver = c:\ users \ powder \ MicrosoftWebDriver.exe

在java代码中使用

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setBrowserName(DesiredCapabilities.edge().getBrowserName());
//DesiredCapabilities capabilities = DesiredCapabilities.edge(); Tried as well
capabilities.setCapability("acceptSslCerts", "true");
setDriver(new RemoteWebDriver(new URL(this.remoteHubUrl), capabilities));
getDriver().get("http://www.google.com");

错误消息

  

转发新会话时出错无法找到:功能[{acceptSslCerts = true,browserName = MicrosoftEdge}]

Selenium grid console - edge is missing

其他浏览器一切正常,但Edge没有。任何想法如何解决?

2 个答案:

答案 0 :(得分:4)

这里有两个问题:

首先,如果您查看the default node config,您会注意到默认情况下只启用了Firefox,Chrome和IE(这就是为什么您需要使用它们通过系统属性指定驱动程序位置) 。如果你想使用任何其他浏览器,那么你需要使用自己的json配置:

{
  "capabilities": [
    {
      "browserName": "MicrosoftEdge",
      "platform": "WIN10",
      "maxInstances": 1
    },
    {
      "browserName": "firefox",
      "platform": "WIN10",
      "maxInstances": 5
    },
    {
      "browserName": "chrome",
      "platform": "WIN10",
      "maxInstances": 5
    },
    {
      "browserName": "internet explorer",
      "platform": "WIN10",
      "maxInstances": 1
    }
  ],
  "hub": "http://selenium-hub-host:4444"
}

并将其传递给您的命令行:

java "-Dwebdriver.edge.driver=c:\path\to\MicrosoftWebDriver.exe" "-Dwebdriver.gecko.driver=c:\path\to\geckodriver.exe" "-Dwebdriver.chrome.driver=c:\path\to\chromedriver.exe" "-Dwebdriver.ie.driver=c:\path\to\IEDriverServer.exe" -jar "c:\path\to\selenium-server-standalone.jar" -role node -nodeConfig "c:\path\to\the\above.json"

(顺便说一句:或者您也可以使用多个-capabilities-browser参数将整个配置放在命令行中)

这在理论上应该有效。然而在实践中,你经常遇到第二个问题,即:"有时它随机地不起作用" ;]最初一切都会好看:你的网格将在控制台上正确报告Edge浏览器功能,它会正确地将测试委托给包含Edge的节点,该节点将正确启动Edge浏览器,但浏览器有时会冻结其初始蓝屏使用e徽标,几秒钟之后,您将在客户端获得一些例外而没有任何有意义的堆栈跟踪或消息(我现在没有将其保存到任何地方以便粘贴到此处)。

有些人建议workaround在同一台机器上启动2个独立的节点(当然是在不同的端口上):一个仅用于Edge,第二个用于IE,FF和Chrome。这种方式看起来非常稳定(在win-10和Selenium-3.4.0上运行的Edge build 15063上测试)

其他信息:

除上述内容外,Edge驱动程序的限制很少,需要在配置中进行特定的解决方法:

  • 目前驱动程序/浏览器仅支持1个并发会话,因此maxInstances必须设置为1(荣誉为this answer
  • 驱动程序必须在前台运行,以便浏览器窗口可以实际显示在桌面上。因此,节点无法在启动时作为Windows服务启动,也不能从Windows任务计划程序启动。自动启动节点的最佳方法是配置自动登录并添加批处理脚本,将节点启动到用户的启动程序,如my article
  • 中所述

答案 1 :(得分:0)

尝试将-D参数放在-jar参数之前。我有一个问题,它认为-Dwebdriver .....是selenium本身而不是java的参数。