如何使用Selenium+在测试失败时保持浏览器打开;夜表+;镀铬器?

如何使用Selenium+在测试失败时保持浏览器打开;夜表+;镀铬器?,selenium,selenium-webdriver,selenium-chromedriver,nightwatch.js,Selenium,Selenium Webdriver,Selenium Chromedriver,Nightwatch.js,我正在使用Nightwatch、Selenium和Chrome驱动程序进行自动化UI测试。有时,在任意数量的远程环境中都会出现测试失败。要在本地调试失败,我希望在测试失败时保持浏览器打开 我以前可以使用nightwatch.json和nightwatch.conf.js中的配置设置来实现这一点,但是我在一次硬盘故障中丢失了配置设置备忘单,尽管我在谷歌上尽了最大的努力,我似乎再也找不到正确的组合 如果我没记错的话,它不是任何类型的keepbrowservepen:truetype标志。如果内存可用

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

我以前可以使用nightwatch.json和nightwatch.conf.js中的配置设置来实现这一点,但是我在一次硬盘故障中丢失了配置设置备忘单,尽管我在谷歌上尽了最大的努力,我似乎再也找不到正确的组合

如果我没记错的话,它不是任何类型的
keepbrowservepen:true
type标志。如果内存可用,则是将某种类型的超时设置为一个愚蠢的高数字,再加上detachDriver之类的东西。我已经检查了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()
    }

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

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

这不是一个优雅的问题。打开浏览器会话进行本地调试对用户非常有帮助,但在自动化套件下运行时,这是不需要的。我在一个类似的
if
块中截图。然后调用
browser.end()
关闭浏览器。如果我将其注释掉,我可以在浏览器中查看测试状态。谢谢这不是一个优雅的问题。打开浏览器会话进行本地调试对用户非常有帮助,但在自动化套件下运行时,这是不需要的。我在一个类似的
if
块中截图。然后调用
browser.end()
关闭浏览器。如果我将其注释掉,我可以在浏览器中查看测试状态。谢谢