量角器 W3C 功能
Protractor W3C capability
我正在使用 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
应该只是“能力”。我一直在到处寻找,试图找出创建的位置,以便我可以创建某种标志来切换它。
有什么想法吗?
使用 Protractor 6.0
解决了我的问题,但破坏了我所有的测试。
通过修补 selenium-webdriver 包,我能够继续使用 5.4.1
。看 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"
}
}
我的量角器 5 配置如下所示:
multiCapabilities: [{
browserName: 'MicrosoftEdge',
version: '18.0',
enableVNC: true,
enableVideo: false
}]
注:
所以我不必担心刷新安装或更新我使用包 patch-package
(https://github.com/ds300/patch-package) to create a patch that is applied when any of those events happen. Here is a great video explaining how to use that package https://www.youtube.com/watch?v=zBPcVGr6XPk
我正在使用 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
应该只是“能力”。我一直在到处寻找,试图找出创建的位置,以便我可以创建某种标志来切换它。
有什么想法吗?
使用 Protractor 6.0
解决了我的问题,但破坏了我所有的测试。
通过修补 selenium-webdriver 包,我能够继续使用 5.4.1
。看 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"
}
}
我的量角器 5 配置如下所示:
multiCapabilities: [{
browserName: 'MicrosoftEdge',
version: '18.0',
enableVNC: true,
enableVideo: false
}]
注:
所以我不必担心刷新安装或更新我使用包 patch-package
(https://github.com/ds300/patch-package) to create a patch that is applied when any of those events happen. Here is a great video explaining how to use that package https://www.youtube.com/watch?v=zBPcVGr6XPk