问题描述
我试图让Nightwatchjs识别Edge浏览器并在其上运行测试。错误:
Unsupported browser: microsoftedge. There is no available driver.
我已经搜索了好几个小时,在Edge浏览器放弃EdgeHtml并成为基于Chromium的浏览器之前,似乎已经有一些提及。我尝试了这些地方的所有建议。我还在Github上使用了示例项目,例如在mucsi96/nightwatch-api中看到的项目。
每次尝试都会导致上述错误。我尝试将其命名为edge,microsoftedge,甚至尝试提出一个假装实际上是IE的建议。 Nightwatch甚至提到了对edge browser here的支持。但是文档非常有限,并且所有建议的方法都行不通。
我尝试了几种不同的配置方法,例如:
edge: {
desiredCapabilities: {
browserName: 'MicrosoftEdge',javascriptEnabled: true
}
}
edge: {
desiredCapabilities : {
browserName : 'MicrosoftEdge',edgeOptions:{
w3c: false,}
},start_process: false,webdriver: {
default_path_prefix: '',server_path: './node_modules/edgedriver/bin/edgedriver',start_process: true,use_legacy_jsonwire: true
}
},
我还拥有Nightwatch的最新版本(1.4.3)。似乎是browserName属性是问题所在,并且即使Nightnightjs声称支持该功能,用于检查名称的文件也没有为Edge实现任何功能。有什么想法吗?
注意:我在Nightwatchjs中使用Cucumber-js。
解决方法
我已经为此手动编写了解决方法。我修改了Nightwatchjs代码,以添加对它建议支持的浏览器的支持,但缺少该代码。
EdgeDriver逻辑edgedriver.js
OperaDriver逻辑operadriver.js
这些是位于./node_modules/nightwatchjs/lib/runner/wd-instances中的全新文件。
接下来,替换现有的browersname.js文件with this(或仅手动添加新的浏览器名称。
最后,转到webdriver-server.js并将以下代码段添加到switch语句中的“ createInstance()”方法中:
case BrowserName.EDGE:
WebDriverImpl = EdgeDriver;
break;
case BrowserName.OPERA:
WebDriverImpl = OperaDriver;
break;
并将其添加到顶部
const EdgeDriver = require('./wd-instances/edgedriver.js');
const OperaDriver = require('./wd-instances/operadriver.js');
这将允许您立即注册Opera或Edge浏览器,并从nightwatch.conf.js文件(或json文件)对它们进行测试。这是我的声明:
edge: {
desiredCapabilities: {
//alwaysMatch: { 'ms:edgeOptions': { args: ['--headless'] } },browserName: 'MicrosoftEdge',javascriptEnabled: true,acceptSslCerts: true,edgeOptions:{
w3c: false,args : ["disable-web-security","ignore-certificate-errors","no-sandbox","disable-gpu"]
}
},start_process: false,webdriver: {
default_path_prefix: '',server_path: './bin/drivers/edgedriver',start_process: true,port: 4445,use_legacy_jsonwire: true
}
},opera: {
desiredCapabilities : {
browserName : 'opera',operaOptions : {
w3c: false,"disable-gpu"]
},},webdriver: {
start_process: true,port: 4450,server_path: './bin/drivers/operadriver',cli_args: [
// --verbose
]
}
}
上面的“ args”对于这两个浏览器可能无效,但是由于它们是铬,因此我复制了chrome标志。我尚未验证它们确实有效,因此请记住这一点。