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
+
+})();