| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509 |
- var events = require('events');
- module.exports = function(client) {
- return {
- /**
- * Change focus to another window. The window to change focus to may be specified by its server assigned window handle, or by the value of its name attribute.
- *
- * To find out the window handle use `window_handles` protocol action
- *
- * ```
- * this.demoTest = function (browser) {
- * browser.window_handles(function(result) {
- * var handle = result.value[0];
- * browser.switchWindow(handle);
- * });
- * };
- * ```
- *
- * @method switchWindow
- * @param {string} handleOrName The server assigned window handle or the name attribute.
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @see window
- * @since v0.3.0
- * @api commands
- */
- switchWindow : function(handleOrName, callback) {
- var self = this;
- this.window('POST', handleOrName, function(result) {
- if (typeof callback === 'function') {
- callback.call(self, result);
- }
- });
- return this;
- },
- /**
- * Resizes the current window.
- *
- * ```
- * this.demoTest = function (browser) {
- * browser.resizeWindow(1000, 800);
- * };
- * ```
- *
- * @method resizeWindow
- * @param {number} width The new window width.
- * @param {number} height The new window height.
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @see windowSize
- * @since v0.3.0
- * @api commands
- */
- resizeWindow : function(width, height, callback) {
- var self = this;
- return this.windowSize('current', width, height, function(result) {
- if (typeof callback === 'function') {
- callback.call(self, result);
- }
- });
- },
- /**
- * Sets the current window position.
- *
- * ```
- * this.demoTest = function (browser) {
- * browser.setWindowPosition(0, 0);
- * };
- * ```
- *
- * @method setWindowPosition
- * @param {number} offsetX The new window offset x-position.
- * @param {number} offsetY The new window offset y-position.
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @see windowPosition
- * @since v0.8.18
- * @api commands
- */
- setWindowPosition : function(offsetX, offsetY, callback) {
- var self = this;
- return this.windowPosition('current', offsetX, offsetY, function(result) {
- if (typeof callback === 'function') {
- callback.call(self, result);
- }
- });
- },
- /**
- * Maximizes the current window.
- *
- * ```
- * this.demoTest = function (browser) {
- * browser.maximizeWindow();
- * };
- * ```
- *
- * @method maximizeWindow
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @see windowMaximize
- * @since v0.5.13
- * @api commands
- */
- maximizeWindow: function(callback) {
- var self = this;
- return this.windowMaximize('current', function(result) {
- if (typeof callback === 'function') {
- callback.call(self, result);
- }
- });
- },
- /**
- * Take a screenshot of the current page and saves it as the given filename.
- *
- * ```
- * this.demoTest = function (browser) {
- * browser.saveScreenshot('/path/to/fileName.png');
- * };
- * ```
- *
- * @method saveScreenshot
- * @param {string} fileName The complete path to the file name where the screenshot should be saved.
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @see screenshot
- * @api commands
- */
- saveScreenshot : function(fileName, callback) {
- var self = this;
- return this.screenshot(client.api.options.log_screenshot_data, function(result) {
- client.saveScreenshotToFile(fileName, result.value, function(err) {
- if (typeof callback === 'function') {
- callback.call(self, result, err);
- }
- });
- });
- },
- /**
- * Returns the title of the current page. Uses title protocol command.
- *
- * ```
- * this.demoTest = function (browser) {
- * browser.getTitle(function(title) {
- * this.assert.equal(typeof title, 'string');
- * this.assert.equal(title, 'Nightwatch.js');
- * });
- * };
- * ```
- *
- * @method getTitle
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @see title
- * @returns {string} The page title.
- * @api commands
- */
- getTitle : function(callback) {
- var self = this;
- return this.title(function(result) {
- callback.call(self, result.value);
- });
- },
- /**
- * Close the current window. This can be useful when you're working with multiple windows open (e.g. an OAuth login).
- * Uses `window` protocol command.
- *
- * ```
- * this.demoTest = function (client) {
- * client.closeWindow();
- * };
- * ```
- *
- * @method closeWindow
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @see window
- * @since v0.3.0
- * @api commands
- */
- closeWindow : function(callback) {
- var self = this;
- return this.window('DELETE', function(result) {
- if (typeof callback === 'function') {
- callback.call(self, result);
- }
- });
- },
- /**
- * This command is an alias to url and also a convenience method when called without any arguments in the sense that it performs a call to .url() with passing the value of `launch_url` field from the settings file.
- * Uses `url` protocol command.
- *
- * ```
- * this.demoTest = function (client) {
- * client.init();
- * };
- * ```
- *
- * @method init
- * @param {string} [url] Url to navigate to.
- * @see url
- * @since v0.4.0
- * @api commands
- */
- init : function(url) {
- if (url) {
- return this.url(url);
- }
- if (!this.launchUrl) {
- return this;
- }
- return this.url(this.launchUrl);
- },
- /**
- * Convenience method that adds the specified hash (i.e. url fragment) to the current value of the `launch_url` as set in `nightwatch.json`.
- *
- * ```
- * this.demoTest = function (client) {
- * client.urlHash('#hashvalue');
- * // or
- * client.urlHash('hashvalue');
- * };
- * ```
- *
- * @method urlHash
- * @param {string} hash The hash to add/replace to the current url (i.e. the value set in the launch_url property in nightwatch.json).
- * @see url
- * @since v0.4.0
- * @api commands
- */
- urlHash : function(hash) {
- if (hash.charAt(0) === '#') {
- hash = hash.substring(1);
- }
- return this.url(this.launchUrl + '#' + hash);
- },
- /**
- * Retrieve all cookies visible to the current page. The cookies are returned as an array of cookie JSON object, as defined [here](https://code.google.com/p/selenium/wiki/JsonWireProtocol#Cookie_JSON_Object).
- *
- * Uses `cookie` protocol command.
- *
- * ```
- * this.demoTest = function(browser) {
- * browser.getCookies(function callback(result) {
- * this.assert.equal(result.value.length, 1);
- * this.assert.equals(result.value[0].name, 'test_cookie');
- * });
- * }
- * ```
- *
- * @method getCookies
- * @param {function} callback The callback function which will receive the response as an argument.
- * @api commands
- * @since v0.4.0
- * @see cookie
- * @returns {Array.<object>} A list of cookies.
- */
- getCookies : function(callback) {
- return this.cookie('GET', callback);
- },
- /**
- * Retrieve a single cookie visible to the current page. The cookie is returned as a cookie JSON object, as defined [here](https://code.google.com/p/selenium/wiki/JsonWireProtocol#Cookie_JSON_Object).
- *
- * Uses `cookie` protocol command.
- *
- * ```
- * this.demoTest = function(browser) {
- * browser.getCookie(name, function callback(result) {
- * this.assert.equal(result.value, '123456');
- * this.assert.equals(result.name, 'test_cookie');
- * });
- * }
- * ```
- *
- * @method getCookie
- * @param {string} name The cookie name.
- * @param {function} callback The callback function which will receive the response as an argument.
- * @api commands
- * @since v0.4.0
- * @see cookie
- * @returns {object|null} The cookie object as a selenium cookie JSON object or null if the cookie wasn't found.
- */
- getCookie : function(name, callback) {
- var self = this;
- return this.cookie('GET', function(result) {
- if (!result.value || result.value.length === 0) {
- callback.call(self, null);
- return;
- }
- var cookie = null;
- for (var i = 0; i < result.value.length; i++) {
- if (result.value[i].name === name) {
- cookie = result.value[i];
- break;
- }
- }
- callback.call(self, cookie);
- });
- },
- /**
- * Set a cookie, specified as a cookie JSON object, as defined [here](https://code.google.com/p/selenium/wiki/JsonWireProtocol#Cookie_JSON_Object).
- *
- * Uses `cookie` protocol command.
- *
- * ```
- * this.demoTest = function(browser) {
- * browser.setCookie({
- * name : "test_cookie",
- * value : "test_value",
- * path : "/", (Optional)
- * domain : "example.org", (Optional)
- * secure : false, (Optional)
- * httpOnly : false, // (Optional)
- * expiry : 1395002765 // (Optional) time in seconds since midnight, January 1, 1970 UTC
- * });
- * }
- * ```
- *
- * @method setCookie
- * @param {object} cookie The cookie object.
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @api commands
- * @since v0.4.0
- * @see cookie
- */
- setCookie : function(cookie, callback) {
- return this.cookie('POST', cookie, callback);
- },
- /**
- * Delete the cookie with the given name. This command is a no-op if there is no such cookie visible to the current page.
- *
- * ```
- * this.demoTest = function(browser) {
- * browser.deleteCookie("test_cookie", function() {
- * // do something more in here
- * });
- * }
- * ```
- *
- * @method deleteCookie
- * @param cookieName The name of the cookie to delete.
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @api commands
- * @since v0.4.0
- * @see cookie
- */
- deleteCookie : function(cookieName, callback) {
- return this.cookie('DELETE', cookieName, callback);
- },
- /**
- * Delete all cookies visible to the current page.
- *
- * ```
- * this.demoTest = function(browser) {
- * browser.deleteCookies(function() {
- * // do something more in here
- * });
- * }
- * ```
- *
- * @method deleteCookies
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @api commands
- * @since v0.4.0
- * @see cookie
- */
- deleteCookies : function(callback) {
- return this.cookie('DELETE', callback);
- },
- /**
- * Utility command to load an external script into the page specified by url.
- *
- * ```
- * this.demoTest = function(client) {
- * this.injectScript('http://example.org/js/utility.js', function() {
- * // we're all done here.
- * });
- * };
- * ```
- *
- * @method injectScript
- * @param {string} scriptUrl The script file url
- * @param {string} [id] Dom element id to be set on the script tag.
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @api commands
- * @since v0.4.0
- * @returns {HTMLScriptElement} The newly created script tag.
- */
- injectScript : function(scriptUrl, id, callback) {
- var args = [scriptUrl];
- if (arguments.length == 2 && typeof arguments[1] == 'function') {
- callback = arguments[1];
- } else if (typeof id == 'string') {
- args.push(id);
- }
- return this.execute(function(u,i) {/* jshint browser:true */return (function(d){var e=d.createElement('script');var m=d.getElementsByTagName('head')[0];e.src=u;if(i){e.id=i;}m.appendChild(e);return e;})(document);}, args, callback);
- },
-
- /**
- * Gets the available log types
- *
- * ```
- * this.demoTest = function(client) {
- * this.getLogTypes(function(typesArray) {
- *
- * });
- * };
- * ```
- *
- * @method getLogTypes
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @api commands
- * @see logTypes
- */
- getLogTypes: function(callback) {
- var self = this;
- return this.sessionLogTypes(function(response) {
- if (callback) {
- callback.call(self, response.value);
- }
- });
- },
-
- /**
- * Gets a log from selenium
- *
- * ```
- * this.demoTest = function(client) {
- * this.getLog('browser', function(logEntriesArray) {
- * console.log('Log length: ' + logEntriesArray.length);
- * logEntriesArray.forEach(function(log) {
- * console.log('[' + log.level + '] ' + log.timestamp + ' : ' + log.message);
- * });
- * });
- * };
- * ```
- *
- * @method getLog
- * @param {string|function} typeString Log type to request
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @api commands
- * @see log
- */
- getLog: function(typeString, callback) {
- var self = this;
- if (typeof typeString !== 'string') {
- if (typeof typeString === 'function') {
- callback = typeString;
- }
- typeString = 'browser';
- }
- return this.sessionLog(typeString, function (response) {
- if (callback) {
- callback.call(self, response.value);
- }
- });
- },
-
- /**
- * Utility command to test if the log type is available
- *
- * ```
- * this.demoTest = function(browser) {
- * browser.isLogAvailable('browser', function(isAvailable) {
- * // do something more in here
- * });
- * }
- * ```
- *
- * @method isLogAvailable
- * @param {string|function} typeString Type of log to test
- * @param {function} [callback] Optional callback function to be called when the command finishes.
- * @api commands
- * @see getLogTypes
- */
- isLogAvailable: function(typeString, callback) {
- var self = this;
- if (typeof typeString !== 'string') {
- if (typeof typeString === 'function') {
- callback = typeString;
- }
- typeString = 'browser';
- }
- return this.getLogTypes(function (types) {
- var isAvailable;
- try {
- isAvailable = Array.isArray(types) && types.indexOf(typeString) >= 0;
- } catch (err) {
- isAvailable = false;
- }
- if (callback) {
- callback.call(self, isAvailable);
- }
- });
- }
- };
- };
|