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