Nightwatchjs声称支持Edge浏览器,但实际上似乎并不支持它,至少在基于文档实施时是如此

问题描述

我试图让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标志。我尚未验证它们确实有效,因此请记住这一点。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...