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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?