Hi.
I've just installed the latest Nightwatch (npm node package) version 1.7.7 and the way I run my tests is no longer working.
If I run my tests on a group basis:
npx nightwatch -c config/local.conf.js -e chrome --g carInsurance
it works ok.
However, if I run them on a tag basis:
npx nightwatch -c config/local.conf.js -e chrome --t carInsuranceTest
it runs all of my tests, not just the tests with the carInsuranceTest tag.
Has the way you run tests using tags changed in the latest Nightwatch version (my tests worked Ok in my previous nightwatch version, which was 0.9.21)?
Any help would be greatly appreciated. Thanks.
Hi.
Ok, so this appeared to be an issue with my nightwatch 1.7.7 setup, as it works locally with 1.7.6.
However, something strange is happening with 1.7.6 when I run my tests through Browserstack. If I run a single test, it works Ok. However, if I run the same test but using its tag, it falls.
darrenharley@wks63613 Functional % ./node_modules/.bin/nightwatch -c config/browserstack.conf.js -e chrome /Users/darrenharley/Documents/Git/uk-content-parkers/Tests/Functional/tests/carInsurance/PAR-4540.js
Using insecure HTTP connection on port 80. Consider using SSL by setting port to 443 in your Nightwatch configuration.
ℹ Connected to hub-cloud.browserstack.com on port 80 (5875ms).
Using: chrome (85.0.4183.83) on WINDOWS platform.
✔ [Car Insurance/ PAR 4540] navigate to an example model insurance groups page (4.614s)
✔ [Car Insurance/ PAR 4540] choose another car dropdowns removed (146ms)
✔ [Car Insurance/ PAR 4540] insurance group link correctly added (915ms)
✔ [Car Insurance/ PAR 4540] closing the browser (1.644s)
See more info, video, & screenshots on Browserstack:
https://automate.browserstack.com/builds/8f4a93d294271b7c0e7b8db31370f34dd7ba1e76/sessions/ebdae3948c7f16175783f9f814b7aadc21e91c02
OK. 4 total assertions passed (13.513s)
darrenharley@wks63613 Functional % ./node_modules/.bin/nightwatch -c config/browserstack.conf.js -e chrome --tag carInsurance Using insecure HTTP connection on port 80. Consider using SSL by setting port to 443 in your Nightwatch configuration.
⠸ Connecting to hub-cloud.browserstack.com on port 80...
_________________________________________________
TEST FAILURE: 1 error during execution; 0 tests failed, 0 passed (788ms)
Error: Handshake failed: no matching key exchange algorithm
at addChunk (internal/streams/readable.js:309:12)
at readableAddChunk (internal/streams/readable.js:284:9)
at Socket.Readable.push (internal/streams/readable.js:223:10)
at TCP.onStreamRead (internal/stream_base_commons.js:188:23)
Has anyone seen this before? Thanks.
Hi @gravityvi yeah, sure. Here it is...
browserstackConf = {
src_folders: [
'tests/'
],
output_folder: false,
globals_path: 'globals.js',
page_objects_path: 'config/page_objects',
test_workers: true,
detailed_output: false,
output: true,
disable_error_log: true,
disable_colors: false,
custom_commands_path: 'config/commands/',
selenium: {
start_process: false,
host: 'hub-cloud.browserstack.com',
port: 80
},
test_settings: {
default: {
launch_url: 'https://www.parkers.co.uk/',
desiredCapabilities: {
project: 'Parkers',
build: 'latestBuild',
'browserstack.selenium_version': '3.141.59',
'browserstack.user': 'xxxxxx',
'browserstack.key': 'xxxxxx',
'browserstack.local': false,
'browserstack.debug': true,
'excludeSwitches': ['disable-popup-blocking'],
},
},
chrome: {
desiredCapabilities: {
os: 'Windows',
os_version: '10',
browserName: 'Chrome',
browser_version: '85.0',
javascriptEnabled : true,
acceptSslCerts: true,
acceptInscureCerts: true,
chromeOptions : {
'excludeSwitches': ['disable-popup-blocking'],
args: [
'--ignore-certificate-errors',
'--disable-web-security',
'--window-size=1920,1080',
'--disable-extensions',
'--start-maximized',
'--disable-dev-shm-usage',
'disable-infobars',
'disable-popup-blocking',
'disable-notifications',
'--log-level=3'],
prefs: {
'profile.managed_default_content_settings.popups' : 1,
'profile.managed_default_content_settings.notifications' : 1
},
},
},
},
safari: {
desiredCapabilities: {
os: 'OS X',
os_version: 'Catalina',
browserName: 'Safari',
browser_version: '13.1'
},
},
edge: {
desiredCapabilities: {
os: 'Windows',
os_version: '10',
browserName: 'Edge',
browser_version: '18.0'
},
},
firefox: {
desiredCapabilities: {
os: 'OS X',
os_version: 'Catalina',
browserName: 'Firefox',
browser_version: '76'
},
},
android: {
desiredCapabilities: {
device: 'Google Pixel 2',
os_version: '8.0',
realMobile: 'true'
},
},
},
};
for (const settingsLoop in browserstackConf.test_settings) {
const config = browserstackConf.test_settings[settingsLoop];
config["selenium_host"] = browserstackConf.selenium.host;
config["selenium_port"] = browserstackConf.selenium.port;
config["desiredCapabilities"] = config["desiredCapabilities"] || {}
for (const capabilitiesLoop in browserstackConf.common_capabilities) {
config["desiredCapabilities"][capabilitiesLoop] = config["desiredCapabilities"][capabilitiesLoop] || browserstackConf.common_capabilities[capabilitiesLoop]
}
}
module.exports = browserstackConf
many thanks :)
@gravityvi
module.exports = {
'contextmenu test': function (browser) {
browser
.url('https://panjiachen.github.io/vue-element-admin/#/login')
.waitForElementVisible('body', 1000)
.click('#app > div > form > button')
.pause(1000)
.click('#app > div > div.sidebar-container > div > div.scrollbar-wrapper.el-scrollbar__wrap > div > ul > div:nth-child(2) > a')
.pause(2000)
.moveToElement('#tags-view-container > div > div.el-scrollbar__wrap > div > span:nth-child(1)', 5, 5)
.mouseButtonClick('right')
.pause(6000)
}
}
is this ok?
I executed this code and didn't get the expected effect 👀
nightwatch.conf.js
module.exports = {
src_folders: ['tests'],
output_folder: 'output',
custom_assertions_path: [],
page_objects_path: '',
globals_path: '',
selenium: {
start_process: true,
server_path: require('selenium-server').path,
host: '127.0.0.1',
port: 5555,
cli_args: {
'webdriver.chrome.driver': require('chromedriver').path
}
},
test_settings: {
default: {
selenium_port: 5555,
selenium_host: 'localhost',
silent: true,
globals: {
devServerURL: 'http://localhost:' + (process.env.PORT || 1111)
}
},
chrome: {
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true
}
},
firefox: {
desiredCapabilities: {
browserName: 'firefox',
javascriptEnabled: true,
acceptSslCerts: true
}
}
}
}
I'm using chrome
"chromedriver": "^91.0.1",
"nightwatch": "^1.7.7",
"selenium-server": "^3.141.59"
VSCode
we can use F12
to find the definition of a function. However, it seems not work for nightwatch commands. Either my custom commands or core commands. Does anyone here has solution for it?// @ts-ignore
const chromedriver = require('chromedriver');
const seleniumServer = require('selenium-server');
const config = {
// we use a nightwatch.conf.js file so we can include comments and helper functions
src_folders: [
'src/tests/functionaltest', // we use '/test' as the name of our test directory by default. So 'test/e2e' for 'e2e'.
],
page_objects_path: 'src/tests/page-objects',
output_folder: './node_modules/nightwatch/reports', // reports (test outcome) output by Nightwatch
custom_commands_path: 'src/tests/commands',
selenium: {
start_process: true,
server_path: seleniumServer.path,
log_path: '',
host: '127.0.0.1',
port: 4444,
cli_args: {
'webdriver.chrome.driver': chromedriver.path,
},
},
test_workers: { enabled: true, workers: 'auto' }, // perform tests in parallel where possible
test_settings: {
default: {
webdriver: {
start_process: true,
server_path: chromedriver.path,
port: 4444,
cli_args: ['--port=4444'],
},
launch_url: 'http://localhost:3000',
selenium_port: 4444,
selenium_host: '127.0.0.1',
silent: true,
capabilities: {
configuration: {
_comment: 'Configuration for Node',
cleanUpCycle: 2000,
timeout: 30000,
port: 5555,
host: '127.0.0.1',
register: true,
hubPort: 4444,
maxSession: 5,
},
},
desiredCapabilities: {
browserName: 'chrome',
seleniumProtocol: 'WebDriver',
chromeOptions: {
w3c: false,
args: [
'--enable-features=NetworkService,NetworkServiceInProcess',
'--headless',
'--disable-gpu',
'--no-sandbox',
'--disable-dev-shm-usage',
'--window-size=1920,1080',
],
},
},
screenshots: {
enabled: true,
path: './reports/nightwatchTests/screenshots',
on_failure: true,
on_error: true,
},
use_xpath: false,
},
local: {
launch_url: 'http://localhost:3000',
selenium_port: 4444,
selenium_host: '127.0.0.1',
silent: true,
globals: {
waitForConditionTimeout: 15000, // Default timeout, 15 seconds
},
desiredCapabilities: {
browserName: 'chrome',
platform: 'ANY',
seleniumProtocol: 'WebDriver',
chromeOptions: {
w3c: false,
args: [
'--enable-features=NetworkService,NetworkServiceInProcess',
'--headless',
'--disable-gpu',
'--no-sandbox',
'--disable-dev-shm-usage',
'--window-size=1920,1080',
],
},
javascriptEnabled: true,
acceptSslCerts: true,
},
},
Hi, I'm trying to convert a bash script that invokes nightwatch to using programmatic API, and when I'm running it, the webdriver isn't starting and I can't figure out why.
config:
{
output_folder: 'nightwatch_output',
webdriver: {
start_process: true,
port: 9515,
server_path: '/usr/local/bin/chromedriver',
cli_args: [
'--port=9515',
'--log-path=nightwatch_output/chromedriver-2021-07-23T00:55:10.479Z.log'
]
},
test_settings: {
default: {
desiredCapabilities: [Object],
globals: [Object],
launch_url: 'redacted',
screenshots: [Object]
}
},
globals: {
asyncHookTimeout: 90000,
retryAssertionTimeout: 30000,
waitForConditionTimeout: 30000
},
src_folders: [ 'test' ]
}
Code:
(async () => {
const runner = Nightwatch.CliRunner();
await runner.setup(config).startWebDriver();
try {
runner.runTests();
} catch (err) {
await runner.stopWebDriver();
}
})();
output:
==========================
⠋ Connecting to localhost on port 9515...
POST /session - ECONNREFUSED
⚠ Error connecting to localhost on port 9515.
_________________________________________________
TEST FAILURE: 1 error during execution; 0 tests failed, 0 passed (123ms)
Error: An error occurred while retrieving a new session: "Connection refused to 127.0.0.1:9515". If the Webdriver/Selenium service is managed by Nightwatch, check if "start_process" is set to "true".