Node Selenium ChromeDriver Ubuntu NoSuchSessionError: This driver instance does not have a valid session ID - node.js

Hey I am trying to start a Selenium instance on
OS: Ubuntu 16.04 64bit / Linux 4.4.0-36-generic
Node: v6.5.0
NPM: 3.10.3
"chromedriver": "^2.23.1",
"selenium-webdriver": "^3.0.0-beta-2",
I keep receiving this error.
/var/www/node-bin/portlight-orders/node_modules/selenium-webdriver/lib/webdriver.js:432
throw new error.NoSuchSessionError(
^
NoSuchSessionError: This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used.
at WebDriverError (/var/www/node-bin/portlight-orders/node_modules/selenium-webdriver/lib/error.js:27:5)
at NoSuchSessionError (/var/www/node-bin/portlight-orders/node_modules/selenium-webdriver/lib/error.js:122:5)
at checkHasNotQuit (/var/www/node-bin/portlight-orders/node_modules/selenium-webdriver/lib/webdriver.js:432:15)
at Driver.schedule (/var/www/node-bin/portlight-orders/node_modules/selenium-webdriver/lib/webdriver.js:393:5)
at Driver.quit (/var/www/node-bin/portlight-orders/node_modules/selenium-webdriver/lib/webdriver.js:480:23)
at exitHandler (/var/www/node-bin/portlight-orders/api/services/Selenium.js:12:9)
at emitOne (events.js:96:13)
at process.emit (events.js:188:7)
at process._fatalException (bootstrap_node.js:296:26)
In glances I see that chromedriver is running
http://image.prntscr.com/image/dfc336afbf6f46d59017b4135e9547c3.png
var webdriver = require('selenium-webdriver'),
By = webdriver.By,
until = webdriver.until;
var driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
module.exports = driver;
function exitHandler(options, err) {
driver.quit()
}
//do something when app is closing
process.on('exit', exitHandler.bind(null,{cleanup:true}));
//catches ctrl+c event
process.on('SIGINT', exitHandler.bind(null, {exit:true}));
//catches uncaught exceptions
process.on('uncaughtException', exitHandler.bind(null, {exit:true}));

Before using any driver instance check whether that driver session is active or not here we have two cases
1. session id is present
if session id present then we can go further
2. session id doesn't exist
so we can't go further either stop

Related

Handling Selenium webdrivers on Node.js when SIGINT is recieved

I'm building a Node.js application which utilizes selenium with the chrome webdriver. I'm trying to gracefully handle exit states using the following:
import {Builder} from 'selenium-webdriver';
import {Options} from 'selenium-webdriver/chrome.js'
const chromeOptions = new Options();
chromeOptions.excludeSwitches('enable-logging');
chromeOptions.addArguments('--disable-extensions', '--headless');
chromeOptions.setChromeBinaryPath('./chrome-win/chrome.exe');
const driver = await new Builder()
.forBrowser('chrome')
.setChromeOptions(chromeOptions)
.build();
const cleanup = async (sig) => {
try {
await driver.close();
await driver.quit();
} catch (e){
console.error('EXIT HANDLER ERROR', e)
}
process.exit(isNaN(sig) ? 1 : +sig);
}
[
'beforeExit', 'uncaughtException', 'SIGINT',
'SIGUSR1', 'SIGUSR2', 'SIGTERM'
].forEach(evt => process.on(evt, cleanup.bind(evt)))
This works for the beforeExit and uncaughtException events, but upon recieving a SIGINT I get the following error
EXIT HANDLER ERROR Error: ECONNREFUSED connect ECONNREFUSED 127.0.0.1:61290
at ClientRequest.<anonymous> ([PATH_TO_PROJECT]\node_modules\selenium-webdriver\http\index.js:294:15)
at ClientRequest.emit (node:events:527:28)
at Socket.socketErrorListener (node:_http_client:454:9)
at Socket.emit (node:events:527:28)
at emitErrorNT (node:internal/streams/destroy:157:8)
at emitErrorCloseNT (node:internal/streams/destroy:122:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
and the chromium processes are left hanging. As far as I can tell, it seems like selenium is intercepting the SIGINT and doing some level of cleanup, but that just prevents me from actually calling the proper functions to kill the processes.
My immediate thought was that I could possibly try to get the PID for the browser instance(s) created by selenium and killing them manually, but my research has turned up with that not being an option, at least in Node.js
I just want to ensure that this is something that I'm doing wrong before I make an issue on the selenium git

Synology NodeJS Selenium - Server terminated early with status 127

I read a lot of similar issue but nothing indicate works ...
I'm on Synology - DSM 7.1 (Debian) and my code is
const chrome = require('selenium-webdriver/chrome');
const chromedriver = require('chromedriver');
const webdriver = require('selenium-webdriver');
//const path = require('chromedriver').path;
const {By, until, Builder} = require('selenium-webdriver');
exports.getInfoFromUrl = async(url) => {
// Lancement du webdriver pour scrapper Bet Assistant
//let service = new chrome.ServiceBuilder().build();
//chrome.setDefaultService(service);
//var driver = new webdriver.Builder(path).withCapabilities(webdriver.Capabilities.chrome()).build();
const options = new chrome.Options();
options.addArguments(
'--no-sandbox',
'headless',
'disable-gpu',
'--disable-dev-shm-usage'
);
var driver = new webdriver.Builder(chromedriver.path)
//.forBrowser('chrome')
.withCapabilities(webdriver.Capabilities.chrome())
.setChromeOptions(options)
.build();
/*chrome.setDefaultService(new chrome.ServiceBuilder(chromedriver.path).build());
var driver = new webdriver.Builder(chromedriver.path)
.setChromeOptions(new chrome.Options().addArguments(['--no-sandbox','-headless', '--disable-dev-shm-usage']))
.build();
*/
driver.get(url);
}
When I execute this code with "node script.js" I get this error :
/volume1/web/betassistant/node_modules/selenium-webdriver/remote/index.js:248
reject(Error(e.message))
^
Error: Server terminated early with status 127
at /volume1/web/betassistant/node_modules/selenium-webdriver/remote/index.js:248:24
at processTicksAndRejections (node:internal/process/task_queues:96:5)
I try several sample or code to run webdriver but nothing works. I see some of user install "default-jre" (How do I solve "Server terminated early with status 127" when running node.js on Linux?) but I don't have "apt-get" and I think JRE don't be need on DSM.
Some help will be appreciate :)

Redis -nodejs simple program -ERROR

I am getting error for even a simple nodejs redis commands.
This is the error I am getting.
/home/veera/Radha/node_modules/redis-client/lib/redis-client.js:394
var callback = originalCommand[originalCommand.length - 1];
^
TypeError: Cannot read property 'length' of undefined
at Client.onReply_ (/home/veera/Radha/node_modules/redis-client/lib/redis-client.js:394:51)
at maybeCallbackWithReply (/home/veera/Radha/node_modules/redis-client/lib/redis-client.js:143:30)
at ReplyParser.feed (/home/veera/Radha/node_modules/redis-client/lib/redis-client.js:183:29)
at Socket. (/home/veera/Radha/node_modules/redis-client/lib/redis-client.js:337:28)
at Socket.emit (events.js:95:17)
at Socket. (_stream_readable.js:765:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:427:10)
at emitReadable (_stream_readable.js:423:5)
at readableAddChunk (_stream_readable.js:166:9)
And the code is,
var client = require("./redis-node-client/lib/redis-client").createClient();
client.set('test', 'data');
My redis version is ,
redis-server --version
Redis server v=3.0.4 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=4e722bd58502cba0
https://github.com/fictorial/redis-node-client/issues/26 - same issue has been discussed long time back but the version they are discussing is 1.2.
My version is 3.0.4.
Please help me to fix this issue.
It looks like this library is no more supported. ( Description itself says abandoned project.) Unless you have strict requirement, use actively developed and production ready library like node-redis.
Example using node-redis
var client = require("node-redis").createClient();
client.set('test', 'data');
client.get('test',function(err, data){
if(err) console.log(err);
else console.log('reply from redis:' + data);
});
client.quit();

The strange Node.js error after starting script

I use Node.js.
My server js script I run such:
node chat_server.js
After I get errors messages in terminal CentOS:
Express server listening on port undefined in development mode.
+ User undefined connected node_redis: no callback to send error: ERR wrong number of arguments for 'sadd' command
/home/who/public_html/node/node_modules/redis/index.js:582
throw err;
^ Error: ERR wrong number of arguments for 'sadd' command
at ReplyParser. (/home/who/public_html/node/node_modules/redis/index.js:317:31)
at ReplyParser.emit (events.js:95:17)
at ReplyParser.send_error (/home/who/public_html/node/node_modules/redis/lib/parser/javascript.js:296:10)
at ReplyParser.execute (/home/who/public_html/node/node_modules/redis/lib/parser/javascript.js:181:22)
at RedisClient.on_data (/home/who/public_html/node/node_modules/redis/index.js:547:27)
at Socket. (/home/who/public_html/node/node_modules/redis/index.js:102:14)
at Socket.emit (events.js:95:17)
at Socket. (_stream_readable.js:748:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:410:10)
Excuse me, but I do not understand the reason of these errors.
On what I should get attention and how fix it?
For example, I use command redis SADD: redis_cli.sadd( "user.friend:" + currentIdUser, data.idUser);
I have done a experiment, created a new text script:
var redis = require("redis");
var client = redis.createClient();
client.on("error", function (err) {
console.log("Error " + err);
});
client.sadd("users","naveen",function(err,reply){
console.log('Ok');
if(err)
throw err;
return reply;
});
It have given me in console: OK. It mean, that all works fine.
I think in my code:
redis_cli.sadd("userslist", currentIdUser);
the variable currentUser is simply empty or undefined. It gives me the next errors.
Problem was at my script in line:
redis_cli.sadd("userslist", currentIdUser);
The variable is undefined. It calls error redis.
Thank you all for help.

unit testing using phantomjs, selenium-webdriver,nodejs and chai-webdriver assertion lib

What I'm trying to do is to run small unit testing on my machine. I have all required node packages and phantomjs driver installed to my PATH.
var sw = require('selenium-webdriver');
var driver = new sw.Builder()
.withCapabilities(sw.Capabilities.phantomjs())
.build()
var chai = require('chai');
var chaiWebdriver = require('chai-webdriver');
chai.use(chaiWebdriver(driver));
driver.get("https://www.npmjs.org/package/chai-webdriver");
setTimeout(function(){
chai.expect('#content').dom.to.be.visible().then(function(){
console.log("content visible");
});
driver.quit();
},3000);
Running the above code,
node fileName.js
Gives me result like this.
/Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/webdriver/promise.js:1643
throw error;
^
Error: Selector #content matches nothing
at /Users/r558268/Documents/sandbox/node_modules/chai-webdriver/node_modules/webdriver-sizzle/lib/webdriver_sizzle.js:17:13
at /Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/goog/base.js:1243:15
at webdriver.promise.ControlFlow.runInNewFrame_ (/Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/webdriver/promise.js:1539:20)
at notify (/Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/webdriver/promise.js:362:12)
at notifyAll (/Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/webdriver/promise.js:331:7)
at resolve (/Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/webdriver/promise.js:309:7)
at reject (/Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/webdriver/promise.js:439:5)
at /Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/goog/base.js:1243:15
at webdriver.promise.ControlFlow.runInNewFrame_ (/Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/webdriver/promise.js:1539:20)
at notify (/Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/webdriver/promise.js:362:12)
==== async task ====
WebDriver.call(function)
at webdriver.WebDriver.call (/Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:517:15)
at webdriver.WebDriver.findElementInternal_ (/Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:728:15)
at webdriver.WebDriver.findElement (/Users/r558268/Documents/sandbox/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:706:17)
at one (/Users/r558268/Documents/sandbox/node_modules/chai-webdriver/node_modules/webdriver-sizzle/lib/webdriver_sizzle.js:15:22)
at /Users/r558268/Documents/sandbox/node_modules/chai-webdriver/lib/index.js:58:18
at Assertion.<anonymous> (/Users/r558268/Documents/sandbox/node_modules/chai-webdriver/lib/index.js:72:16)
at Assertion.ctx.(anonymous function) [as visible] (/Users/r558268/Documents/sandbox/node_modules/chai/lib/chai/utils/addMethod.js:40:25)
at null._onTimeout (/Users/r558268/Documents/sandbox/assertionExample.js:30:43)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
Now here is the thing.. if I save as the url npmjs.org/chai-webdriver onto my machine and run the same test, then it passes without any errors.
I'm not able to figure out why.. can anyone please help me out on this.. MUCH APPRECIATED! Thank you.

Resources