Chromedriver не закрывается после завершения теста

Я использую фреймворк nightwatch для своих тестов. Я установил selenium-server с помощью этой команды в папку моего проекта «npm install --save-dev selenium-server» и хромированный драйвер через npm install --save-dev chromedriver. Я запускаю свои тесты с помощью этой команды: ./node_modules/.bin/nightwatch -e chrome --tag [test name]. Мой файл nightwatch.json выглядит так:

{
  "src_folders": [
    "tests"
  ],
  "output_folder": "reports/XMLReports",
  "custom_commands_path": [
    "commands",
    "node_modules/nightwatch-custom-commands-assertions/js/commands",
    "./node_modules/nightwatch-commands/commands"
  ],
  "custom_assertions_path": "node_modules/nightwatch-custom-commands-assertions/js/assertions",
  "page_objects_path": [
    "pages_lms",
    "pages_app"
  ],
  "globals_path": "./globalsModule.js",
  "selenium": {
    "start_process": true,
    "server_path": "./node_modules/selenium-server/lib/runner/selenium-server-standalone-3.11.0.jar",
    "log_path": "log/",
    "host": "127.0.0.1",
    "end_session_on_fail" : true,
    "port": 4444,
    "cli_args": {
      "webdriver.chrome.driver": "./node_modules/chromedriver/lib/chromedriver/chromedriver",
      "webdriver.ie.driver": "",
      "webdriver.firefox.profile": ""
    }
  },
  "test_settings": {
    "chrome": {
      "selenium_port": 4444,
      "selenium_host": "localhost",
      "silent": true,
      "screenshots": {
        "enabled": true,
        "path": "screenshots/"
      },
      "desiredCapabilities": {
        "browserName": "chrome",
        "args": [
          "disable-web-security",
          "ignore-certificate-errors",
          "--test-type "
        ]
      }
    }
  }
}

проблема в том, что после каждого теста хромодрайвер не завершает работу, и если бы я запустил 10 тестов один за другим, я бы получил 10 хромированных драйверов.

Если бы я добавил globals.js файл и поместил путь в свой nightwatch.json:

   var chromedriver = require('chromedriver');
module.exports = {
  before : function(done) {

    chromedriver.start();

    done();
  },

  after : function(done) {
    chromedriver.stop();

    done();
  }
};  

это откроет еще одну хромированную отвертку (то есть две хромированные отвертки для одного теста), но одна хромированная отвертка будет закончена, а другая - нет.

Вот логи одного теста:

2:26:09.135 INFO [GridLauncherV3.launch] - Selenium build info: version: '3.11.0', revision: 'e59cfb3'
12:26:09.137 INFO [GridLauncherV3$1.launch] - Launching a standalone Selenium Server on port 4444
2018-04-13 12:26:09.292:INFO::main: Logging initialized @614ms to org.seleniumhq.jetty9.util.log.StdErrLog
12:26:09.629 INFO [SeleniumServer.boot] - Welcome to Selenium for Workgroups....
12:26:09.630 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444
12:26:10.353 INFO [ActiveSessionFactory.apply] - Capabilities are: Capabilities {acceptSslCerts: true, args: [disable-web-security, ignore-certificate-errors, --test-type ], browserName: chrome, javascriptEnabled: true, name: Admin Login Test}
12:26:10.355 INFO [ActiveSessionFactory.lambda$apply$11] - Matched factory org.openqa.selenium.remote.server.ServicedSession$Factory (provider: org.openqa.selenium.chrome.ChromeDriverService)
Starting ChromeDriver 2.37.544337 (8c0344a12e552148c185f7d5117db1f28d6c9e85) on port 12055
Only local connections are allowed.
12:26:11.893 INFO [ProtocolHandshake.createSession] - Detected dialect: OSS
12:26:12.491 INFO [RemoteSession$Factory.lambda$performHandshake$0] - Started new session 2325dacb5a5397552de3b69a52656fed (org.openqa.selenium.chrome.ChromeDriverService)
12:26:23.697 INFO [ActiveSessions$1.onStop] - Removing session 2325dacb5a5397552de3b69a52656fed (org.openqa.selenium.chrome.ChromeDriverService)

«nightwatch»: «^ 0.9.20», «chromedriver»: «^ 2.37.0», «selenium-server»: «^ 3.11.0» «Chrome»: 65.0 Mac OS Sierra 10.13.4

не могли бы вы рассказать мне, как бросить это? Спасибо.


person Kats    schedule 13.04.2018    source источник
comment
Это настоящая проблема, и я до сих пор не могу ее понять. Обычно я просто запускаю команду, чтобы убить их всех вручную, но это определенно не идеально. Интересно посмотреть, есть ли у кого-нибудь хорошее решение для этого. Я перепробовал все, что мог придумать, и не смог заставить это работать.   -  person tehbeardedone    schedule 13.04.2018


Ответы (1)


Вы можете вызвать метод after в каждом тесте следующим образом:

`'after' : function(browser, done) {
        browser.end(function(){
            done();
        });
    },

Начало фактического испытания:

person Lucas_Bo    schedule 24.04.2018
comment
Я вызываю эту функцию после того, как в конце каждого теста она закрывает браузер, но не закрывает chromedriver. - person Kats; 25.04.2018
comment
Попробуйте поместить его в начало теста, например: jsfiddle.net/3p539gr4/1 - person Lucas_Bo; 26.04.2018