node.js - Selenium Webdriver requires restarts to function consistently -


my testing stack consists of latest version of selenium server (2.33.0, aka selenium-server-standalone-2.33.0.jar), mocha, node.js, , phantomjs.

my question regards following code:

var webdriver = require('../../../lib/selenium/node_modules/selenium-webdriver/'),         driver = new webdriver.builder().             withcapabilities({'browsername': 'phantomjs'}).             build();  driver.manage().timeouts().implicitlywait(15000);  describe('wordpress', function() {     it('should able log in', function(done) {         driver.get('http://#### redacted ####/wp-login.php');         driver.findelement(webdriver.by.css('#user_login')).sendkeys('#### redacted ####');         driver.findelement(webdriver.by.css('#user_pass')).sendkeys('#### redacted ####');         driver.findelement(webdriver.by.css('#wp-submit')).click();          // #wpwrap element on wordpress dashboard displayed once         // user logged in.  testing presence, can determine         // if login attempt succeeded.         driver.findelement(webdriver.by.css('#wpwrap')).then(function(v) {             done();         });     }); }); 

on local system, os x, test runs fine consistently. however, once test uploaded our centos server (where hope continuous integration testing), test behaves extremely strangely.

after selenium server started, test runs once. point on, test succeeds every 1 out of ten times or so. restarting selenium server guarantees test run successfully. in fact, if selenium server restarted every time test run, test succeed every time.

how can test succeed without restarting selenium server every time?

thank help! :)


update: in addition error log below, i'm getting following error: exception in thread "thread-21" java.lang.outofmemoryerror: unable create new native thread


details on error messages follow below:

a successful test yields following output mocha:

[s5rich@host ~]$ mocha test/selenium/acceptance/simple.js     wordpress     ✓ should able log in (2604ms)     1 passing (3 seconds) 

a successful test yields following output selenium server:

23:21:50.517 info - executing: [new session: {browsername=phantomjs}] @ url: /session) 23:21:50.527 info - creating new session capabilities [{browsername=phantomjs}] 23:21:50.547 info - executable: /usr/local/bin/phantomjs 23:21:50.547 info - port: 26515 23:21:50.547 info - arguments: [--webdriver=26515, --webdriver-logfile=/home/s5rich/phantomjsdriver.log] 23:21:50.547 info - environment: {} phantomjs launching ghostdriver... [info  - 2013-07-24t05:21:50.923z] ghostdriver - main - running on port 26515 [info  - 2013-07-24t05:21:51.435z] session [f235d040-f420-11e2-8d90-f50327bc3449] - constructor - desired capabilities: {"browsername":"phantomjs"} [info  - 2013-07-24t05:21:51.435z] session [f235d040-f420-11e2-8d90-f50327bc3449] - constructor - negotiated capabilities: {"browsername":"phantomjs","version":"1.9.1","drivername":"ghostdriver","driverversion":"1.0.3","platform":"linux-unknown-32bit","javascriptenabled":true,"takesscreenshot":true,"handlesalerts":false,"databaseenabled":false,"locationcontextenabled":false,"applicationcacheenabled":false,"browserconnectionenabled":false,"cssselectorsenabled":true,"webstorageenabled":false,"rotatable":false,"acceptsslcerts":false,"nativeevents":true,"proxy":{"proxytype":"direct"}} [info  - 2013-07-24t05:21:51.435z] sessionmanagerreqhand - _postnewsessioncommand - new session created: f235d040-f420-11e2-8d90-f50327bc3449 23:21:51.495 info - done: /session 23:21:51.504 info - executing: org.openqa.selenium.remote.server.handler.getsessioncapabilities@46b78d @ url: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2) 23:21:51.505 info - done: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2 23:21:51.520 info - executing: [get: http://#### redacted ####/wp-login.php] @ url: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/url) 23:21:51.821 info - done: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/url 23:21:51.827 info - executing: [find element: by.selector: #user_login] @ url: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element) 23:21:51.874 info - done: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element 23:21:51.883 info - executing: [send keys: 0 org.openqa.selenium.support.events.eventfiringwebdriver$eventfiringwebelement@20788bf8, [#### redacted ####]] @ url: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element/0/value) 23:21:51.939 info - done: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element/0/value 23:21:51.948 info - executing: [find element: by.selector: #user_pass] @ url: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element) 23:21:51.965 info - done: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element 23:21:52.001 info - executing: [send keys: 1 org.openqa.selenium.support.events.eventfiringwebdriver$eventfiringwebelement@20788bf9, [#### redacted ####]] @ url: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element/1/value) 23:21:52.065 info - done: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element/1/value 23:21:52.074 info - executing: [find element: by.selector: #wp-submit] @ url: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element) 23:21:52.099 info - done: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element 23:21:52.106 info - executing: [click: 2 org.openqa.selenium.support.events.eventfiringwebdriver$eventfiringwebelement@20788bfa] @ url: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element/2/click) 23:21:52.842 info - done: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element/2/click 23:21:52.850 info - executing: [find element: by.selector: #wpwrap] @ url: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element) 23:21:52.871 info - done: /session/8750a6b4-ec7d-4313-a86d-04ac344b74f2/element 

a failed test yields following output mocha:

[s5rich@host ~]$ mocha test/selenium/acceptance/simple.js     wordpress     1) should able log in     0 passing (2 seconds)   1 failing    1) wordpress should able log in:      uncaught unknownerror: error message => 'unable find element css selector '#wpwrap''  caused request => {"headers":{"accept":"application/json, image/png","connection":"keep-alive","content-length":"42","content-type":"application/json; charset=utf-8","host":"localhost:2897"},"httpversion":"1.1","method":"post","post":"{\"using\":\"css selector\",\"value\":\"#wpwrap\"}","url":"/element","urlparsed":{"anchor":"","query":"","file":"element","directory":"/","path":"/element","relative":"/element","port":"","host":"","password":"","user":"","userinfo":"","authority":"","protocol":"","source":"/element","querykey":{},"chunks":["element"]},"urloriginal":"/session/77a0a110-f421-11e2-a6fd-61cd002d7d02/element"} build info: version: '2.33.0', revision: '4e90c97', time: '2013-05-22 15:32:38' system info: os.name: 'linux', os.arch: 'i386', os.version: '2.6.32-042stab076.8', java.version: '1.7.0' driver info: driver.version: unknown       @ new bot.error (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/atoms/error.js:108:18)       @ object.bot.response.checkresponse (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/atoms/response.js:106:9)       @ /home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/webdriver.js:262:20       @ /home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/goog/base.js:1112:15       @ webdriver.promise.controlflow.runinnewframe_ (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:1431:20)       @ notify (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:315:12)       @ notifyall (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:284:7)       @ fulfill (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:389:7)       @ /home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:1298:10       @ /home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/goog/base.js:1112:15       @ webdriver.promise.controlflow.runinnewframe_ (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:1431:20)       @ notify (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:315:12)       @ notifyall (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:284:7)       @ fulfill (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:389:7)       @ /home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/goog/base.js:1112:15       @ webdriver.promise.controlflow.runinnewframe_ (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:1431:20)       @ notify (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:315:12)       @ notifyall (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:284:7)       @ fulfill (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:389:7)       @ /home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/promise.js:600:51       @ /home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/http/http.js:96:5       @ incomingmessage.<anonymous> (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/http/index.js:113:7)       @ incomingmessage.eventemitter.emit (events.js:117:20)       @ _stream_readable.js:910:16       @ process._tickcallback (node.js:415:13)   ==== async task ====   webdriver.findelement(by.cssselector("#wpwrap"))       @ webdriver.webdriver.schedule (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/webdriver.js:246:15)       @ webdriver.webdriver.findelement (/home/s5rich/lib/selenium/node_modules_osx/selenium-webdriver/lib/webdriver/webdriver.js:685:17)       @ context.<anonymous> (/home/s5rich/test/selenium/acceptance/simple.js:12:10)       @ test.runnable.run (/usr/local/lib/node_modules/mocha/lib/runnable.js:194:15)       @ runner.runtest (/usr/local/lib/node_modules/mocha/lib/runner.js:355:10)       @ /usr/local/lib/node_modules/mocha/lib/runner.js:401:12       @ next (/usr/local/lib/node_modules/mocha/lib/runner.js:281:14)       @ /usr/local/lib/node_modules/mocha/lib/runner.js:290:7       @ next (/usr/local/lib/node_modules/mocha/lib/runner.js:234:23)       @ object._onimmediate (/usr/local/lib/node_modules/mocha/lib/runner.js:258:5)       @ processimmediate [as _immediatecallback] (timers.js:330:15) 

a failed test yields following output selenium server:

23:25:34.742 info - executing: [new session: {browsername=phantomjs}] @ url: /session) 23:25:34.743 info - creating new session capabilities [{browsername=phantomjs}] 23:25:34.744 info - executable: /usr/local/bin/phantomjs 23:25:34.744 info - port: 2897 23:25:34.744 info - arguments: [--webdriver=2897, --webdriver-logfile=/home/s5rich/phantomjsdriver.log] 23:25:34.744 info - environment: {} phantomjs launching ghostdriver... [info  - 2013-07-24t05:25:34.879z] ghostdriver - main - running on port 2897 [info  - 2013-07-24t05:25:35.270z] session [77a0a110-f421-11e2-a6fd-61cd002d7d02] - constructor - desired capabilities: {"browsername":"phantomjs"} [info  - 2013-07-24t05:25:35.270z] session [77a0a110-f421-11e2-a6fd-61cd002d7d02] - constructor - negotiated capabilities: {"browsername":"phantomjs","version":"1.9.1","drivername":"ghostdriver","driverversion":"1.0.3","platform":"linux-unknown-32bit","javascriptenabled":true,"takesscreenshot":true,"handlesalerts":false,"databaseenabled":false,"locationcontextenabled":false,"applicationcacheenabled":false,"browserconnectionenabled":false,"cssselectorsenabled":true,"webstorageenabled":false,"rotatable":false,"acceptsslcerts":false,"nativeevents":true,"proxy":{"proxytype":"direct"}} [info  - 2013-07-24t05:25:35.270z] sessionmanagerreqhand - _postnewsessioncommand - new session created: 77a0a110-f421-11e2-a6fd-61cd002d7d02 23:25:35.275 info - done: /session 23:25:35.283 info - executing: org.openqa.selenium.remote.server.handler.getsessioncapabilities@13b4ce4 @ url: /session/b62d0c67-2000-439c-a0bd-f2c100350dee) 23:25:35.284 info - done: /session/b62d0c67-2000-439c-a0bd-f2c100350dee 23:25:35.297 info - executing: [get: http://#### redacted ####/wp-login.php] @ url: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/url) 23:25:35.592 info - done: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/url 23:25:35.597 info - executing: [find element: by.selector: #user_login] @ url: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element) 23:25:35.619 info - done: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element 23:25:35.631 info - executing: [send keys: 0 org.openqa.selenium.support.events.eventfiringwebdriver$eventfiringwebelement@240035bc, [#### redacted ####]] @ url: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element/0/value) 23:25:35.683 info - done: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element/0/value 23:25:35.695 info - executing: [find element: by.selector: #user_pass] @ url: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element) 23:25:35.712 info - done: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element 23:25:35.723 info - executing: [send keys: 1 org.openqa.selenium.support.events.eventfiringwebdriver$eventfiringwebelement@240035bd, [#### redacted ####]] @ url: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element/1/value) 23:25:35.783 info - done: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element/1/value 23:25:35.800 info - executing: [find element: by.selector: #wp-submit] @ url: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element) 23:25:35.822 info - done: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element 23:25:35.832 info - executing: [click: 2 org.openqa.selenium.support.events.eventfiringwebdriver$eventfiringwebelement@240035be] @ url: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element/2/click) 23:25:36.105 info - done: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element/2/click 23:25:36.121 info - executing: [find element: by.selector: #wpwrap] @ url: /session/b62d0c67-2000-439c-a0bd-f2c100350dee/element) e = java.awt.headlessexception:  no x11 display variable set, program performed operation requires it. 23:25:36.285 warn - exception thrown org.openqa.selenium.nosuchelementexception: error message => 'unable find element css selector '#wpwrap''  caused request => {"headers":{"accept":"application/json, image/png","connection":"keep-alive","content-length":"42","content-type":"application/json; charset=utf-8","host":"localhost:2897"},"httpversion":"1.1","method":"post","post":"{\"using\":\"css selector\",\"value\":\"#wpwrap\"}","url":"/element","urlparsed":{"anchor":"","query":"","file":"element","directory":"/","path":"/element","relative":"/element","port":"","host":"","password":"","user":"","userinfo":"","authority":"","protocol":"","source":"/element","querykey":{},"chunks":["element"]},"urloriginal":"/session/77a0a110-f421-11e2-a6fd-61cd002d7d02/element"} command duration or timeout: 149 milliseconds documentation on error, please visit: http://seleniumhq.org/exceptions/no_such_element.html build info: version: '2.33.0', revision: '4e90c97', time: '2013-05-22 15:32:38' system info: os.name: 'linux', os.arch: 'i386', os.version: '2.6.32-042stab076.8', java.version: '1.7.0' session id: 77a0a110-f421-11e2-a6fd-61cd002d7d02 driver info: org.openqa.selenium.phantomjs.phantomjsdriver capabilities [{platform=linux, acceptsslcerts=false, javascriptenabled=true, browsername=phantomjs, rotatable=false, driverversion=1.0.3, locationcontextenabled=false, version=1.9.1, databaseenabled=false, cssselectorsenabled=true, handlesalerts=false, browserconnectionenabled=false, proxy={proxytype=direct}, webstorageenabled=false, nativeevents=true, drivername=ghostdriver, applicationcacheenabled=false, takesscreenshot=true}]     @ sun.reflect.nativeconstructoraccessorimpl.newinstance0(native method)     @ sun.reflect.nativeconstructoraccessorimpl.newinstance(unknown source)     @ sun.reflect.delegatingconstructoraccessorimpl.newinstance(unknown source)     @ java.lang.reflect.constructor.newinstance(unknown source)     @ org.openqa.selenium.remote.errorhandler.createthrowable(errorhandler.java:191)     @ org.openqa.selenium.remote.errorhandler.throwifresponsefailed(errorhandler.java:145)     @ org.openqa.selenium.remote.remotewebdriver.execute(remotewebdriver.java:554)     @ org.openqa.selenium.remote.remotewebdriver.findelement(remotewebdriver.java:307)     @ org.openqa.selenium.remote.remotewebdriver.findelementbycssselector(remotewebdriver.java:396)     @ org.openqa.selenium.by$bycssselector.findelement(by.java:407)     @ org.openqa.selenium.remote.remotewebdriver.findelement(remotewebdriver.java:299)     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(unknown source)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(unknown source)     @ java.lang.reflect.method.invoke(unknown source)     @ org.openqa.selenium.support.events.eventfiringwebdriver$2.invoke(eventfiringwebdriver.java:101)     @ $proxy1.findelement(unknown source)     @ org.openqa.selenium.support.events.eventfiringwebdriver.findelement(eventfiringwebdriver.java:180)     @ org.openqa.selenium.remote.server.handler.findelement.call(findelement.java:47)     @ org.openqa.selenium.remote.server.handler.findelement.call(findelement.java:1)     @ java.util.concurrent.futuretask$sync.innerrun(unknown source)     @ java.util.concurrent.futuretask.run(unknown source)     @ org.openqa.selenium.remote.server.defaultsession$1.run(defaultsession.java:169)     @ java.util.concurrent.threadpoolexecutor.runworker(unknown source)     @ java.util.concurrent.threadpoolexecutor$worker.run(unknown source)     @ java.lang.thread.run(unknown source) caused by: org.openqa.selenium.remote.screenshotexception: screen shot has been taken build info: version: '2.33.0', revision: '4e90c97', time: '2013-05-22 15:32:38' system info: os.name: 'linux', os.arch: 'i386', os.version: '2.6.32-042stab076.8', java.version: '1.7.0' driver info: driver.version: eventfiringwebdriver     @ org.openqa.selenium.remote.errorhandler.throwifresponsefailed(errorhandler.java:125)     ... 20 more caused by: org.openqa.selenium.remote.errorhandler$unknownserverexception: error message => 'unable find element css selector '#wpwrap''  caused request => {"headers":{"accept":"application/json, image/png","connection":"keep-alive","content-length":"42","content-type":"application/json; charset=utf-8","host":"localhost:2897"},"httpversion":"1.1","method":"post","post":"{\"using\":\"css selector\",\"value\":\"#wpwrap\"}","url":"/element","urlparsed":{"anchor":"","query":"","file":"element","directory":"/","path":"/element","relative":"/element","port":"","host":"","password":"","user":"","userinfo":"","authority":"","protocol":"","source":"/element","querykey":{},"chunks":["element"]},"urloriginal":"/session/77a0a110-f421-11e2-a6fd-61cd002d7d02/element"} build info: version: '2.33.0', revision: '4e90c97', time: '2013-05-22 15:32:38' system info: os.name: 'linux', os.arch: 'i386', os.version: '2.6.32-042stab076.8', java.version: '1.7.0' driver info: driver.version: unknown 23:25:36.293 warn - exception: error message => 'unable find element css selector '#wpwrap''  caused request => {"headers":{"accept":"application/json, image/png","connection":"keep-alive","content-length":"42","content-type":"application/json; charset=utf-8","host":"localhost:2897"},"httpversion":"1.1","method":"post","post":"{\"using\":\"css selector\",\"value\":\"#wpwrap\"}","url":"/element","urlparsed":{"anchor":"","query":"","file":"element","directory":"/","path":"/element","relative":"/element","port":"","host":"","password":"","user":"","userinfo":"","authority":"","protocol":"","source":"/element","querykey":{},"chunks":["element"]},"urloriginal":"/session/77a0a110-f421-11e2-a6fd-61cd002d7d02/element"} build info: version: '2.33.0', revision: '4e90c97', time: '2013-05-22 15:32:38' system info: os.name: 'linux', os.arch: 'i386', os.version: '2.6.32-042stab076.8', java.version: '1.7.0' driver info: driver.version: unknown 

from see, simple problem solve. have unhandled exception being thrown when there failure: nosuchelementexception . don't think need restart grid node every time (assuming running grid hub separate grid node instances). may successive runs of browser grid node use enough more memory cause minor delay in page, breaking script. need handle nosuchelementexception gracefully wrapping in retry try loop. can similar using fluentwait .ignoring method.


Comments

Popular posts from this blog

javascript - DIV "hiding" when changing dropdown value -

Does Firefox offer AppleScript support to get URL of windows? -

android - How to install packaged app on Firefox for mobile? -