{"_id":"moonraker","_rev":"26-c23f16aadeae9a9a02f3b96a918ad4aa","name":"moonraker","description":"An easy to use lightweight web testing framework for Node, designed for speed, maintainability and collaboration.","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.3":{"name":"moonraker","version":"0.1.3","homepage":"https://github.com/LateRoomsGroup/moonraker","keywords":["selenium","webdriver","bdd","parallel"],"repository":{"type":"git","url":"https://github.com/LateRoomsGroup/moonraker.git"},"bugs":{"url":"https://github.com/LateRoomsGroup/moonraker/issues"},"main":"lib/moonraker.js","dependencies":{"yadda":"0.11.2","selenium-webdriver":"2.43.5","mocha":"1.21.4","chai":"1.9.1","glob":"4.0.2","nconf":"0.6.9","handlebars":"2.0.0","wrench":"1.5.8"},"devDependencies":{"bower":"~1.3.12","gulp":"^3.5.6","gulp-sass":"^0.7.1","gulp-concat":"^2.2.0","gulp-minify-css":"^0.3.0","gulp-rename":"^1.2.0","gulp-util":"^2.2.14"},"gitHead":"fca31db4ebbe668e821706efb358ed2438df5c2b","description":"![Moonraker Logo](https://dl.dropboxusercontent.com/u/6598543/logo-black.png)","_id":"moonraker@0.1.3","scripts":{},"_shasum":"55bcbdd1d3edc5bff50c3b1adad6894fd65c501a","_from":"./","_npmVersion":"1.4.28","_npmUser":{"name":"tlrg","email":"matt.beasley@laterooms.com"},"maintainers":[{"name":"tlrg","email":"matt.beasley@laterooms.com"}],"dist":{"shasum":"55bcbdd1d3edc5bff50c3b1adad6894fd65c501a","tarball":"https://registry.npmjs.org/moonraker/-/moonraker-0.1.3.tgz","integrity":"sha512-volA8HTay36NS2r6yQQSOrsz1h9pk3TsGr2Q2j7lNgAJfb0gY+um5qkL+CJy5whtgPgNsojiCcfEG7jGIBe1Dg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmWHqeG/JpHuCAGnd5hXCII8j+EQ7Zpc62hKFjeQiBuAIhAPWjAlFIyjJTXDxrNbfzYVLvGbUp5cFm1EZ40C015tsL"}]}},"0.1.4":{"name":"moonraker","version":"0.1.4","homepage":"https://github.com/LateRoomsGroup/moonraker","description":"An easy to use lightweight web testing framework for Node, designed for speed, maintainability and collaboration.","keywords":["selenium","webdriver","bdd","parallel"],"repository":{"type":"git","url":"https://github.com/LateRoomsGroup/moonraker.git"},"bugs":{"url":"https://github.com/LateRoomsGroup/moonraker/issues"},"main":"lib/moonraker.js","dependencies":{"yadda":"0.11.2","selenium-webdriver":"2.43.5","mocha":"1.21.4","chai":"1.9.1","glob":"4.0.2","nconf":"0.6.9","handlebars":"2.0.0","wrench":"1.5.8"},"devDependencies":{"bower":"~1.3.12","gulp":"^3.5.6","gulp-sass":"^0.7.1","gulp-concat":"^2.2.0","gulp-minify-css":"^0.3.0","gulp-rename":"^1.2.0","gulp-util":"^2.2.14"},"gitHead":"fca31db4ebbe668e821706efb358ed2438df5c2b","_id":"moonraker@0.1.4","scripts":{},"_shasum":"d59e82e0c856f407772ed1f1e44057b72d394887","_from":"./","_npmVersion":"1.4.28","_npmUser":{"name":"tlrg","email":"matt.beasley@laterooms.com"},"maintainers":[{"name":"tlrg","email":"matt.beasley@laterooms.com"}],"dist":{"shasum":"d59e82e0c856f407772ed1f1e44057b72d394887","tarball":"https://registry.npmjs.org/moonraker/-/moonraker-0.1.4.tgz","integrity":"sha512-KPQnbpCQZ14rPko0H6jaOqKxN18We7FmKdCKZ55adWAyFuEEDBtrkK90d0ZVhT+A6Ht1xm25x6ivJ4cLjGZT+Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDDa4AXsJ9Y0ZmaeE0LeikGGiUwB5AdEiJfjZ47kJvqxAiEAnkMlhDx9ij3PX0yABjrJHKwVGMLAVyYxlQy1ttupblw="}]}},"0.1.5":{"name":"moonraker","version":"0.1.5","homepage":"https://github.com/LateRoomsGroup/moonraker","description":"An easy to use lightweight web testing framework for Node, designed for speed, maintainability and collaboration.","keywords":["selenium","webdriver","bdd","parallel"],"repository":{"type":"git","url":"https://github.com/LateRoomsGroup/moonraker.git"},"bugs":{"url":"https://github.com/LateRoomsGroup/moonraker/issues"},"main":"lib/moonraker.js","dependencies":{"yadda":"0.11.3","selenium-webdriver":"2.44.0","mocha":"2.0.1","chai":"1.10.0","glob":"4.3.1","nconf":"0.7.1","handlebars":"2.0.0","wrench":"1.5.8"},"devDependencies":{"bower":"~1.3.12","gulp":"^3.5.6","gulp-sass":"^0.7.1","gulp-concat":"^2.2.0","gulp-minify-css":"^0.3.0","gulp-rename":"^1.2.0","gulp-util":"^2.2.14"},"gitHead":"862e867892c4d320161593eca8fe34a6f47b5be6","_id":"moonraker@0.1.5","scripts":{},"_shasum":"5891fc055318f29ee98dc7d5a76a3a19d637d660","_from":"./","_npmVersion":"1.4.28","_npmUser":{"name":"tlrg","email":"matt.beasley@laterooms.com"},"maintainers":[{"name":"tlrg","email":"matt.beasley@laterooms.com"}],"dist":{"shasum":"5891fc055318f29ee98dc7d5a76a3a19d637d660","tarball":"https://registry.npmjs.org/moonraker/-/moonraker-0.1.5.tgz","integrity":"sha512-dUWaPFJgcQIcNphUE4qEXSeTbdP09iysDl62l47rhY76mG6Wgvge1DRb2xdCAzjfS2C50bfm1KJSnR1kT6oL3A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtiYYUlpojmoXOIGXH59dSoEiqj45okNlK3EFmkONDbwIgE1IjMwjq/9wYyPpeSIXpWcP7e3JcyRa5tu4GxK83kVU="}]}},"0.1.6":{"name":"moonraker","version":"0.1.6","homepage":"https://github.com/LateRoomsGroup/moonraker","description":"An easy to use lightweight web testing framework for Node, designed for speed, maintainability and collaboration.","keywords":["selenium","webdriver","bdd","parallel"],"repository":{"type":"git","url":"https://github.com/LateRoomsGroup/moonraker.git"},"bugs":{"url":"https://github.com/LateRoomsGroup/moonraker/issues"},"main":"lib/moonraker.js","dependencies":{"yadda":"0.11.3","selenium-webdriver":"2.44.0","mocha":"2.0.1","chai":"1.10.0","glob":"4.3.1","nconf":"0.7.1","handlebars":"2.0.0","wrench":"1.5.8","coffee-script":"1.8.0"},"devDependencies":{"bower":"~1.3.12","gulp":"^3.5.6","gulp-sass":"^0.7.1","gulp-concat":"^2.2.0","gulp-minify-css":"^0.3.0","gulp-rename":"^1.2.0","gulp-util":"^2.2.14"},"gitHead":"491fbb792046b7262bce00a168320bd5fabca174","_id":"moonraker@0.1.6","scripts":{},"_shasum":"c29865fdb6e5b168408ada0d44b1ef9199ef89d6","_from":"./","_npmVersion":"1.4.28","_npmUser":{"name":"tlrg","email":"matt.beasley@laterooms.com"},"maintainers":[{"name":"tlrg","email":"matt.beasley@laterooms.com"}],"dist":{"shasum":"c29865fdb6e5b168408ada0d44b1ef9199ef89d6","tarball":"https://registry.npmjs.org/moonraker/-/moonraker-0.1.6.tgz","integrity":"sha512-TNFgavOwW7YSk2Ojxn4PwRN91vH1akiA9SYTq7glukiO4kZzICx+5Fjl6qX/HpCognAKwp8vL1OkBPO+6c55vg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMBQ4GjdQ/GgNVxd4p9M77lcDz9FbAFHotWca+Ytew8gIhAPfTaIo5TY8MCqz/qm2CZ2EV2Y9rVDXWm8Zv3soQdAiK"}]}},"0.2.0":{"name":"moonraker","version":"0.2.0","homepage":"https://github.com/LateRoomsGroup/moonraker","description":"An easy to use lightweight web testing framework for Node, designed for speed, maintainability and collaboration.","keywords":["selenium","webdriver","bdd","parallel"],"repository":{"type":"git","url":"https://github.com/LateRoomsGroup/moonraker.git"},"bugs":{"url":"https://github.com/LateRoomsGroup/moonraker/issues"},"main":"lib/moonraker.js","dependencies":{"yadda":"0.11.3","selenium-webdriver":"2.44.0","mocha":"2.0.1","chai":"1.10.0","glob":"4.3.1","nconf":"0.7.1","handlebars":"2.0.0","wrench":"1.5.8","coffee-script":"1.8.0"},"devDependencies":{"bower":"~1.3.12","gulp":"^3.5.6","gulp-sass":"^0.7.1","gulp-concat":"^2.2.0","gulp-minify-css":"^0.3.0","gulp-rename":"^1.2.0","gulp-util":"^2.2.14"},"gitHead":"f83cd9cf4bd77e975fd4a491daec8709c79b2b5c","_id":"moonraker@0.2.0","scripts":{},"_shasum":"a04872f7a6c5b0923bc7ed4c8884180ca8decd48","_from":"./","_npmVersion":"1.4.28","_npmUser":{"name":"tlrg","email":"matt.beasley@laterooms.com"},"maintainers":[{"name":"tlrg","email":"matt.beasley@laterooms.com"}],"dist":{"shasum":"a04872f7a6c5b0923bc7ed4c8884180ca8decd48","tarball":"https://registry.npmjs.org/moonraker/-/moonraker-0.2.0.tgz","integrity":"sha512-jlc0rwgmIB+6zqprRfe54hPLRK9WmGxnE7F6qeFz+2OVt2yddaSmL1hpz0TGlZgXOjndw7M0TnnKlo+XFrm1Lw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCFpZZRuXAQa0q5shUuIABD0aa7NF29F3Rw/GT71TAWCgIgNJ2riwb1LXmDrWKxeIhovpcHtIO14SzsbN/ywnk87us="}]}},"0.3.0":{"name":"moonraker","version":"0.3.0","homepage":"https://github.com/LateRoomsGroup/moonraker","description":"An easy to use lightweight web testing framework for Node, designed for speed, maintainability and collaboration.","keywords":["selenium","webdriver","bdd","parallel"],"repository":{"type":"git","url":"https://github.com/LateRoomsGroup/moonraker.git"},"bugs":{"url":"https://github.com/LateRoomsGroup/moonraker/issues"},"main":"lib/moonraker.js","dependencies":{"yadda":"0.11.4","selenium-webdriver":"2.44.0","mocha":"2.1.0","chai":"1.10.0","glob":"4.3.1","nconf":"0.7.1","handlebars":"2.0.0","wrench":"1.5.8","coffee-script":"1.9.0"},"devDependencies":{"bower":"~1.3.12","gulp":"^3.5.6","gulp-sass":"^0.7.1","gulp-concat":"^2.2.0","gulp-minify-css":"^0.3.0","gulp-rename":"^1.2.0","gulp-util":"^2.2.14"},"gitHead":"73ae7b9d6bf6ab4320bb35837b27f713692026c2","_id":"moonraker@0.3.0","scripts":{},"_shasum":"f7485cfddf84aeb931c5c7c56efab9cf20743b91","_from":"./","_npmVersion":"1.4.28","_npmUser":{"name":"tlrg","email":"matt.beasley@laterooms.com"},"maintainers":[{"name":"tlrg","email":"matt.beasley@laterooms.com"}],"dist":{"shasum":"f7485cfddf84aeb931c5c7c56efab9cf20743b91","tarball":"https://registry.npmjs.org/moonraker/-/moonraker-0.3.0.tgz","integrity":"sha512-aKYziDPdv5+gJ1VRU7Jn+som8BU/Fv3+ArQYvZ+Tx8bUx2wGsK6okwKTYDyNKKTFnrP8u4QQ6DUwUXMqKWXizg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCM50hM3Yx6x++3CBn2ZSkWv83Obpf1gIokJknOJQimcQIgKy7EvT2tigJ6u2nAyE6PkV29LHKdd+2omCKDbDE6mcg="}]}},"0.3.1":{"name":"moonraker","version":"0.3.1","homepage":"https://github.com/LateRoomsGroup/moonraker","description":"An easy to use lightweight web testing framework for Node, designed for speed, maintainability and collaboration.","keywords":["selenium","webdriver","bdd","parallel"],"repository":{"type":"git","url":"https://github.com/LateRoomsGroup/moonraker.git"},"bugs":{"url":"https://github.com/LateRoomsGroup/moonraker/issues"},"main":"lib/moonraker.js","dependencies":{"yadda":"0.11.4","selenium-webdriver":"2.44.0","mocha":"2.1.0","chai":"1.10.0","glob":"4.3.1","nconf":"0.7.1","handlebars":"2.0.0","wrench":"1.5.8","coffee-script":"1.9.0"},"devDependencies":{"bower":"~1.3.12","gulp":"^3.5.6","gulp-sass":"^0.7.1","gulp-concat":"^2.2.0","gulp-minify-css":"^0.3.0","gulp-rename":"^1.2.0","gulp-util":"^2.2.14"},"gitHead":"be1e4ed920a1ee55e9b30b99d8901aa885e6c573","_id":"moonraker@0.3.1","scripts":{},"_shasum":"7497dadf3fff8165f5d11cf30e51d9d3f5f77db7","_from":"./","_npmVersion":"1.4.28","_npmUser":{"name":"tlrg","email":"matt.beasley@laterooms.com"},"maintainers":[{"name":"tlrg","email":"matt.beasley@laterooms.com"}],"dist":{"shasum":"7497dadf3fff8165f5d11cf30e51d9d3f5f77db7","tarball":"https://registry.npmjs.org/moonraker/-/moonraker-0.3.1.tgz","integrity":"sha512-HTtZY9l/TfEvPd0sVaIxAkaYpchEHigqNbdIgERp0pmVAeVlooUOQ0rnlJ+STu6QSpIWqBABbIcxA9LKIsREvg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqTtGPbabjo9v8c8ZEXPbXbBrKSfePUTXj4mVlIxv+GgIhAJ+HSOIg2Ee85CrRg/m9G9ofr2S4n9MCjUOXZ1Eus2Rd"}]}},"0.3.2":{"name":"moonraker","version":"0.3.2","homepage":"https://github.com/LateRoomsGroup/moonraker","description":"An easy to use lightweight web testing framework for Node, designed for speed, maintainability and collaboration.","keywords":["selenium","webdriver","bdd","parallel"],"repository":{"type":"git","url":"https://github.com/LateRoomsGroup/moonraker.git"},"bugs":{"url":"https://github.com/LateRoomsGroup/moonraker/issues"},"main":"lib/moonraker.js","dependencies":{"yadda":"0.11.4","selenium-webdriver":"2.44.0","mocha":"2.1.0","chai":"1.10.0","glob":"4.3.1","nconf":"0.7.1","handlebars":"2.0.0","wrench":"1.5.8","coffee-script":"1.9.0"},"devDependencies":{"bower":"~1.3.12","gulp":"^3.5.6","gulp-sass":"^0.7.1","gulp-concat":"^2.2.0","gulp-minify-css":"^0.3.0","gulp-rename":"^1.2.0","gulp-util":"^2.2.14"},"gitHead":"f7da7783ffffc2d2541199528e018ec2294ecaff","_id":"moonraker@0.3.2","scripts":{},"_shasum":"94fca7840252ba75ef13f3ae88b78cd578d110cf","_from":"./","_npmVersion":"1.4.28","_npmUser":{"name":"tlrg","email":"matt.beasley@laterooms.com"},"maintainers":[{"name":"tlrg","email":"matt.beasley@laterooms.com"}],"dist":{"shasum":"94fca7840252ba75ef13f3ae88b78cd578d110cf","tarball":"https://registry.npmjs.org/moonraker/-/moonraker-0.3.2.tgz","integrity":"sha512-2gy/pJLymI8PP7nNAd3jlBvUxdWIbubrjmgtoqFnDZCcGv+reg0sp6wDQnwr+7YbD9Tqdwpa6srUzdVZ4GaQcg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF2t4hqYnDysXus3id52woujuRpAHl1Mgi6/Boavxn86AiEA0f9FxwHZo2XmAxakSPVL7/Eva7T2wj7cNfX/znWgsNg="}]}},"0.3.3":{"name":"moonraker","version":"0.3.3","homepage":"https://github.com/LateRoomsGroup/moonraker","description":"An easy to use lightweight web testing framework for Node, designed for speed, maintainability and collaboration.","keywords":["selenium","webdriver","bdd","parallel"],"repository":{"type":"git","url":"https://github.com/LateRoomsGroup/moonraker.git"},"bugs":{"url":"https://github.com/LateRoomsGroup/moonraker/issues"},"main":"lib/moonraker.js","dependencies":{"yadda":"0.11.5","selenium-webdriver":"2.44.0","mocha":"2.1.0","chai":"1.10.0","glob":"4.3.1","nconf":"0.7.1","handlebars":"2.0.0","wrench":"1.5.8","coffee-script":"1.9.0","jquery":"~1.9.0"},"devDependencies":{"bower":"~1.3.12","gulp":"^3.5.6","gulp-sass":"^0.7.1","gulp-concat":"^2.2.0","gulp-minify-css":"^0.3.0","gulp-rename":"^1.2.0","gulp-util":"^2.2.14"},"gitHead":"8ffb1de89b38ed5e964540cbf21cd06c2c2dbd88","_id":"moonraker@0.3.3","scripts":{},"_shasum":"c862d2ee75eea95d496aabafe797a978efdb1c2d","_from":"./","_npmVersion":"1.4.28","_npmUser":{"name":"tlrg","email":"matt.beasley@laterooms.com"},"maintainers":[{"name":"tlrg","email":"matt.beasley@laterooms.com"}],"dist":{"shasum":"c862d2ee75eea95d496aabafe797a978efdb1c2d","tarball":"https://registry.npmjs.org/moonraker/-/moonraker-0.3.3.tgz","integrity":"sha512-MrAQo0BRHzfPxIKwgNLaogqHKUFj9UR/ZRWRg/jdQdGnBad5Ov6cIvlWMmVyhux8m5INpAvawW/RpvavGhVQJA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDF0LXCo2xJW2sjth/DKol7s1HgvEzHCFS0X0vq+QztGgIhAPXTmTWrkvtqFLEUwL+wsKozpEAPvl29aKfSQsUbNOMB"}]}},"0.3.5":{"name":"moonraker","version":"0.3.5","homepage":"https://github.com/LateRoomsGroup/moonraker","description":"An easy to use lightweight web testing framework for Node, designed for speed, maintainability and collaboration.","keywords":["selenium","webdriver","bdd","parallel"],"repository":{"type":"git","url":"https://github.com/LateRoomsGroup/moonraker.git"},"bugs":{"url":"https://github.com/LateRoomsGroup/moonraker/issues"},"main":"lib/moonraker.js","dependencies":{"yadda":"0.11.5","selenium-webdriver":"2.44.0","mocha":"2.1.0","chai":"1.10.0","glob":"4.3.1","nconf":"0.7.1","handlebars":"2.0.0","wrench":"1.5.8","coffee-script":"1.9.0","jquery":"~1.9.0"},"devDependencies":{"bower":"~1.3.12","gulp":"^3.5.6","gulp-sass":"^0.7.1","gulp-concat":"^2.2.0","gulp-minify-css":"^0.3.0","gulp-rename":"^1.2.0","gulp-util":"^2.2.14"},"gitHead":"1dab39ffc8ad93e0d32eadc3a4035b446050f7f6","_id":"moonraker@0.3.5","scripts":{},"_shasum":"fc0485317f42667383ca1d6e030b285716a959b3","_from":".","_npmVersion":"2.6.1","_nodeVersion":"0.10.36","_npmUser":{"name":"tlrg","email":"matt.beasley@laterooms.com"},"maintainers":[{"name":"tlrg","email":"matt.beasley@laterooms.com"}],"dist":{"shasum":"fc0485317f42667383ca1d6e030b285716a959b3","tarball":"https://registry.npmjs.org/moonraker/-/moonraker-0.3.5.tgz","integrity":"sha512-KnPyZ7O7j54OAojZTTuiDvYkK+oVaf3C+znmM9Mdg9fwJFhNS10fzJhlBqVv9WgcQlPjwI3qbMMg7ci3Cy5BUA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGSfU7N2/Pf3BupXHgFojrKJz2CsLA6hNnwUHd2p6zaQAiBS2MkIpm5Ww7f7fC95Kl63ilVpNM6q6ppviiMwL71LAg=="}]}},"0.4.0":{"name":"moonraker","version":"0.4.0","homepage":"https://github.com/LateRoomsGroup/moonraker","description":"An easy to use lightweight web testing framework for Node, designed for speed, maintainability and collaboration.","keywords":["selenium","webdriver","bdd","parallel"],"repository":{"type":"git","url":"git+https://github.com/LateRoomsGroup/moonraker.git"},"bugs":{"url":"https://github.com/LateRoomsGroup/moonraker/issues"},"main":"lib/moonraker.js","dependencies":{"chai":"1.10.0","coffee-script":"1.9.0","glob":"4.3.1","handlebars":"2.0.0","jquery":"~1.9.0","mocha":"2.1.0","nconf":"0.7.1","selenium-webdriver":"2.44.0","transliteration":"^0.1.1","wrench":"1.5.8","yadda":"0.11.5"},"devDependencies":{"bower":"~1.3.12","gulp":"^3.5.6","gulp-sass":"^0.7.1","gulp-concat":"^2.2.0","gulp-minify-css":"^0.3.0","gulp-rename":"^1.2.0","gulp-util":"^2.2.14"},"gitHead":"c51d342683a2da8e9948381892b07f97eeaa06f0","_id":"moonraker@0.4.0","scripts":{},"_shasum":"fab0e90141469f662ce762007bd7cda334bf65ba","_from":".","_npmVersion":"3.10.8","_nodeVersion":"6.9.1","_npmUser":{"name":"tlrg","email":"git@laterooms.com"},"dist":{"shasum":"fab0e90141469f662ce762007bd7cda334bf65ba","tarball":"https://registry.npmjs.org/moonraker/-/moonraker-0.4.0.tgz","integrity":"sha512-P4G/wSgfRnYbqv8CXxGdEVm7rT50P9SYoxaMo4uA83urh29Zn2HgWAMYE4+i4LuVmlsgheGNMOQ8bAOB5UoEfw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFnwQABCbCrFu27ZvNdNpnV+EXe+Fh/GWQQnqixnU72EAiEAhc2w9IaD80Vu7fPLpyA/CCOcqrHBVaZTLAClDu9XbH8="}]},"maintainers":[{"name":"tlrg","email":"matt.beasley@laterooms.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/moonraker-0.4.0.tgz_1483536211562_0.8007163589354604"}}},"readme":"![Moonraker Logo](https://dl.dropboxusercontent.com/u/6598543/logo-black.png)\n\nAn easy to use lightweight web testing framework for Node, designed for speed, maintainability and collaboration.\nBringing together everything you need out of the box - familiar BDD features/scenarios, a simple page object library, parallel testing and pretty reports.\n\nIntegrating [Yadda](https://github.com/acuminous/yadda), [Selenium-Webdriver](https://github.com/SeleniumHQ/selenium/tree/master/javascript/node/selenium-webdriver), [Mocha](http://mochajs.org/) & [Chai](http://chaijs.com/).\n\n\n* [Install](#install)\n* [Example Project](#example-project)\n* [Configure](#configure)\n* [Run](#run-your-tests)\n* [Writing Your Tests](#writing-your-tests)\n* [Page Objects](#page-objects)\n* [Components](#components)\n* [Feature Tags](#feature-tags)\n* [Assertions](#assertions)\n* [CoffeeScript](#coffeescript)\n* [Saucelabs / Browserstack integration](#saucelabs--browserstack-integration)\n* [Running your tests in parallel](#running-your-tests-in-parallel)\n* [Reporting](#reporting)\n* [Page object reference](#page-object-reference)\n* [Session reference](#session-reference)\n* [TODO](#todo)\n\n### Latest version\n\nThe current version of Moonraker is 0.3.3. Recent changes include:\n* Russian report translations and step lookup fix by [vectart](https://github.com/vectart).\n* Offline report update by [poum](https://github.com/poum).\n\n\n### Install\n\nMoonraker can be installed via [npm](https://www.npmjs.org/) - `$ npm install moonraker`, or add `moonraker` to your `package.json`.\n\n### Example project\n\nYou will find a full example project in the `example/basic` directory with everything you need to start using Moonraker - sample feature, step definitions, page objects and config in a suggested project structure.\n\nThe example tests use Chrome, so you will need the latest [chromedriver](http://chromedriver.storage.googleapis.com/index.html) downloaded and available on your path.\n\n`npm install` then `npm test` from within the example directory to run the sample feature.\n\n### Configure\n\nMoonraker is configured using a `config.json` file in your project root:\n\n```json\n{\n  \"baseUrl\": \"http://www.laterooms.com\",\n  \"featuresDir\": \"tests/features\",\n  \"stepsDir\": \"tests/steps\",\n  \"resultsDir\": \"results\",\n  \"reporter\": \"moonraker\",\n  \"threads\": 1,\n\n  \"tags\": \"@booking\",\n\n  \"testTimeout\": 60000,\n  \"elementTimeout\": 5000,\n\n  \"browser\": {\n    \"browserName\": \"chrome\",\n    \"chromeOptions\": {\n      \"args\": [\"--no-sandbox\"]\n    }\n  }\n}\n```\n\n* `baseUrl`        - Your base url, page object urls will be relative to this.*\n* `featuresDir`    - The path to your features directory.*\n* `stepsDir`       - The path to your step definitions directory.*\n* `resultsDir`     - The path you'd like your results output to. (Default: /results)\n* `reporter`       - The reporter type you'd like Moonraker to use (more on this [below](#reporting)).\n* `threads`        - The number of threads you'd like to run with. (Default: 1)\n* `tags`           - Optional: Comma seperated list of feature tags (more on this [below](#feature-tags)).\n* `testTimeout`    - The maximum test (scenario step) timeout before its marked as a fail (ms). (Default: 60000)\n* `elementTimeout` - The maximum time selenium will continuously try to find an element on the page (ms). (Default: 3000)\n* `browser`        - An object describing your browser [desired capabilities](https://code.google.com/p/selenium/wiki/DesiredCapabilities).*\n* `seleniumServer` - Optional: Address of your remote selenium standalone server.\n* `language`       - Optional: sets the language to use (default: English).\n\n\n\\* - Required.\n\nThe example configuration above assumes using Chrome directly, to connect to a remote selenium server just add your server address to your `config.json`:\n\n`\"seleniumServer\": \"http://127.0.0.1:4444/wd/hub\"`.\n\nYou can use this to connect to cloud service providers like [Saucelabs](https://saucelabs.com/) and [Browserstack](https://www.browserstack.com/automate). Please see [below]() for example browser configurations.\n\nYou can also set which language to use, using `language`, if you intend to use non English feature & step definition files. A full list of supported languages is available [here](https://github.com/acuminous/yadda/tree/master/lib/localisation).\n\nAll of Moonraker's configuration options can be overridden when running your tests (see below) if you add command line args (e.g: `--baseUrl=http://www.example.com` or `--browser.browserName=phantomjs`) or have set environment variables. They will take preference over the `config.json`, in that order - command line args > env vars > config.\n\nYou can also add whatever you like to the config and access it in your code using: `var config = require('moonraker').config;`.\n\n### Run your tests\n\nTo start Moonraker run `$ node node_modules/moonraker/bin/moonraker.js`, or to make things easier you can add a shortcut in your `package.json`:\n\n```json\n{\n  \"scripts\": {\n    \"test\": \"node node_modules/moonraker/bin/moonraker\"\n  }\n}\n```\n... so you can simply run `$ npm test`. Note, you cannot pass command line args using the `$ npm test` shortcut.\n\n### Writing your tests\n\nTests for Moonraker are written using [Yadda](https://github.com/acuminous/yadda), a BDD implementation very similar to [Cucumber](http://cukes.info/) and run using the [Mocha](http://visionmedia.github.io/mocha/) JavaScript test framework.\n\nJust like Cucumber, Yadda maps ordinary language steps to code, but can be quite flexible by not limiting you to a certain syntax (Given, When, Then) and allowing you to define your own...\n\n```\nFeature: Searching from the homepage\n\n  Scenario: Simple Search\n\n    Given I visit the home page\n    When I search for 'Manchester'\n    Whatever language I like here\n```\n\n```javascript\nexports.define = function (steps) {\n\n  steps.given(\"I visit the home page\", function () {\n    // some code\n  });\n\n  steps.when(\"I search for '$query'\", function (query) {\n    // some code\n  });\n\n  steps.define(\"Whatever language I like here\", function() {\n    // some code\n  });\n\n};\n\n```\n\nAlthough Yadda can support multiple libraries, Moonraker currently loads all step definitions found in your steps directory into one big shared library, just like Cucumber, so you have to be careful of step name clashes.\n\n### Page objects\n\nMoonraker makes full use of the Page Object pattern to model and abstract interactions with pages to reduce duplicated code and make tests easy to update as and when the UI changes.\n\nTo create a page object:\n\n```javascript\n// tests/pages/home.js\nvar Page = require('moonraker').Page;\n\nmodule.exports = new Page({\n\n  url: { value: '/' },\n\n  txtSearch: { get: function () { return this.element(\"input[id='txtSearch']\"); } },\n  btnSearch: { get: function () { return this.element('btn-primary', 'className'); } },\n\n  searchFor: { value: function (query) {\n    this.txtSearch.sendKeys(query);\n    this.btnSearch.click();\n  }}\n\n});\n```\n\nEach page has a url, some elements and any convenient methods that you may require.\n\nElements are found by css selector (or optionally another locator type can be specified) and return a selenium web-element which can be interacted with as [per usual](https://code.google.com/p/selenium/wiki/WebDriverJs). A full reference can be found [below](#page-object-reference).\n\nYou can then use your page objects in your step definitions:\n\n```javascript\n// tests/steps/home-search-steps.js\nvar homePage = require('../pages/home'),\n    searchResults = require('../pages/search-results');\n\nexports.define = function (steps) {\n\n  steps.given(\"I visit the home page\", function () {\n    homePage.visit();\n  });\n\n  steps.when(\"I search for '$query'\", function (query) {\n    homePage.txtSearch.sendKeys(query);\n    homePage.btnSearch.click();\n    // Or use homePage.searchFor(query);\n  });\n\n  steps.then(\"I should see '$heading' in the heading\", function (heading) {\n    searchResults.heading.getText().then(function (text) {\n      text.should.equal(heading);\n    });\n  });\n\n};\n\n```\n\n### Components\n\nComponents are exactly like page objects and allow you to group elements together into a component, then add that component itself to a page object.\n\n```javascript\n// tests/pages/components/nav.js\nvar Component = require('moonraker').Component\n\nmodule.exports = new Component({\n\n  selLanguage: { get: function () { return this.element('.locale select'); } },\n  selCurrency: { get: function () { return this.element('.currency select'); } }\n\n});\n```\n\n```javascript\n// tests/pages/home.js\nvar Page = require('moonraker').Page,\n    nav = require('./components/nav');\n\nmodule.exports = new Page({\n\n  url: { value: '/' },\n  nav: { get: function () { return this.component(nav, \"section[class='header']\"); } },\n  ...\n\n});\n```\n\nComponents are added to a page just like elements are but using:\n`this.component(component, rootNode)` where 'component' is your component object, and 'rootNode' is a css selector representing your components root node on the page.\n\nAll elements in your component are then scoped to this rootNode, so in the above example the element `selLanguage` with its `.locale select` selector is only found within the `section[class='header']` element.\n\nYour components can then be re-used across your page-objects and could appear in different places on the page.\n\nUsing your components:\n\n```javascript\n// tests/steps/home-search-steps.js\nvar homePage = require('../pages/home');\n\nexports.define = function (steps) {\n\n  steps.given(\"I visit the home page\", function () {\n    homePage.visit();\n  });\n\n  steps.when(\"I select my currency\", function () {\n    homePage.nav.selCurrency.click();\n    // etc..\n  });\n\n});\n\n```\n\n### Feature Tags\n\nMoonraker supports feature tags to help keep things organized and allow you to selectively run certain features:\n\n```\n@testing\nFeature: Searching from the homepage\n\n  Scenario: Simple Search\n\n    Given I visit the home page\n    ...\n```\n\nIn your config.json (or overridden by command-line args / environment variables) you can specify `\"tags\": \"@testing\"` to only run features with that tag or use `'!@testing'` to ignore those features. You can also use a comma seperated list - `@accounts,@booking` etc. Features tagged as `@Pending` will be skipped but included as pending features in the Moonraker test report.\n\n\n### Assertions\n\nThe 'should' style of the [Chai](http://chaijs.com/guide/styles/) assertion library is available to use in your step definitions.\n\n### CoffeeScript\n\nYou can use CoffeeScript for your step definitions and page objects if you prefer:\n\n```coffee\n# /pages/home.coffee\nPage = require('moonraker').Page\n\nmodule.exports = new Page\n\n  url: value: '/'\n\n  txtSearch: get: () -> @element \"input[id='txtSearch']\"\n  btnSearch: get: () -> @element \".btn-primary\"\n\n  searchFor: value: (query) ->\n    @txtSearch.sendKeys query\n    @btnSearch.click()\n```\n\n```coffee\n# /steps/home-search-steps.coffee\nhomePage = require '../pages/home'\nsearchResults = require '../pages/search-results'\n\nexports.define = (steps) ->\n\n  steps.given \"I visit the home page\", () ->\n    homePage.visit()\n\n  steps.when \"I search for '$query'\", (query) ->\n    homePage.txtSearch.sendKeys query\n    homePage.btnSearch.click()\n\n  steps.then \"I should see '$heading' in the heading\", (heading) ->\n    searchResults.heading.getText().then (text) ->\n      text.should.equal heading\n```\n### Saucelabs / Browserstack integration\n\nTo run your tests on cloud service providers like [Saucelabs](https://saucelabs.com/) and [Browserstack](https://www.browserstack.com/automate) you just need to configure Moonraker with the correct `seleniumServer` address and browser capabilities that include your username/access key:\n\nSaucelabs:\n```json\n\"seleniumServer\": \"http://ondemand.saucelabs.com:80/wd/hub\",\n\n  \"browser\": {\n    \"username\": \"USERNAME\",\n    \"accessKey\": \"KEY\",\n    \"browserName\": \"safari\",\n    \"version\": \"8.0\",\n    \"platform\": \"OS X 10.10\"\n  }\n```\nBrowserstack:\n```json\n\"seleniumServer\": \"http://hub.browserstack.com/wd/hub\",\n\n  \"browser\": {\n    \"browserstack.user\": \"USERNAME\",\n    \"browserstack.key\": \"KEY\",\n    \"browserName\": \"Safari\",\n    \"browser_version\": \"8.0\",\n    \"os\": \"OS X\",\n    \"os_version\": \"Yosemite\",\n    \"resolution\": \"1920x1080\"\n  }\n```\nNote: As you can see in these examples each provider specifies capabilites differently so you will need to refer to your provider documentation:\n\nhttps://docs.saucelabs.com/reference/platforms-configurator/\n\nhttp://www.browserstack.com/automate/capabilities\n\n### Running your tests in parallel\n\nMoonraker was designed with speed in mind and supports testing in parallel. To take advantage of this you simply need to increase the number of threads in the config.\n\nMoonraker will split your feature files over the amount of threads set and starts a new child process (and browser) for each. If you have 4 feature files and want to use 2 threads, 2 features will be executed per thread / browser etc.\n\nParallel testing works as expected for remote driver connections just as it does locally. If you have powerful enough hardware to run your tests on and a large, high performing selenium grid instance to open connections to, you can dramatically reduce your test execution time.\n\nAt best, you will only be as quick as your longest running feature though, so if you have features with tons of scenarios in them you should think about breaking them down into smaller more manageable feature files.\n\n### Reporting\n\nAs the tests are run using Mocha, you can use any of Mocha's [reporters](http://mochajs.org/#reporters).\nJust set the required reporter in the config.\nAs Mocha is designed to run serially though you will experience issues when running Moonraker in parallel, so Moonraker comes with its own custom reporter for Mocha.\n\nTo use it set the reporter in your config to `moonraker`. This reporter includes a Mocha spec-like console output and a html report saved to your results directory:\n\n![Moonraker report](https://dl.dropboxusercontent.com/u/6598543/report.png)\n\nThe html report includes details of any errors and embedded browser screenshots.\n\nIf you are using Moonraker in a non English language (set in the config) the report will try to find matching translations from [this file](https://github.com/LateRoomsGroup/moonraker/blob/master/lib/reporter/i18n/translations.json), defaulting to English if any are missing. Please feel free to contribute any translations that you may require.\n\n\n### Page object reference\n\nAs the examples show, all interactions with page elements (and the underlying driver) are abstracted away in your page objects. When you create a page object you have various ways of attaching elements to it so they can be interacted with in your step definitions:\n\n```javascript\nvar Page = require('moonraker').Page;\n\nmodule.exports = new Page({\n\n  url: { value: '/search' },\n\n  aTxtInput:  { get: function () { return this.element(\"input[id='txtSearch']\"); } },\n  buttons:    { get: function () { return this.elements(\"button\"); } },\n  aSelect:    { get: function () { return this.select(\"select[name='rt-child']\"); } },\n  aComponent: { get: function () { return this.component(yourComponent, \"div[class='container']\"); } },\n\n  onLoad: { value: function () {\n    // Some code to run immediately after the page is loaded.\n  } }\n\n});\n```\n\n* Setting a url value is for when you call `visit()` on your page object. e.g: `examplePage.visit();`. These url's are relative to the baseUrl set in your config, but if you set a full url like `http://www.example.com` the baseUrl will be ignored. Additionally, `visit()` can take an optional query object: `examplePage.visit({ foo: 'bar', baz: 'qux' });` will visit `http://yourBaseUrl/search?foo=bar&baz=qux`.\n\n* `element(selector, type)` - is used to find a specific element by selector type and returns a selenium webelement. The type is optional and if not supplied the default of 'css' is used (as in the examples above). You can specify another locator type if required - `this.element('//a/b/c', 'xpath')`. Elements are then accessed from your page objects: `examplePage.aTxtInput.click();`. All of [Selenium's locator](https://code.google.com/p/selenium/source/browse/javascript/webdriver/locators.js#212) types are supported.\n\n* `elements(selector, type)` - is used to find all elements on the page that satisfy the selector and returns a collection of selenium webelements. e.g:\n```javascript\nexamplePage.buttons.then(function (elems) {\n  elems.forEach(function (elem) {\n    // etc..\n  });\n});\n```\n\n* `select(selector, type)` - is the same as `element` but adds a helper `selectOption(optionValue)` to the element to enable easy option selection. e.g: `examplePage.aSelect.selectOption(3);`\n\n* `component(yourComponent, rootNode)` - Attaches a component you have defined to your page. Please see [components](#components).\n\nThere are some additional helper methods you can use:\n\n* `title(handler)` - To get the page title. e.g:\n```javascript\nexamplePage.title(function (t) {\n  console.log(t);\n});\n```\n\n* `waitFor(fn, timeout)` - Exposes selenium's `driver.wait`, to explicitly wait for a specific condition to be true. e.g:\n```javascript\nsearch: { value: function (query) {\n    var _this = this;\n    this.waitFor(function () {\n      return _this.aTxtInput.isDisplayed();\n    }, 5000);\n    this.aTxtInput.sendKeys(query);\n} }\n```\n\n* `alert()` - Attempts to switch to the current alert dialog. e.g: `examplePage.alert.accept();`.\n* `onLoad()` - An optional function you can define that is run when the page is loaded.\n\nComponents are the same and have access to the same element methods, but not the page specific ones: `visit()`, `title()`, `alert()` & `component()`.\nPlease see the official [selenium webdriver](https://code.google.com/p/selenium/wiki/WebDriverJs) documentation for further information on working with elements.\n\n### Session reference\n\nMoonraker uses a session object to group functions related to the current test session and can be used in your step definitions etc:\n```javascript\nvar session = require('moonraker').session;\nsession.resizeWindow(320, 480);\n```\n\n* `execute(fn)` - Adds any function to webdriver's control flow. Please see [control flows](https://code.google.com/p/selenium/wiki/WebDriverJs#Control_Flows).\n* `defer()` - Returns a webdriver.promise.defer() object. Please see [deferred objects](https://code.google.com/p/selenium/wiki/WebDriverJs#Deferred_Objects).\n* `resizeWindow(x, y)` - Resizes the browser window. By default its maximized.\n* `refresh()` - Refreshes the current page.\n* `saveScreenshot(filename)` - Saves a screenshot to `/yourResultsDir/screenshots/filename`. This is called automatically on test failure.\n* `deleteAllCookies()` - Deletes all cookies.\n* `addCookie(name, value, optDomain, optPath, optIsSecure, optExpiry)` - Adds a cookie.\n* `getCookie(name)` - Gets a cookie by name.\n* `currentUrl(handler)` - Gets the current url as a parsed [url](http://nodejs.org/api/url.html) object. e.g:\n```javascript\nsession.currentUrl(function (url) {\n  console.log(url);\n});\n```\n* `savePerfLog(filename)` - Saves the driver performance logs to `/yourResultsDir/perf_logs/filename`. This has been tested with Chrome to import logs into a local instance of [webpagetest](http://www.webpagetest.org/) to generate performance waterfall charts etc.\n\n### TODO\n\n* Further element helpers - integrating the new [until](https://github.com/SeleniumHQ/selenium/blob/master/javascript/node/selenium-webdriver/CHANGES.md#v2440) module.\n* Further example features, steps & pages.\n","maintainers":[{"email":"git@laterooms.com","name":"tlrg"}],"time":{"modified":"2022-06-20T09:08:42.053Z","created":"2014-12-09T17:09:57.319Z","0.1.3":"2014-12-09T17:09:57.319Z","0.1.4":"2014-12-09T17:16:22.615Z","0.1.5":"2014-12-10T13:27:59.131Z","0.1.6":"2014-12-17T16:25:21.423Z","0.2.0":"2015-01-19T17:24:38.525Z","0.3.0":"2015-01-30T15:32:24.471Z","0.3.1":"2015-01-30T15:36:12.791Z","0.3.2":"2015-02-05T16:07:45.756Z","0.3.3":"2015-02-16T11:34:45.456Z","0.3.5":"2015-04-07T14:35:18.231Z","0.4.0":"2017-01-04T13:23:32.414Z"},"homepage":"https://github.com/LateRoomsGroup/moonraker","keywords":["selenium","webdriver","bdd","parallel"],"repository":{"type":"git","url":"git+https://github.com/LateRoomsGroup/moonraker.git"},"bugs":{"url":"https://github.com/LateRoomsGroup/moonraker/issues"},"readmeFilename":"README.md","users":{"roudox":true,"dmarr":true,"jhal81":true}}