lib/capybara/poltergeist/client/compiled/browser.js in poltergeist-0.6.0 vs lib/capybara/poltergeist/client/compiled/browser.js in poltergeist-0.7.0

- old
+ new

@@ -1,170 +1,185 @@ -var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __slice = Array.prototype.slice; + Poltergeist.Browser = (function() { - function Browser(owner) { + + function Browser(owner, width, height) { this.owner = owner; + this.width = width || 1024; + this.height = height || 768; this.state = 'default'; this.page_id = 0; this.resetPage(); } + Browser.prototype.resetPage = function() { + var _this = this; if (this.page != null) { this.page.release(); } - this.page = new Poltergeist.WebPage; - this.page.onLoadStarted = __bind(function() { - if (this.state === 'clicked') { - return this.state = 'loading'; + this.page = new Poltergeist.WebPage(this.width, this.height); + this.page.onLoadStarted = function() { + if (_this.state === 'clicked') { + return _this.state = 'loading'; } - }, this); - this.page.onLoadFinished = __bind(function(status) { - if (this.state === 'loading') { - this.sendResponse(status); - return this.state = 'default'; + }; + this.page.onNavigationRequested = function(url, navigation) { + if (_this.state === 'clicked' && navigation === 'FormSubmitted') { + return _this.state = 'loading'; } - }, this); - return this.page.onInitialized = __bind(function() { - return this.page_id += 1; - }, this); + }; + this.page.onLoadFinished = function(status) { + if (_this.state === 'loading') { + _this.sendResponse(status); + return _this.state = 'default'; + } + }; + return this.page.onInitialized = function() { + return _this.page_id += 1; + }; }; + Browser.prototype.sendResponse = function(response) { var errors; errors = this.page.errors(); if (errors.length > 0) { this.page.clearErrors(); - return this.owner.sendError(new Poltergeist.JavascriptError(errors)); + throw new Poltergeist.JavascriptError(errors); } else { return this.owner.sendResponse(response); } }; - Browser.prototype.getNode = function(page_id, id, callback) { + + Browser.prototype.node = function(page_id, id) { if (page_id === this.page_id) { - return callback.call(this, this.page.get(id)); + return this.page.get(id); } else { - return this.owner.sendError(new Poltergeist.ObsoleteNode); + throw new Poltergeist.ObsoleteNode; } }; - Browser.prototype.nodeCall = function() { - var args, callback, fn, id, page_id; - page_id = arguments[0], id = arguments[1], fn = arguments[2], args = 4 <= arguments.length ? __slice.call(arguments, 3) : []; - callback = args.pop(); - return this.getNode(page_id, id, function(node) { - var result; - result = node[fn].apply(node, args); - if (result instanceof Poltergeist.ObsoleteNode) { - return this.owner.sendError(result); - } else { - return callback.call(this, result, node); - } + + Browser.prototype.visit = function(url, headers) { + this.state = 'loading'; + return this.page.open(url, { + operation: "get", + headers: headers }); }; - Browser.prototype.visit = function(url) { - this.state = 'loading'; - return this.page.open(url); - }; + Browser.prototype.current_url = function() { return this.sendResponse(this.page.currentUrl()); }; + + Browser.prototype.status_code = function() { + return this.sendResponse(this.page.statusCode()); + }; + Browser.prototype.body = function() { return this.sendResponse(this.page.content()); }; + Browser.prototype.source = function() { return this.sendResponse(this.page.source()); }; + Browser.prototype.find = function(selector) { return this.sendResponse({ page_id: this.page_id, ids: this.page.find(selector) }); }; + Browser.prototype.find_within = function(page_id, id, selector) { - return this.nodeCall(page_id, id, 'find', selector, this.sendResponse); + return this.sendResponse(this.node(page_id, id).find(selector)); }; + Browser.prototype.text = function(page_id, id) { - return this.nodeCall(page_id, id, 'text', this.sendResponse); + return this.sendResponse(this.node(page_id, id).text()); }; + Browser.prototype.attribute = function(page_id, id, name) { - return this.nodeCall(page_id, id, 'getAttribute', name, this.sendResponse); + return this.sendResponse(this.node(page_id, id).getAttribute(name)); }; + Browser.prototype.value = function(page_id, id) { - return this.nodeCall(page_id, id, 'value', this.sendResponse); + return this.sendResponse(this.node(page_id, id).value()); }; + Browser.prototype.set = function(page_id, id, value) { - return this.nodeCall(page_id, id, 'set', value, function() { - return this.sendResponse(true); - }); + this.node(page_id, id).set(value); + return this.sendResponse(true); }; + Browser.prototype.select_file = function(page_id, id, value) { - return this.nodeCall(page_id, id, 'isMultiple', function(multiple, node) { - if (multiple) { - node.removeAttribute('multiple'); - } - node.setAttribute('_poltergeist_selected', ''); - this.page.uploadFile('[_poltergeist_selected]', value); - node.removeAttribute('_poltergeist_selected'); - if (multiple) { - node.setAttribute('multiple', 'multiple'); - } - return this.sendResponse(true); - }); + var node; + node = this.node(page_id, id); + node.setAttribute('_poltergeist_selected', ''); + this.page.uploadFile('[_poltergeist_selected]', value); + node.removeAttribute('_poltergeist_selected'); + return this.sendResponse(true); }; + Browser.prototype.select = function(page_id, id, value) { - return this.nodeCall(page_id, id, 'select', value, this.sendResponse); + return this.sendResponse(this.node(page_id, id).select(value)); }; + Browser.prototype.tag_name = function(page_id, id) { - return this.nodeCall(page_id, id, 'tagName', this.sendResponse); + return this.sendResponse(this.node(page_id, id).tagName()); }; + Browser.prototype.visible = function(page_id, id) { - return this.nodeCall(page_id, id, 'isVisible', this.sendResponse); + return this.sendResponse(this.node(page_id, id).isVisible()); }; + Browser.prototype.evaluate = function(script) { - return this.sendResponse(JSON.parse(this.page.evaluate("function() { return JSON.stringify(" + script + ") }"))); + return this.sendResponse(this.page.evaluate("function() { return " + script + " }")); }; + Browser.prototype.execute = function(script) { this.page.execute("function() { " + script + " }"); return this.sendResponse(true); }; + Browser.prototype.push_frame = function(id) { this.page.pushFrame(id); return this.sendResponse(true); }; + Browser.prototype.pop_frame = function() { this.page.popFrame(); return this.sendResponse(true); }; + Browser.prototype.click = function(page_id, id) { - return this.nodeCall(page_id, id, 'isObsolete', function(obsolete, node) { - var click; - this.state = 'clicked'; - click = node.click(); - return setTimeout(__bind(function() { - if (this.state === 'clicked') { - this.state = 'default'; - if (click instanceof Poltergeist.ClickFailed) { - return this.owner.sendError(click); - } else { - return this.sendResponse(true); - } - } - }, this), 10); - }); + var node; + node = this.node(page_id, id); + this.state = 'clicked'; + node.click(); + if (this.state !== 'loading') { + this.state = 'default'; + return this.sendResponse(true); + } }; + Browser.prototype.drag = function(page_id, id, other_id) { - return this.nodeCall(page_id, id, 'isObsolete', function(obsolete, node) { - node.dragTo(this.page.get(other_id)); - return this.sendResponse(true); - }); + this.node(page_id, id).dragTo(this.node(page_id, other_id)); + return this.sendResponse(true); }; + Browser.prototype.trigger = function(page_id, id, event) { - return this.nodeCall(page_id, id, 'trigger', event, function() { - return this.sendResponse(event); - }); + this.node(page_id, id).trigger(event); + return this.sendResponse(event); }; + + Browser.prototype.equals = function(page_id, id, other_id) { + return this.sendResponse(this.node(page_id, id).isEqual(this.node(page_id, other_id))); + }; + Browser.prototype.reset = function() { this.resetPage(); return this.sendResponse(true); }; + Browser.prototype.render = function(path, full) { var dimensions, document, viewport; dimensions = this.page.validatedDimensions(); document = dimensions.document; viewport = dimensions.viewport; @@ -193,18 +208,31 @@ }); this.page.render(path); } return this.sendResponse(true); }; + Browser.prototype.resize = function(width, height) { this.page.setViewportSize({ width: width, height: height }); return this.sendResponse(true); }; + + Browser.prototype.network_traffic = function() { + return this.sendResponse(this.page.networkTraffic()); + }; + Browser.prototype.exit = function() { return phantom.exit(); }; + Browser.prototype.noop = function() {}; + + Browser.prototype.browser_error = function() { + throw new Error('zomg'); + }; + return Browser; -})(); \ No newline at end of file + +})();