0

我正在Protractor使用Selenoid. 我需要使用 dockerized Windows 映像,以便我可以从 Linux 机器测试 Internet Explorer 和 Edge。

我能够通过运行使其从 curl 工作:

curl -X POST http://127.0.0.1:4444/wd/hub/session -d '{"capabilities":{"browserName":"MicrosoftEdge","count":1,"alwaysMatch":{"browserName":"MicrosoftEdge","selenoid:options":{"enableVNC":true,"enableVideo":false,"enableLog":true,"logName":"edge-18.0.log"}}}}'

我的量角器配置如下所示:

  multiCapabilities: [
    {
      browserName: "MicrosoftEdge",
      "alwaysMatch": {
        browserName: "MicrosoftEdge",
        "selenoid:options": {
          enableVNC: true,
          enableVideo: false,
          enableLog: true,
          logName: "edge-18.0.log"
        }
      }
    }
  ]

但是像这样通过服务器protractor发送它:selenoid

{
    "desiredCapabilities": {
        "browserName": "MicrosoftEdge",
        "count": 1,
        "alwaysMatch": {
            "browserName": "MicrosoftEdge",
            "selenoid:options": {
                "enableVNC": true,
                "enableVideo": false,
                "enableLog": true,
                "logName": "edge-18.0.log"
            }
        }
    }
}

问题是这desiredCapabilities应该只是“能力”。我一直在四处寻找,试图找出创建的位置,以便我可以创建某种标志来切换它。

有任何想法吗?

4

1 回答 1

1

使用量角器6.0解决了我的问题,但打破了我所有的测试。

5.4.1通过修补 selenium-webdriver 包,我能够继续使用。看看 Protractor 的6做法,我对 Protractor 做了5.4.1

我编辑了位于的文件node_modules/selenium-webdriver/lib/webdriver.js并添加了以下内容:

// Capability names that are defined in the W3C spec.
const W3C_CAPABILITY_NAMES = new Set([
    'acceptInsecureCerts',
    'browserName',
    'browserVersion',
    'platformName',
    'pageLoadStrategy',
    'proxy',
    'setWindowRect',
    'timeouts',
    'unhandledPromptBehavior',
]);

然后在同一个文件中,我修改static createSession(executor, capabilities, opt_flow, opt_onQuit)方法以添加以下内容:

    let W3CCaps = new Capabilities(capabilities);
    for (let k of W3CCaps.keys()) {
      // Any key containing a colon is a vendor-prefixed capability.
      if (!(W3C_CAPABILITY_NAMES.has(k) || k.indexOf(':') >= 0)) {
        W3CCaps.delete(k);
      }
    }

    cmd.setParameter('capabilities', W3CCaps);

在所有这些更改之后,到达 Selenoid 的请求是这样的:

{
    "desiredCapabilities": {
        "browserName": "MicrosoftEdge",
        "version": "18.0",
        "enableVNC": true,
        "enableVideo": false,
        "count": 1
    },
    "capabilities": {
        "browserName": "MicrosoftEdge"
    }
}

我的 Protractor 5 配置如下所示:

  multiCapabilities: [{
    browserName: 'MicrosoftEdge',
    version: '18.0',
    enableVNC: true,
    enableVideo: false
  }]

笔记:

所以我不必担心刷新安装或更新,我使用包patch-package( https://github.com/ds300/patch-package ) 创建一个补丁,当任何这些事件发生时应用。这是一个很棒的视频,解释了如何使用该软件包https://www.youtube.com/watch?v=zBPcVGr6XPk

于 2019-10-21T18:55:22.627 回答