angular / protractor

E2E test framework for Angular apps
http://www.protractortest.org
MIT License
8.75k stars 2.31k forks source link

Passing user made parameters using Xvfb #1406

Closed William-Olson closed 10 years ago

William-Olson commented 10 years ago

I am running my protractor tests on an ec2 instance using Xvfb for headless mode. My specs run fine until I start passing some user made parameters.

Example: Running this works flawlessly:

$ Display=:1 xvfb-run protractor protractor.conf.js --specs=./specs/user_admin_spec.js

Running this with a user made parameter gives the following errors:

$ Display=:1 xvfb-run protractor protractor.conf.js --specs=./specs/user_admin_spec.js --params.dbInit.before=y
Using ChromeDriver directly...

/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:109
  var template = new Error(this.message);
                 ^
ElementNotVisibleError: element not visible
  (Session info: chrome=37.0.2062.94)
  (Driver info: chromedriver=2.10.267518,platform=Linux 3.13.0-29-generic x86_64)
    at new bot.Error (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/error.js:109:18)
    at Object.bot.response.checkResponse (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/atoms/response.js:106:9)
    at /usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:277:20
    at /usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/base.js:1243:15
    at webdriver.promise.ControlFlow.runInNewFrame_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1539:20)
    at notify (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:362:12)
    at notifyAll (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:331:7)
    at resolve (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:309:7)
    at fulfill (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:429:5)
    at /usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1406:10
==== async task ====
WebElement.click()
    at webdriver.WebDriver.schedule (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:268:15)
    at webdriver.WebElement.schedule_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:1646:23)
    at webdriver.WebElement.click (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/webdriver.js:1751:15)
    at /usr/local/lib/node_modules/protractor/lib/protractor.js:490:41
    at /usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/goog/base.js:1243:15
    at webdriver.promise.ControlFlow.runInNewFrame_ (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:1539:20)
    at notify (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:362:12)
    at notifyAll (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:331:7)
    at resolve (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/webdriver/promise.js:309:7)
Error
    at self.(anonymous function) [as click] (/usr/local/lib/node_modules/protractor/lib/protractor.js:485:29)
    at goToDBInit (/var/lib/jenkins/jobs/exigoenergy/e2e/lib/page_helper.js:77:17)
    at Object.dbInit (/var/lib/jenkins/jobs/exigoenergy/e2e/lib/page_helper.js:169:5)
    at exports.config.onPrepare (/var/lib/jenkins/jobs/exigoenergy/e2e/protractor.conf.js:129:12)
    at Runner.runFilenamesOrFns_ (/usr/local/lib/node_modules/protractor/lib/runner.js:68:20)
    at Runner.runTestPreparers (/usr/local/lib/node_modules/protractor/lib/runner.js:101:15)
    at Object.exports.run (/usr/local/lib/node_modules/protractor/lib/frameworks/jasmine.js:38:10)
    at driverprovider_.setupEnv.then.then.then.testResult (/usr/local/lib/node_modules/protractor/lib/runner.js:266:28)
    at _fulfilled (/usr/local/lib/node_modules/protractor/node_modules/q/q.js:797:54)
    at self.promiseDispatch.done (/usr/local/lib/node_modules/protractor/node_modules/q/q.js:826:30)

Passing the parameter above triggers the protractor config's onPrepare function, which seems to be causing the error. However, running both with and without parameters on my local machine works just fine (not using xvfb). Is there a sync issue with the onPrepare function and xvfb or something?

juliemr commented 10 years ago

I don't think this has anything to do with onPrepare in general, I think it's just webdriver not working properly over xvfb. There is probably something inside your onPrepare which tries to access an off-screen element. See this question: http://grokbase.com/t/gg/webdriver/132wr748s7/in-xvfb-element-on-side-of-screen-is-sometimes-invisible-to-click-tho-seen-in-screenshot-solution-increase-xvfb-dimension

Please open up a new issue if the solution posted there does not work for you