如何使用 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()
}
我正在使用 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()
}