How to use Safari Technology Preview in nightwatch? - javascript

I didn't find any information on how to properly setup the nightwatch config using Safari technology preview.
I've tried something like this:
module.exports = {
"src_folders": [
"suites"
],
"output_folder": "reports",
"custom_commands_path": "commands",
"page_objects_path": "pageObjects",
"globals_path": "globals.js",
"selenium": {
"start_process": true,
"server_path": seleniumServer.path,
"host": "127.0.0.1",
"port": 4444,
"log_path": "logs",
"cli_args": {
"webdriver.chrome.driver": chromedriver.path,
"webdriver.firefox.driver": '/usr/bin/geckodriver',
"webdriver.safari.driver": '/usr/bin/safaridriver'
}
},
"test_settings": {
"default": {
"launch_url": "http://google.com",
"screenshots": {
"enabled": true,
"on_failure" : true,
"on_error" : true
},
"globals": {
"waitForConditionTimeout": 5000,
"retryAssertionTimeout": 5000
},
"desiredCapabilities": {
"browserName": "safari",
"browserVersion": "12",
"technologyPreview": true
},
"skip_testcases_on_fail": false,
"end_session_on_fail": false
}
}
};
But after execution I get this error:
{ value:
{ message: 'Could not create a session: A browser with name \'safari\' version \'12\' could not be found on the system.\nBuild info: version: \'3.13.0\', revision: \'2f0d292\', time: \'2018-06-25T15:32:19.891Z\'\nSystem info: host: \'Boostas-MacBook-Pro-5.local\', ip: \'fe80:0:0:0:100a:70f9:d6d7:cbfc%en0\', os.name: \'Mac OS X\', os.arch: \'x86_64\', os.version: \'10.13.6\', java.version: \'10.0.1\'\nDriver info: driver.version: unknown\nremote stacktrace: ',
error: 'session not created' },
status: 33 }
Note: If I set technologyPreview to false the test will be run in Safari browser.
Hope you guys can help me!

Those two options worked in my case in nightwatch.json to launch Safari Technology Preview :
"desiredCapabilities": {
"browserName": "safari",
"safari.options": {"technologyPreview": true},
}
Useful reference : https://macops.ca/using-safari-technology-preview-with-selenium-webdriver/
Hope this helps !

Related

Wrong wdio.webapp.conf.js config or chrome driver issue - automated test do not start

For some reason I cannot start my tests written using WebdriverIO together with Mocha + Chai testing frameworks. When I run yarn start command to start them I get such an output with every test:
Execution of 31 spec files started at 2021-07-22T13:36:42.326Z
[0-0] RUNNING in chrome - C:\Users\ADOMAS-PC\Desktop\Automation Projects\driveweb\test\e2e\specs\e2e\cancelDownload.spec.js
[0-0] Error: Failed to create session.
Unable to create session from {
"desiredCapabilities": {
"browserName": "chrome",
"goog:chromeOptions": {
"binary": "C:\u002f\u002fProgram Files\u002f\u002fGoogle\u002f\u002fChrome\u002f\u002fApplication\u002f\u002fchrome.exe",
"prefs": {
"directory_upgrade": true,
"prompt_for_download": false,
"download.default_directory": "C:\\Users\\ADOMAS-PC\\Desktop\\Automation Projects\\driveweb\\test\\data\\downloads",
"download.prompt_for_download": false,
"profile.default_content_setting_values.automatic_downloads": 1
},
"args": [
"--headless",
"--no-sandbox",
"--incognito",
"--disable-gpu",
"--window-size=1600,1000"
]
}
},
"capabilities": {
"firstMatch": [
{
"browserName": "chrome",
"goog:chromeOptions": {
"binary": "C:\u002f\u002fProgram Files\u002f\u002fGoogle\u002f\u002fChrome\u002f\u002fApplication\u002f\u002fchrome.exe",
"prefs": {
"directory_upgrade": true,
"prompt_for_download": false,
"download.default_directory": "C:\\Users\\ADOMAS-PC\\Desktop\\Automation Projects\\driveweb\\test\\data\\downloads",
"download.prompt_for_download": false,
"profile.default_content_setting_values.automatic_downloads": 1
},
"args": [
"--headless",
"--no-sandbox",
"--incognito",
"--disable-gpu",
"--window-size=1600,1000"
]
}
}
]
}
}
Build info: version: '3.141.5', revision: 'd54ebd709a', time: '2018-11-06T11:58:47'
System info: host: 'DESKTOP-AK6OAUH', ip: '10.18.0.3', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '16.0.1'
Driver info: driver.version: unknown
This is how wdio.webapp.conf.js looks like:
const { createDir, removeDirContents } = require('./test/e2e/helpers/folderHelper');
const { populateData } = require('./test/e2e/helpers/apiHelper');
const { TimelineService } = require('wdio-timeline-reporter/timeline-service');
var mkdirp = require('mkdirp');
const path = require('path');
global.downloadDir = path.join(process.cwd(), 'test/data/downloads');
global.uploadDir = path.join(process.cwd(), 'test/data/uploads');
global.uploadPermDir = path.join(process.cwd(), 'test/data/uploadsPerm');
global.baseUrl = 'https://drive.automation.com/';
exports.config = {
hostname: 'automation-selenium',
port: 4444,
path: '/wd/hub',
specs: [
'./test/e2e/specs/e2e/**/*.spec.js',
'./test/e2e/specs/pages/*.spec.js'
],
maxInstances: 1,
capabilities: [
{
maxInstances: 1,
browserName: 'chrome',
'goog:chromeOptions': {
binary: "C://Program Files//Google//Chrome//Application//chrome.exe",
prefs: {
directory_upgrade: true,
prompt_for_download: false,
'download.default_directory': global.downloadDir,
'download.prompt_for_download': false,
'profile.default_content_setting_values.automatic_downloads': 1
},
args: [
'--headless',
'--no-sandbox',
'--incognito',
'--disable-gpu',
'--window-size=1600,1000']
}
}
],
logLevel: 'debug',
outputDir: './reports/output',
bail: 0,
baseUrl: global.baseUrl,
waitforTimeout: 50000,
connectionRetryTimeout: 60000,
connectionRetryCount: 3,
framework: 'mocha',
mochaOpts: {
ui: 'bdd',
compilers: ['js:#babel/register'],
timeout: 60000,
retries: 1
},
reporters: [
'spec',
[
'allure',
{
outputDir: './reports/allure-results/',
disableWebdriverStepsReporting: true,
disableWebdriverScreenshotsReporting: false
}
]
],
onPrepare: async function(config, capabilities) {
global.baseUrl = config.baseUrl;
createDir(global.downloadDir);
createDir(global.uploadDir);
if (!global.baseUrl.includes('automation.com')) {
await populateData(config.baseUrl);
}
},
afterTest: async function (test, context, { error, result, duration, passed, retries }) {
if (!passed) {
const current_datetime = new Date();
const time = current_datetime.getHours() + "h-" + current_datetime.getMinutes() + "m-" + current_datetime.getSeconds() + "s";
const screenshotDir = path.join(process.cwd(), `screenshots`);
await mkdirp(screenshotDir);
const filename = test.title.replace(/\s+/g, '-');
const screenshotImg = `${screenshotDir}/${time}-${filename}.png`;
browser.saveScreenshot(screenshotImg);
}
},
onComplete: function() {
removeDirContents(global.downloadDir);
removeDirContents(global.uploadDir);
}
};
What I already tried?
Reinstalling chrome browser on my PC.
Installing/reinstalling various libraries like wdio, selenium-standalone and etc.
Run tests from CMD using administrator mode.
Setting binary value to C://Program Files//Google//Chrome//Application//chromedriver.exe
Downgrading node to 12.8.1 version
What else can I try to make them work?
yarn add #wdio/selenium-standalone-service
was a solution to this problem.

Selenium + Protractactor: Downloading file in chrome & firefox

I've been trying to update my conf.js file to download files, it should work for firefox and chrome (independent of one another).
I've been following the guides and answers online, (including but not limited to stackoverflow) yet it doesn't fully work for me. Chrome is no problem, firefox is my trouble maker.
On firefox it simply does not download the file, unlike chrome where it downloads the file.
Update: I cannot disable popup from firefox
The relevant info from conf.js
exports.config = {
[...]
multiCapabilities: [
{
browserName: 'chrome',
'goog:chromeOptions': {
w3c: false, // problems with latest chrome driver... browser.actions is causing issues: https://github.com/jan-molak/serenity-js/issues/329
prefs: {
download: {
prompt_for_download: false,
directory_upgrade: true,
default_directory: downloadsPath,
},
},
},
} ,
{
browserName: 'firefox',
'goog:chromeOptions': {
marionette: true,
'moz:firefoxOptions': {
prefs: {
'pdfjs.disabled': true,
'browser.download.folderList': 2,
'browser.download.dir': downloadsPath,
'browser.download.panel.shown': false,
'browser.download.useDownloadDir': true,
'browser.download.manager.useWindow': false,
'browser.helperApps.alwaysAsk.force': false,
'browser.helperApps.neverAsk.openFile': true,
'browser.download.manager.closeWhenDone': false,
'browser.download.manager.alertOnEXEOpen': false,
'browser.download.manager.showWhenStarting': false,
'browser.download.manager.focusWhenStarting': false,
'browser.download.manager.showAlertOnComplete': false,
'browser.helperApps.neverAsk.saveToDisk': 'application/vnd.openxmlformats',
},
},
},
},
],
[...]
};
The relevant code from my dowload-e2e.js spec:
const downloadBtn = manipulations.getDomObject('download-contract-button', 'id');
browser.executeScript('arguments[0].click();', downloadBtn.getWebElement());
try {
await downloads.verifyFileExists(`file-name.docx`);
await downloads.verifyFileSize(`file-name.docx`, 0);
} catch (err) {
throw new Error(`ERROR: ${err.message}`);
}
downloads.removeFile(`file-name.docx`);
Firefox/Chrome try like this:
const multiCapabilities = [
{
browserName: 'chrome',
'goog:chromeOptions': {
w3c: false, // due problems with latest chrome driver
// browser.actions is causing issues: https://github.com/jan-molak/serenity-js/issues/329
prefs: {
download: {
'prompt_for_download': false,
'directory_upgrade': true,
'default_directory': downloadsPath
}
}
}
},
{
browserName: 'firefox',
'goog:chromeOptions': {
marionette: true,
'moz:firefoxOptions': {
prefs: {
'browser.download.folderList': 2,
'browser.download.dir': downloadsPath,
'browser.download.manager.showWhenStarting': false,
'browser.helperApps.alwaysAsk.force': false,
'browser.download.manager.useWindow': false,
'browser.helperApps.neverAsk.saveToDisk': 'application/octet-stream, application/json, ' +
'text/comma-separated-values, text/csv, application/csv, ' +
'application/excel, application/vnd.ms-excel, ' +
'application/vnd.msexcel, text/anytext, text/plaintext, ' +
'image/png, image/pjpeg, image/jpeg, application/zip'
}
}
}
}
];

Getting error 'cannot call non w3c standard command while in w3c mode'

I've been trying to browser.actions().mouseMove(element(by.xpath('some_xpath'))).perform with protractor to move mouse to the element on page. And geted error when run test on CI\CD. Locally it works fine.
Chrome version 80
chromedriver version 80
here my protractor.config file where i turn w3c to false
multiCapabilities: [{
browserName: 'chrome',
platform: 'ANY',
version: 'ANY',
//Disable or Enable multiCapabilities
shardTestFiles: true,
maxInstances: 8,
// maxSession: 10,
splitTestsBetweenCapabilities: true,
chromeOptions: {
w3c: false,
args: [
'incognito',
'disable-extensions',
'disable-infobars',
// "--headless",
// "--no-sandbox",
"--disable-gpu",
"--window-size=1920,1080",
'show-fps-counter=true',
// '--use-fake-device-for-media-stream',
// '--use-fake-ui-for-media-stream'
"--auto-select-desktop-capture-source=Entire screen",
"--aggressive-cache-discard",
"--disable-cache",
"--disk-cache-size=0"
],
prefs: {
download: {
prompt_for_download: false,
directory_upgrade: true,
default_directory: downloadsPath
}
}
}
}],

Nightwatch : An occurred error while retrieving a new session

In my react project, I would like to use nightwatch as testing tool. I'm actually using Nightwatch v1.0.4 and selenium-server-standalone-3.9.1.jar on windows.
And this is my config (nightwatch.json) :
{
"src_folders": [
"tests"
],
"output_folder": "reports",
"custom_commands_path": "",
"custom_assertions_path": "",
"page_objects_path": "",
"globals_path": "",
"disable_colors": false,
"test_workers": false,
"selenium": {
"start_process": true,
"host": "localhost",
"port": 4444,
"server_path": "./bin/selenium-server-standalone-3.9.1.jar",
"log_path": "./logs",
"cli_args": {
"webdriver.chrome.driver": "./bin/chromedriver"
}
},
"desiredCapabilities": {
"browserName": "chrome",
"acceptSslCerts": true
},
"test_settings": {
"default": {
"webdriver": {
"server_path": "./bin/chromedriver",
"cli_args": [
"--log",
"debug"
]
},
"disable_colors": false,
"screenshots": {
"enabled": false,
"path": ""
},
"request_timeout_options": {
"timeout": 60000,
"retry_attempts": 5
},
"default_path_prefix" : "",
"desiredCapabilities": {
"browserName": "chrome",
"acceptInsecureCerts": true
}
},
"chrome": {
"webdriver": {
"port": 9515,
"default_path_prefix": "",
"server_path": "./bin/chromedriver",
"cli_args": [
"--verbose"
]
},
"desiredCapabilities": {
"browserName": "chrome",
"loggingPrefs": {
"driver": "INFO",
"server": "OFF",
"browser": "INFO"
}
}
}
}
}
And my test file (tests/index.js):
const host = 'http://localhost:3000'
module.exports = {
'Demo test' : function (browser) {
browser
.url('http://google.com')
.waitForElementVisible('body', 1000)
.pause(5000)
.end();
}
}
When I run nightwatch, it gives me the following error:
Can anyone tell me what I'm doing wrong please ?
Your ChromeDriver version -which you've mentioned as v2.9 is pretty old.
As of the ChromeDriver download page, as per your Chrome version, you should use ChromeDriver version above 2.36 - I would recommend the latest 2.38

nightwatch: distribute test with specific firefox profile

Here is my problem: I want be abble to set firefox in specific language to run our e2e tests, and be abble to distribute them.
all verions:
Mozilla Firefox 53.0.3
Selenium 3.4.0 (from npm)
geckodriver 0.17.0 (from npm)
nightwatch.conf.js:
const seleniumServer = require('selenium-server');
module.exports = {
"src_folders": [
"test/functional/features"
],
"custom_commands_path": [
"test/functional/commands/commun",
"test/functional/commands/project"
],
"output_folder": false,
"selenium": {
"start_process": true,
"server_path": seleniumServer.path,
"port": 4444,
"cli_args": {
"webdriver.gecko.driver": "./node_modules/.bin/geckodriver"
}
},
"test_settings": {
"default": {
"selenium_port": 4444,
"selenium_host": "localhost",
"silent": true,
"screenshots": {
"enabled": false
},
"detailed_output": false,
"desiredCapabilities": {
"javascriptEnabled": true,
"acceptSslCerts": true,
"marionette": true,
"browserName": "firefox"
}
}
}
};
In general I tryed two way:
dynamically create a firefox profile, and use it.
In theorie, I can use a before(Each) and use firefox-profile. In practice it create my profile but doesn't use it.
const FirefoxProfile = require('firefox-profile');
function setProfile(browser, profile, callback) {
profile.encoded(function (encodedProfile) {
browser.options.desiredCapabilities['firefox_profile'] = encodedProfile;
callback();
});
}
function setPrefToFrench(browser, done) {
var FFprofile = new FirefoxProfile();
FFprofile.setPreference('general.useragent.locale', 'fr');
FFprofile.setPreference('intl.accept_languages', 'fr');
setProfile(browser, FFprofile, done);
}
module.exports = {
'default' : {
isLocal : true
},
beforeEach: function(browser, done) {
setPrefToFrench(browser, done);
done();
}
};
Save a profile (why not ziped) and include it in project
The same, in theorie, i just have to add it on the nightwatch.conf.js
"selenium": {
"start_process": true,
"server_path": seleniumServer.path,
"port": 4444,
"cli_args": {
"webdriver.gecko.driver": "./node_modules/.bin/geckodriver",
"webdriver.firefox.profile": "path/to/my/profile(or base64 zip)"
}
},
But all time the same, my firefox is still in english.
Does anyone whould have a solution, or maybe I made something wrong?

Categories

Resources