Запуск Selenium Server с помощью Nightwatch.js

Я использовал selenium-webdriver и хотел попробовать nightwatch.js, чтобы посмотреть, проще ли его использовать. Я следовал инструкциям здесь. Я решил позволить Nightwatch автоматически запускать сервер селена для меня, поэтому я сделал то, что я считал правильной конфигурацией, основанной на приведенной выше ссылке. Я получаю ошибку, которую я не могу понять, и вывод говорит:

Starting selenium server... started - PID:  1760

[Test] Test Suite
=================

Running:  demoTestGoogle

Error retrieving a new session from the selenium server
Error: connect ECONNREFUSED 127.0.0.1:8080
    at Object.exports._errnoException (util.js:856:11)
    at exports._exceptionWithHostPort (util.js:879:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1053:14)


Connection refused! Is selenium server started?


Process finished with exit code 1

Файл журнала отладки селена говорит об этом

13:43:03.394 INFO - Launching a standalone Selenium Server
13:43:03.474 INFO - Java: Oracle Corporation 25.73-b02
13:43:03.474 INFO - OS: Windows 7 6.1 amd64
13:43:03.483 INFO - v2.52.0, with Core v2.52.0. Built from revision 4c2593c
13:43:03.530 INFO - Driver class not found: com.opera.core.systems.OperaDriver
13:43:03.530 INFO - Driver provider com.opera.core.systems.OperaDriver is not registered
13:43:03.536 INFO - Driver provider org.openqa.selenium.safari.SafariDriver registration is skipped:
registration capabilities Capabilities [{browserName=safari, version=, platform=MAC}] does not match the current platform VISTA
13:43:03.665 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
13:43:03.665 INFO - Selenium Server is up and running

Это мой файл nightwatch.json

{
  "src_folders": [ "tests" ],
  "output_folder": "reports",
  "custom_commands_path": "",
  "custom_assertions_path": "",
  "page_objects_path": "",
  "globals_path": "",
  "selenium": {
    "start_process": true,
    "server_path": "./bin/selenium-server-standalone-jar/jar/selenium-server-standalone-2.52.0.jar",
    "start_session" : true,
    "log_path": "",
    "host": "",
    "port": 4444,
    "cli_args": {
      "webdriver.chrome.driver": "",
      "webdriver.ie.driver": ""
    }
  },
  "test_settings": {
    "default": {
      "launch_url": "http://localhost",
      "selenium_port": 8080,
      "selenium_host": "localhost",
      "silent": true,
      "screenshots": {
        "enabled": false,
        "path": ""
      },
      "desiredCapabilities": {
        "browserName": "firefox",
        "javascriptEnabled": true,
        "acceptSslCerts": true
      }
    },
    "chrome": {
      "desiredCapabilities": {
        "browserName": "chrome",
        "javascriptEnabled": true,
        "acceptSslCerts": true
      }
    }
  }
}

Редактировать: добавлен demoTestGoogle, у меня есть файл nightwatch.js, в котором я запускаю, а затем он запускает функцию demoTestGoogle.

nightwatch.js, который запускает demoTestGoogle

require('nightwatch/bin/runner.js');

Функция demoTestGoogle в отдельном файле JS

this.demoTestGoogle = function (browser) {
    browser
        .url('http://www.google.com')
        .waitForElementVisible('body', 1000)
        .setValue('input[type=text]', 'nightwatch')
        .waitForElementVisible('button[name=btnG]', 1000)
        .click('button[name=btnG]')
        .pause(1000)
        .assert.containsText('#main', 'The Night Watch')
        .end();
};

person Grim    schedule 01.03.2016    source источник
comment
Похоже, два разных экземпляра селена пытаются работать на одном порту (8080). Возможно, вы пытаетесь запустить другой сервер где-то в demoTestGoogle?   -  person honyovk    schedule 01.03.2016
comment
@honyovk, пожалуйста, смотрите раздел редактирования   -  person Grim    schedule 01.03.2016
comment
Вы нашли решение?   -  person Richard    schedule 29.07.2016
comment
не с nightwatch.js   -  person Grim    schedule 30.07.2016
comment
Что вы используете сейчас? Я тоже не могу решить эту проблему   -  person Richard    schedule 01.08.2016
comment
webdriver.io   -  person Grim    schedule 01.08.2016
comment
Перезагрузка решила проблему.   -  person zero_cool    schedule 17.01.2017


Ответы (1)


Как указано в этом замечательном руководстве по Nightwatch, dwyl-learn-nightwatch, вы можете заменить свой Nightwatch .json с файлом .js для добавления таких функций, как переменные, глобальные переменные и даже требование в Selenium, чтобы Nightwatch мог его увидеть и запустить.

Вот простой пример, который я модифицировал из исходного кода GitHub, чтобы запустить селен с его тестами. Сначала обязательно установите зависимости в проекте:

npm install --save-dev nightwatch chromedriver selenium-server

Затем замените этот файл JSON файлом .js, возможно, с именем nightwatch.conf.js, и обратите внимание на параметры конфигурации под ключом selenium в файле конфигурации:

nightwatch.conf.js

const seleniumServer = require("selenium-server");
const chromedriver = require("chromedriver");
const SCREENSHOT_PATH = "./screenshots/";


module.exports = {
  "src_folders": [
    "tests/e2e"
  ],
  "output_folder": "./reports",
  "selenium": {
    "start_process": true,                // tells nightwatch to start/stop the selenium process
    "server_path": seleniumServer.path,
    "host": "127.0.0.1",
    "port": 4444,                         // standard selenium port
    "cli_args": {
      "webdriver.chrome.driver" : chromedriver.path
    }
  },
  "test_settings": {
    "default": {
      "screenshots": {
        "enabled": true,                  // if you want to keep screenshots
        "path": SCREENSHOT_PATH           // save screenshots here
      },
      "globals": {
        "waitForConditionTimeout": 5000   // set a (default) timeout period, maybe 5s
      },
      "desiredCapabilities": {            // use Chrome as the default browser for tests
        "browserName": "chrome"
      }
    },
    "chrome": {
      "desiredCapabilities": {
        "browserName": "chrome",
        "javascriptEnabled": true
      }
    }
  }
}

function padLeft (count) { // theregister.co.uk/2016/03/23/npm_left_pad_chaos/
  return count < 10 ? '0' + count : count.toString();
}

var FILECOUNT = 0; // "global" screenshot file count
/**
 * The default is to save screenshots to the root of your project even though
 * there is a screenshots path in the config object above! ... so we need a
 * function that returns the correct path for storing our screenshots.
 * While we're at it, we are adding some meta-data to the filename, specifically
 * the Platform/Browser where the test was run and the test (file) name.
 */
function imgpath (browser) {
  var a = browser.options.desiredCapabilities;
  var meta = [a.platform];
  meta.push(a.browserName ? a.browserName : 'any');
  meta.push(a.version ? a.version : 'any');
  meta.push(a.name); // this is the test filename so always exists.
  var metadata = meta.join('~').toLowerCase().replace(/ /g, '');
  return SCREENSHOT_PATH + metadata + '_' + padLeft(FILECOUNT++) + '_';
}

module.exports.imgpath = imgpath;
module.exports.SCREENSHOT_PATH = SCREENSHOT_PATH;

И команда, которую я использую для запуска, такова, используя локально установленную версию Nightwatch:

nightwatch --config nightwatch.conf.js 

Надеюсь, это поможет! Удачи и удачи в тестировании вашего кода.

person RoboBear    schedule 13.11.2018