不需要Java的Nightwatch.js

7

那么你的意思是想创建一些脚本/片段来与Selenium服务器进行交互,而不需要使用Java? - MikeVe
@NateStone 正确。我知道如何使用WebDriverJS驱动浏览器,所以看到Nightwatch.js需要Java让我感到惊讶。 - Željko Filipin
4个回答

6
我正在为JavaScript社区提供服务,因此我尝试在本地运行nightwatchjs而不引入Java。 我确信,如果您运行远程Selenium服务器,则必须在远程实例上运行Java服务器,以将命令传递给特定于浏览器的驱动程序。 例如:ChromeDriver。
话虽如此,我认为可以直接将标准客户端连接到本地的标准WebDriver(ChromeDriver),而无需进行Java selenium-server-standalone-2.xx.0.jar服务器的设置。 尝试了nightwatchJS作为第一个客户端后,很难找到一个能够正常工作的配置,因为所有文档都表明Nate Stone所说的那样。 所有我看到的示例都指出需要指定selenium-server-standalone-2.xx.0.jar的位置:
selenium": {
  "start_process": true,
  "server_path": "lib/selenium-server-standalone-2.53.0.jar",
  "cli_args" : {
    "webdriver.chrome.driver" : "/Users/greg.kedge/bin/chromedriver"
  },
  "log_path": "integration/log" }

这是我可以说的:如果你想让Nightwatch在测试期间为你启动(和停止)服务器("start_process": true),似乎必须运行Java服务器。
然而,通过多次尝试,如果你想在命令行上自己启动ChromeDriver,从而使其一直保持开启状态,我可以在没有Java Selenium独立版的情况下运行ChromeDriver。注意:目前只在OS X上尝试过...所以,假设ChromeDriver在你的$PATH中:
% chromedriver --url-base=/wd/hub
Starting ChromeDriver 2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4) on port 9515
Only local connections are allowed.

现在获取端口号(9515),并更新nightwatch.json文件,以指定您想要使用Chrome。我正在设置默认值,但您可以设置一个特定于Chrome的环境。从nightwatch.json中完全删除“selenium”块,并告诉nightwatch它可以找到正在运行的服务器提供服务的浏览器类型:
  "test_settings": {
    "default": {
      "launch_url": "http://localhost:8888/",

      "selenium_host": "127.0.0.1",
      "selenium_port": "9515", 

      "silent": true,
      "firefox_profile": false,
      "screenshots": {
        "enabled": false,
        "path": ""
      },
      "desiredCapabilities": {
        "browserName": "chrome",
        "javascriptEnabled": true,
        "acceptSslCerts": true,
        "__commentOut: chromeOptions" : {
              "args" : ["start-fullscreen"]
            }
      },
    }
  }

这样使用对我很有效;我可以运行Nightwatch来驱动Chrome,而无需Java Selenium独立服务器。同样,在OS X上使用始终运行的ChromeDriver。我无法想出如何让Nightwatch管理启动/停止ChromeDriver而不添加Java Selenium独立服务器。

4

那个代码库真的非常有帮助。谢谢你的分享! - Enrico

1
夜览器(Nightwatch.js)会在Selenium服务器上运行测试。Selenium服务器是一个Java-Servlet。
因此,要使用夜览器(Nightwatch.js),您只需要“间接”需要Java(这不是夜览器(Nightwatch.js)所需的,而是Selenium所需的)。
但是,您可以使用不同的语言作为Selenium客户端,因为您可以下载不同的WebDriver语言绑定here
++++++++++++++++++编辑++++++++++++++++++
这些WebDriver /绑定与夜览器(Nightwatch.js)无关。如果您的测试和浏览器在同一台计算机上运行,则可以在没有Selenium服务器的情况下使用这些WebDriver /绑定。在这种情况下,您不需要Java,因为WebDriver会直接针对浏览器运行测试(详见here)。
另一方面,夜览器(Nightwatch.js)绝对需要Java,因为它需要用Java编写的“Selenium-Standalone-Server”。据我所知,没有其他语言的实现,因此不能在没有Java的情况下运行它。
夜览器(Nightwatch.js)向Selenium-Standalone-Server发送HTTP请求(这里涉及到Java),服务器会与浏览器创建一个会话。
总之,没有Java --> 没有"Selenium-Standalone-Server" --> 无法使用Nightwatch.js进行测试。

谢谢,但我不确定我们是否理解彼此。您可以使用官方的Selenium JavaScript绑定而不使用Java来使用Selenium。我的问题是为什么Nightwatch.js使用Java,当在没有Java的情况下也可以驱动浏览器。实际上,我的问题是是否有一种方法可以在不安装Java的情况下使用Nightwatch.js。从您的回答中看来,答案是否定的。 - Željko Filipin

0

有:

global.js文件中指定以下内容:

const chromedriver = require('chromedriver');

module.exports = {

before: function (cb) {
    chromedriver.start();
    cb();
},
after: function (cb) {
    chromedriver.stop();
    cb();
},

前往 nightwatch.conf.js 文件并在其中指定全局路径

这样,你的 Selenium 就会通过 Chromedriver 转接,而无需在你的机器上安装 Selenium。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接