Nightwatchjs 声称支持 Edge 浏览器,但实际上似乎并不支持,至少在基于文档实现时是这样

Nightwatchjs claims support for Edge browser, but does not actually seem to support it, at least when implemented based on documentation

我试图让 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 属性是问题所在,检查该名称的文件并未为 Edge 实现任何功能,即使 Nightwatchjs 声称支持它。有什么想法吗?

注意:我将 cucumber-js 与 Nightwatchjs 一起使用。

我已经为此手动编写了一个解决方法。我修改了 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,
      args : ["disable-web-security", "ignore-certificate-errors", "no-sandbox", "disable-gpu"]
    },
  },
  webdriver: {
    start_process: true,
    port: 4450,
    server_path: './bin/drivers/operadriver',
    cli_args: [
      // --verbose
    ]
  }
}

上面的“args”可能对这两个浏览器无效,但因为它们是 chromium,所以我复制了 chrome 标志。我还没有验证它们是否确实有效,所以请记住这一点。