Возможности транспортира W3C

Я использую Protractor с Selenoid. Мне нужно использовать докерированные образы Windows, чтобы я мог тестировать Internet Explorer и Edge из Linux.

Мне удалось заставить его работать из 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 должно быть просто «способностями». Я искал повсюду, пытаясь выяснить, где это создано, чтобы я мог создать какой-то флаг, чтобы иметь возможность переключать его.

Любые идеи?


person Emil Orol    schedule 18.10.2019    source источник
comment
Похоже, что только Protractor 6.0.0 полностью поддерживает w3c. Вы используете последнюю версию?   -  person vania-pooh    schedule 20.10.2019
comment
Право на деньги. Спасибо @ vania-pooh   -  person Emil Orol    schedule 21.10.2019


Ответы (1)


Использование транспортира 6.0 решило мою проблему, но сломало все мои тесты.

Я смог продолжать использовать 5.4.1, исправив пакет selenium-webdriver. Глядя на то, как это сделал транспортир 6, я сделал это с транспортиром 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

person Emil Orol    schedule 21.10.2019
comment
Имейте в виду, что транспортир 6.0 все еще находится в бета-версии и еще не стабилен. - person Xotabu4; 23.10.2019