如何使用 Selenium+Nightwatch+Chromedriver 在失败的测试中保持浏览器打开?

How do I keep the browser open on a failed test using Selenium+Nightwatch+Chromedriver?

我正在使用 Nightwatch、Selenium 和 Chrome 驱动程序来执行自动化 UI 测试。有时在任意数量的远程环境中都会出现测试失败。要在本地调试失败,我想在测试失败时保持浏览器打开。

我曾经能够使用 nightwatch.json 和 nightwatch.conf.js 中的配置设置来做到这一点,但我在硬盘驱动器故障中丢失了我的配置设置 cheat-sheet,尽管我已尽最大努力 google 我似乎又找不到合适的组合了。

如果我没记错的话,它不是任何一种 keepBrowserOpen: true 类型的标志。如果没有记错的话,那是某种类型的超时设置为一个愚蠢的高数字,并结合了诸如 detachDriver 之类的东西。我已经检查了特别关注 Chrome Driver Options, and the list of Chrome Driver options 的 Selenium 文档,但我没有找到任何有效的组合。

我错过了什么?

这是我的nightwatch.json

{
    "output_folder": "tests/automation/reports",
    "end_session_on_fail": false,
    "test_settings": {
        "default": {
            "selenium_port": 4444,
            "screenshots": {
                "enabled": true,
                "path": "tests/automation/reports/screenshots"
            },
            "javascriptEnabled": true,
            "acceptSslCerts": true,
            "acceptInsecureCerts": true,
            "globals": {
                "waitForConditionTimeout": 10000
            }
        },
        "chrome": {
            "extends": "default",
            "desiredCapabilities": {
                "browserName": "chrome",
                "javascriptEnabled": true,
                "acceptSslCerts": true,
                "acceptInsecureCerts": true,
                "chromeOptions": {
                    "args": [
                        "--no-sandbox",
                        "--disable-gpu"
                    ]
                }
            }
        }
    }
}

还有我的nightwatch.conf.js

const geckoDriver = require('geckodriver');
const chromeDriver = require('chromedriver');
const seleniumServer = require('selenium-server');

module.exports = (function (settings) {
    settings.selenium = {
        start_process: true,
        server_path: seleniumServer.path,
        log_path: 'tests/automation/reports/',
        host: 'localhost',
        port: 4444,
        cli_args: {
            'webdriver.chrome.driver': chromeDriver.path,
            'webdriver.gecko.driver': geckoDriver.path,
            'webdriver.edge.driver': 'C:\windows\system32\MicrosoftWebDriver.exe',
            'webdriver.port': '4444'
        }
    };

    return settings;
})(require('./nightwatch.json'));

Selenium 版本为 2.35.1

这不是一个优雅的解决方案,但接近您正在寻找的解决方案。基本上,我们可以检查 afterEach()browser.currentTest.results.errors 的值,如果该值大于 0,那么我们可以在那里暂停测试,保持浏览器会话处于活动状态。

afterEach: function(browser) {
    if(browser.currentTest.results.errors > 0) {
        browser.pause()
    }