510 lines
15 KiB
JavaScript
510 lines
15 KiB
JavaScript
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);
|
|
}
|
|
});
|
|
}
|
|
|
|
};
|
|
};
|