poltergeist 1.5.1 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -13
- data/LICENSE +1 -1
- data/README.md +15 -44
- data/lib/capybara/poltergeist/browser.rb +58 -10
- data/lib/capybara/poltergeist/client.rb +2 -2
- data/lib/capybara/poltergeist/client/agent.coffee +46 -10
- data/lib/capybara/poltergeist/client/browser.coffee +160 -117
- data/lib/capybara/poltergeist/client/compiled/agent.js +60 -10
- data/lib/capybara/poltergeist/client/compiled/browser.js +208 -137
- data/lib/capybara/poltergeist/client/compiled/main.js +40 -2
- data/lib/capybara/poltergeist/client/compiled/node.js +7 -2
- data/lib/capybara/poltergeist/client/compiled/web_page.js +172 -111
- data/lib/capybara/poltergeist/client/main.coffee +10 -1
- data/lib/capybara/poltergeist/client/node.coffee +8 -4
- data/lib/capybara/poltergeist/client/web_page.coffee +139 -94
- data/lib/capybara/poltergeist/driver.rb +36 -2
- data/lib/capybara/poltergeist/errors.rb +8 -2
- data/lib/capybara/poltergeist/inspector.rb +1 -1
- data/lib/capybara/poltergeist/network_traffic/response.rb +1 -1
- data/lib/capybara/poltergeist/node.rb +12 -0
- data/lib/capybara/poltergeist/version.rb +1 -1
- metadata +44 -31
@@ -44,7 +44,7 @@ PoltergeistAgent = (function() {
|
|
44
44
|
};
|
45
45
|
|
46
46
|
PoltergeistAgent.prototype.currentUrl = function() {
|
47
|
-
return encodeURI(window.location.href);
|
47
|
+
return encodeURI(decodeURI(window.location.href));
|
48
48
|
};
|
49
49
|
|
50
50
|
PoltergeistAgent.prototype.find = function(method, selector, within) {
|
@@ -89,8 +89,8 @@ PoltergeistAgent = (function() {
|
|
89
89
|
|
90
90
|
PoltergeistAgent.prototype.documentSize = function() {
|
91
91
|
return {
|
92
|
-
height: document.documentElement.scrollHeight,
|
93
|
-
width: document.documentElement.scrollWidth
|
92
|
+
height: document.documentElement.scrollHeight || document.documentElement.clientHeight,
|
93
|
+
width: document.documentElement.scrollWidth || document.documentElement.clientWidth
|
94
94
|
};
|
95
95
|
};
|
96
96
|
|
@@ -116,6 +116,10 @@ PoltergeistAgent = (function() {
|
|
116
116
|
return this.get(id).removeAttribute('_poltergeist_selected');
|
117
117
|
};
|
118
118
|
|
119
|
+
PoltergeistAgent.prototype.clearLocalStorage = function() {
|
120
|
+
return localStorage.clear();
|
121
|
+
};
|
122
|
+
|
119
123
|
return PoltergeistAgent;
|
120
124
|
|
121
125
|
})();
|
@@ -145,7 +149,8 @@ PoltergeistAgent.InvalidSelector = (function() {
|
|
145
149
|
PoltergeistAgent.Node = (function() {
|
146
150
|
Node.EVENTS = {
|
147
151
|
FOCUS: ['blur', 'focus', 'focusin', 'focusout'],
|
148
|
-
MOUSE: ['click', 'dblclick', 'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'mouseover', 'mouseout', 'mouseup']
|
152
|
+
MOUSE: ['click', 'dblclick', 'mousedown', 'mouseenter', 'mouseleave', 'mousemove', 'mouseover', 'mouseout', 'mouseup', 'contextmenu'],
|
153
|
+
FORM: ['submit']
|
149
154
|
};
|
150
155
|
|
151
156
|
function Node(agent, element) {
|
@@ -157,6 +162,17 @@ PoltergeistAgent.Node = (function() {
|
|
157
162
|
return this.agent.register(this.element.parentNode);
|
158
163
|
};
|
159
164
|
|
165
|
+
Node.prototype.parentIds = function() {
|
166
|
+
var ids, parent;
|
167
|
+
ids = [];
|
168
|
+
parent = this.element.parentNode;
|
169
|
+
while (parent !== document) {
|
170
|
+
ids.push(this.agent.register(parent));
|
171
|
+
parent = parent.parentNode;
|
172
|
+
}
|
173
|
+
return ids;
|
174
|
+
};
|
175
|
+
|
160
176
|
Node.prototype.find = function(method, selector) {
|
161
177
|
return this.agent.find(method, selector, this.element);
|
162
178
|
};
|
@@ -226,10 +242,12 @@ PoltergeistAgent.Node = (function() {
|
|
226
242
|
};
|
227
243
|
|
228
244
|
Node.prototype.visibleText = function() {
|
229
|
-
if (this.
|
230
|
-
|
231
|
-
|
232
|
-
|
245
|
+
if (this.isVisible()) {
|
246
|
+
if (this.element.nodeName === "TEXTAREA") {
|
247
|
+
return this.element.textContent;
|
248
|
+
} else {
|
249
|
+
return this.element.innerText;
|
250
|
+
}
|
233
251
|
}
|
234
252
|
};
|
235
253
|
|
@@ -237,10 +255,22 @@ PoltergeistAgent.Node = (function() {
|
|
237
255
|
var range;
|
238
256
|
range = document.createRange();
|
239
257
|
range.selectNodeContents(this.element);
|
258
|
+
window.getSelection().removeAllRanges();
|
240
259
|
window.getSelection().addRange(range);
|
241
260
|
return window.getSelection().deleteFromDocument();
|
242
261
|
};
|
243
262
|
|
263
|
+
Node.prototype.getAttributes = function() {
|
264
|
+
var attr, attrs, i, _i, _len, _ref;
|
265
|
+
attrs = {};
|
266
|
+
_ref = this.element.attributes;
|
267
|
+
for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
|
268
|
+
attr = _ref[i];
|
269
|
+
attrs[attr.name] = attr.value.replace("\n", "\\n");
|
270
|
+
}
|
271
|
+
return attrs;
|
272
|
+
};
|
273
|
+
|
244
274
|
Node.prototype.getAttribute = function(name) {
|
245
275
|
if (name === 'checked' || name === 'selected') {
|
246
276
|
return this.element[name];
|
@@ -340,6 +370,18 @@ PoltergeistAgent.Node = (function() {
|
|
340
370
|
return this.element.disabled || this.element.tagName === 'OPTION' && this.element.parentNode.disabled;
|
341
371
|
};
|
342
372
|
|
373
|
+
Node.prototype.containsSelection = function() {
|
374
|
+
var selectedNode;
|
375
|
+
selectedNode = document.getSelection().focusNode;
|
376
|
+
if (!selectedNode) {
|
377
|
+
return false;
|
378
|
+
}
|
379
|
+
if (selectedNode.nodeType === 3) {
|
380
|
+
selectedNode = selectedNode.parentNode;
|
381
|
+
}
|
382
|
+
return this.element.contains(selectedNode);
|
383
|
+
};
|
384
|
+
|
343
385
|
Node.prototype.frameOffset = function() {
|
344
386
|
var offset, rect, style, win;
|
345
387
|
win = window;
|
@@ -381,14 +423,22 @@ PoltergeistAgent.Node = (function() {
|
|
381
423
|
event = document.createEvent('MouseEvent');
|
382
424
|
event.initMouseEvent(name, true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
383
425
|
} else if (Node.EVENTS.FOCUS.indexOf(name) !== -1) {
|
384
|
-
event =
|
385
|
-
|
426
|
+
event = this.obtainEvent(name);
|
427
|
+
} else if (Node.EVENTS.FORM.indexOf(name) !== -1) {
|
428
|
+
event = this.obtainEvent(name);
|
386
429
|
} else {
|
387
430
|
throw "Unknown event";
|
388
431
|
}
|
389
432
|
return this.element.dispatchEvent(event);
|
390
433
|
};
|
391
434
|
|
435
|
+
Node.prototype.obtainEvent = function(name) {
|
436
|
+
var event;
|
437
|
+
event = document.createEvent('HTMLEvents');
|
438
|
+
event.initEvent(name, true, true);
|
439
|
+
return event;
|
440
|
+
};
|
441
|
+
|
392
442
|
Node.prototype.mouseEventTest = function(x, y) {
|
393
443
|
var el, frameOffset, origEl;
|
394
444
|
frameOffset = this.frameOffset();
|
@@ -1,67 +1,53 @@
|
|
1
|
+
var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
|
2
|
+
|
1
3
|
Poltergeist.Browser = (function() {
|
2
4
|
function Browser(owner, width, height) {
|
3
5
|
this.owner = owner;
|
4
6
|
this.width = width || 1024;
|
5
7
|
this.height = height || 768;
|
6
|
-
this.
|
7
|
-
this.page_stack = [];
|
8
|
-
this.page_id = 0;
|
8
|
+
this.pages = [];
|
9
9
|
this.js_errors = true;
|
10
10
|
this._debug = false;
|
11
|
+
this._counter = 0;
|
11
12
|
this.resetPage();
|
12
13
|
}
|
13
14
|
|
14
15
|
Browser.prototype.resetPage = function() {
|
15
|
-
var
|
16
|
+
var _ref,
|
17
|
+
_this = this;
|
18
|
+
_ref = [0, []], this._counter = _ref[0], this.pages = _ref[1];
|
16
19
|
if (this.page != null) {
|
17
|
-
this.page.
|
20
|
+
if (!this.page.closed) {
|
21
|
+
if (this.page.currentUrl() !== 'about:blank') {
|
22
|
+
this.page.clearLocalStorage();
|
23
|
+
}
|
24
|
+
this.page.release();
|
25
|
+
}
|
18
26
|
phantom.clearCookies();
|
19
27
|
}
|
20
|
-
this.page = new Poltergeist.WebPage;
|
28
|
+
this.page = this.currentPage = new Poltergeist.WebPage;
|
21
29
|
this.page.setViewportSize({
|
22
30
|
width: this.width,
|
23
31
|
height: this.height
|
24
32
|
});
|
25
|
-
this.page.
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
return _this.setState('loading');
|
33
|
-
}
|
34
|
-
};
|
35
|
-
this.page.onLoadFinished = function(status) {
|
36
|
-
if (_this.state === 'loading') {
|
37
|
-
_this.sendResponse({
|
38
|
-
status: status,
|
39
|
-
position: _this.last_mouse_event
|
40
|
-
});
|
41
|
-
return _this.setState('default');
|
42
|
-
} else if (_this.state === 'awaiting_frame_load') {
|
43
|
-
_this.sendResponse(true);
|
44
|
-
return _this.setState('default');
|
45
|
-
}
|
46
|
-
};
|
47
|
-
this.page.onInitialized = function() {
|
48
|
-
return _this.page_id += 1;
|
49
|
-
};
|
50
|
-
return this.page.onPageCreated = function(sub_page) {
|
51
|
-
var name;
|
52
|
-
if (_this.state === 'awaiting_sub_page') {
|
53
|
-
name = _this.page_name;
|
54
|
-
_this.page_name = null;
|
55
|
-
_this.setState('default');
|
56
|
-
return setTimeout((function() {
|
57
|
-
return _this.push_window(name);
|
58
|
-
}), 0);
|
59
|
-
}
|
33
|
+
this.page.handle = "" + (this._counter++);
|
34
|
+
this.pages.push(this.page);
|
35
|
+
return this.page.onPageCreated = function(newPage) {
|
36
|
+
var page;
|
37
|
+
page = new Poltergeist.WebPage(newPage);
|
38
|
+
page.handle = "" + (_this._counter++);
|
39
|
+
return _this.pages.push(page);
|
60
40
|
};
|
61
41
|
};
|
62
42
|
|
43
|
+
Browser.prototype.getPageByHandle = function(handle) {
|
44
|
+
return this.pages.filter(function(p) {
|
45
|
+
return !p.closed && p.handle === handle;
|
46
|
+
})[0];
|
47
|
+
};
|
48
|
+
|
63
49
|
Browser.prototype.runCommand = function(name, args) {
|
64
|
-
this.
|
50
|
+
this.currentPage.state = 'default';
|
65
51
|
return this[name].apply(this, args);
|
66
52
|
};
|
67
53
|
|
@@ -71,18 +57,10 @@ Poltergeist.Browser = (function() {
|
|
71
57
|
}
|
72
58
|
};
|
73
59
|
|
74
|
-
Browser.prototype.setState = function(state) {
|
75
|
-
if (this.state === state) {
|
76
|
-
return;
|
77
|
-
}
|
78
|
-
this.debug("state " + this.state + " -> " + state);
|
79
|
-
return this.state = state;
|
80
|
-
};
|
81
|
-
|
82
60
|
Browser.prototype.sendResponse = function(response) {
|
83
61
|
var errors;
|
84
|
-
errors = this.
|
85
|
-
this.
|
62
|
+
errors = this.currentPage.errors;
|
63
|
+
this.currentPage.clearErrors();
|
86
64
|
if (errors.length > 0 && this.js_errors) {
|
87
65
|
return this.owner.sendError(new Poltergeist.JavascriptError(errors));
|
88
66
|
} else {
|
@@ -91,53 +69,66 @@ Poltergeist.Browser = (function() {
|
|
91
69
|
};
|
92
70
|
|
93
71
|
Browser.prototype.add_extension = function(extension) {
|
94
|
-
this.
|
72
|
+
this.currentPage.injectExtension(extension);
|
95
73
|
return this.sendResponse('success');
|
96
74
|
};
|
97
75
|
|
98
76
|
Browser.prototype.node = function(page_id, id) {
|
99
|
-
if (
|
100
|
-
return this.
|
77
|
+
if (this.currentPage.id === page_id) {
|
78
|
+
return this.currentPage.get(id);
|
101
79
|
} else {
|
102
80
|
throw new Poltergeist.ObsoleteNode;
|
103
81
|
}
|
104
82
|
};
|
105
83
|
|
106
84
|
Browser.prototype.visit = function(url) {
|
107
|
-
var
|
108
|
-
|
109
|
-
|
110
|
-
this.
|
111
|
-
|
112
|
-
|
113
|
-
|
85
|
+
var prevUrl,
|
86
|
+
_this = this;
|
87
|
+
this.currentPage.state = 'loading';
|
88
|
+
prevUrl = this.currentPage.source === null ? 'about:blank' : this.currentPage.currentUrl();
|
89
|
+
this.currentPage.open(url);
|
90
|
+
if (/#/.test(url) && prevUrl.split('#')[0] === url.split('#')[0]) {
|
91
|
+
this.currentPage.state = 'default';
|
92
|
+
return this.sendResponse({
|
93
|
+
status: 'success'
|
94
|
+
});
|
95
|
+
} else {
|
96
|
+
return this.currentPage.waitState('default', function() {
|
97
|
+
if (_this.currentPage.statusCode === null && _this.currentPage.status === 'fail') {
|
98
|
+
return _this.owner.sendError(new Poltergeist.StatusFailError);
|
99
|
+
} else {
|
100
|
+
return _this.sendResponse({
|
101
|
+
status: _this.currentPage.status
|
102
|
+
});
|
103
|
+
}
|
104
|
+
});
|
114
105
|
}
|
115
106
|
};
|
116
107
|
|
117
108
|
Browser.prototype.current_url = function() {
|
118
|
-
return this.sendResponse(this.
|
109
|
+
return this.sendResponse(this.currentPage.currentUrl());
|
119
110
|
};
|
120
111
|
|
121
112
|
Browser.prototype.status_code = function() {
|
122
|
-
return this.sendResponse(this.
|
113
|
+
return this.sendResponse(this.currentPage.statusCode);
|
123
114
|
};
|
124
115
|
|
125
116
|
Browser.prototype.body = function() {
|
126
|
-
return this.sendResponse(this.
|
117
|
+
return this.sendResponse(this.currentPage.content());
|
127
118
|
};
|
128
119
|
|
129
120
|
Browser.prototype.source = function() {
|
130
|
-
return this.sendResponse(this.
|
121
|
+
return this.sendResponse(this.currentPage.source);
|
131
122
|
};
|
132
123
|
|
133
124
|
Browser.prototype.title = function() {
|
134
|
-
return this.sendResponse(this.
|
125
|
+
return this.sendResponse(this.currentPage.title());
|
135
126
|
};
|
136
127
|
|
137
128
|
Browser.prototype.find = function(method, selector) {
|
138
129
|
return this.sendResponse({
|
139
|
-
page_id: this.
|
140
|
-
ids: this.
|
130
|
+
page_id: this.currentPage.id,
|
131
|
+
ids: this.currentPage.find(method, selector)
|
141
132
|
});
|
142
133
|
};
|
143
134
|
|
@@ -161,6 +152,14 @@ Poltergeist.Browser = (function() {
|
|
161
152
|
return this.sendResponse(this.node(page_id, id).getAttribute(name));
|
162
153
|
};
|
163
154
|
|
155
|
+
Browser.prototype.attributes = function(page_id, id, name) {
|
156
|
+
return this.sendResponse(this.node(page_id, id).getAttributes());
|
157
|
+
};
|
158
|
+
|
159
|
+
Browser.prototype.parents = function(page_id, id) {
|
160
|
+
return this.sendResponse(this.node(page_id, id).parentIds());
|
161
|
+
};
|
162
|
+
|
164
163
|
Browser.prototype.value = function(page_id, id) {
|
165
164
|
return this.sendResponse(this.node(page_id, id).value());
|
166
165
|
};
|
@@ -173,9 +172,9 @@ Poltergeist.Browser = (function() {
|
|
173
172
|
Browser.prototype.select_file = function(page_id, id, value) {
|
174
173
|
var node;
|
175
174
|
node = this.node(page_id, id);
|
176
|
-
this.
|
177
|
-
this.
|
178
|
-
this.
|
175
|
+
this.currentPage.beforeUpload(node.id);
|
176
|
+
this.currentPage.uploadFile('[_poltergeist_selected]', value);
|
177
|
+
this.currentPage.afterUpload(node.id);
|
179
178
|
return this.sendResponse(true);
|
180
179
|
};
|
181
180
|
|
@@ -196,22 +195,32 @@ Poltergeist.Browser = (function() {
|
|
196
195
|
};
|
197
196
|
|
198
197
|
Browser.prototype.evaluate = function(script) {
|
199
|
-
return this.sendResponse(this.
|
198
|
+
return this.sendResponse(this.currentPage.evaluate("function() { return " + script + " }"));
|
200
199
|
};
|
201
200
|
|
202
201
|
Browser.prototype.execute = function(script) {
|
203
|
-
this.
|
202
|
+
this.currentPage.execute("function() { " + script + " }");
|
204
203
|
return this.sendResponse(true);
|
205
204
|
};
|
206
205
|
|
206
|
+
Browser.prototype.frameUrl = function(frame_name) {
|
207
|
+
return this.currentPage.frameUrl(frame_name);
|
208
|
+
};
|
209
|
+
|
207
210
|
Browser.prototype.push_frame = function(name, timeout) {
|
208
|
-
var
|
211
|
+
var _ref,
|
212
|
+
_this = this;
|
209
213
|
if (timeout == null) {
|
210
214
|
timeout = new Date().getTime() + 2000;
|
211
215
|
}
|
212
|
-
if (this.
|
213
|
-
|
214
|
-
|
216
|
+
if (_ref = this.frameUrl(name), __indexOf.call(this.currentPage.blockedUrls(), _ref) >= 0) {
|
217
|
+
return this.sendResponse(true);
|
218
|
+
} else if (this.currentPage.pushFrame(name)) {
|
219
|
+
if (this.currentPage.currentUrl() === 'about:blank') {
|
220
|
+
this.currentPage.state = 'awaiting_frame_load';
|
221
|
+
return this.currentPage.waitState('default', function() {
|
222
|
+
return _this.sendResponse(true);
|
223
|
+
});
|
215
224
|
} else {
|
216
225
|
return this.sendResponse(true);
|
217
226
|
}
|
@@ -226,55 +235,83 @@ Poltergeist.Browser = (function() {
|
|
226
235
|
}
|
227
236
|
};
|
228
237
|
|
229
|
-
Browser.prototype.
|
230
|
-
return this.sendResponse(this.
|
238
|
+
Browser.prototype.pop_frame = function() {
|
239
|
+
return this.sendResponse(this.currentPage.popFrame());
|
240
|
+
};
|
241
|
+
|
242
|
+
Browser.prototype.window_handles = function() {
|
243
|
+
var handles;
|
244
|
+
handles = this.pages.filter(function(p) {
|
245
|
+
return !p.closed;
|
246
|
+
}).map(function(p) {
|
247
|
+
return p.handle;
|
248
|
+
});
|
249
|
+
return this.sendResponse(handles);
|
231
250
|
};
|
232
251
|
|
233
|
-
Browser.prototype.
|
234
|
-
|
252
|
+
Browser.prototype.window_handle = function(name) {
|
253
|
+
var handle, page;
|
254
|
+
if (name == null) {
|
255
|
+
name = null;
|
256
|
+
}
|
257
|
+
handle = name ? (page = this.pages.filter(function(p) {
|
258
|
+
return !p.closed && p.windowName() === name;
|
259
|
+
})[0], page ? page.handle : null) : this.currentPage.handle;
|
260
|
+
return this.sendResponse(handle);
|
235
261
|
};
|
236
262
|
|
237
|
-
Browser.prototype.
|
238
|
-
var
|
263
|
+
Browser.prototype.switch_to_window = function(handle) {
|
264
|
+
var page,
|
239
265
|
_this = this;
|
240
|
-
|
241
|
-
if (
|
242
|
-
if (
|
243
|
-
return
|
244
|
-
|
245
|
-
return _this.
|
246
|
-
};
|
266
|
+
page = this.getPageByHandle(handle);
|
267
|
+
if (page) {
|
268
|
+
if (page !== this.currentPage) {
|
269
|
+
return page.waitState('default', function() {
|
270
|
+
_this.currentPage = page;
|
271
|
+
return _this.sendResponse(true);
|
272
|
+
});
|
247
273
|
} else {
|
248
|
-
this.page_stack.push(this.page);
|
249
|
-
this.page = sub_page;
|
250
|
-
this.page_id += 1;
|
251
274
|
return this.sendResponse(true);
|
252
275
|
}
|
253
276
|
} else {
|
254
|
-
|
255
|
-
return this.setState('awaiting_sub_page');
|
277
|
+
throw new Poltergeist.NoSuchWindowError;
|
256
278
|
}
|
257
279
|
};
|
258
280
|
|
259
|
-
Browser.prototype.
|
260
|
-
|
261
|
-
prev_page = this.page_stack.pop();
|
262
|
-
if (prev_page) {
|
263
|
-
this.page = prev_page;
|
264
|
-
}
|
281
|
+
Browser.prototype.open_new_window = function() {
|
282
|
+
this.execute('window.open()');
|
265
283
|
return this.sendResponse(true);
|
266
284
|
};
|
267
285
|
|
286
|
+
Browser.prototype.close_window = function(handle) {
|
287
|
+
var page;
|
288
|
+
page = this.getPageByHandle(handle);
|
289
|
+
if (page) {
|
290
|
+
page.release();
|
291
|
+
return this.sendResponse(true);
|
292
|
+
} else {
|
293
|
+
return this.sendResponse(false);
|
294
|
+
}
|
295
|
+
};
|
296
|
+
|
268
297
|
Browser.prototype.mouse_event = function(page_id, id, name) {
|
269
298
|
var node,
|
270
299
|
_this = this;
|
271
300
|
node = this.node(page_id, id);
|
272
|
-
this.
|
301
|
+
this.currentPage.state = 'mouse_event';
|
273
302
|
this.last_mouse_event = node.mouseEvent(name);
|
274
303
|
return setTimeout(function() {
|
275
|
-
if (_this.state
|
276
|
-
_this.
|
277
|
-
return _this.sendResponse(
|
304
|
+
if (_this.currentPage.state === 'mouse_event') {
|
305
|
+
_this.currentPage.state = 'default';
|
306
|
+
return _this.sendResponse({
|
307
|
+
position: _this.last_mouse_event
|
308
|
+
});
|
309
|
+
} else {
|
310
|
+
return _this.currentPage.waitState('default', function() {
|
311
|
+
return _this.sendResponse({
|
312
|
+
position: _this.last_mouse_event
|
313
|
+
});
|
314
|
+
});
|
278
315
|
}
|
279
316
|
}, 5);
|
280
317
|
};
|
@@ -283,6 +320,10 @@ Poltergeist.Browser = (function() {
|
|
283
320
|
return this.mouse_event(page_id, id, 'click');
|
284
321
|
};
|
285
322
|
|
323
|
+
Browser.prototype.right_click = function(page_id, id) {
|
324
|
+
return this.mouse_event(page_id, id, 'rightclick');
|
325
|
+
};
|
326
|
+
|
286
327
|
Browser.prototype.double_click = function(page_id, id) {
|
287
328
|
return this.mouse_event(page_id, id, 'doubleclick');
|
288
329
|
};
|
@@ -292,7 +333,7 @@ Poltergeist.Browser = (function() {
|
|
292
333
|
};
|
293
334
|
|
294
335
|
Browser.prototype.click_coordinates = function(x, y) {
|
295
|
-
this.
|
336
|
+
this.currentPage.sendEvent('click', x, y);
|
296
337
|
return this.sendResponse({
|
297
338
|
click: {
|
298
339
|
x: x,
|
@@ -321,7 +362,7 @@ Poltergeist.Browser = (function() {
|
|
321
362
|
};
|
322
363
|
|
323
364
|
Browser.prototype.scroll_to = function(left, top) {
|
324
|
-
this.
|
365
|
+
this.currentPage.setScrollPosition({
|
325
366
|
left: left,
|
326
367
|
top: top
|
327
368
|
});
|
@@ -329,12 +370,15 @@ Poltergeist.Browser = (function() {
|
|
329
370
|
};
|
330
371
|
|
331
372
|
Browser.prototype.send_keys = function(page_id, id, keys) {
|
332
|
-
var key, sequence, _i, _len;
|
333
|
-
this.node(page_id, id)
|
373
|
+
var key, sequence, target, _i, _len;
|
374
|
+
target = this.node(page_id, id);
|
375
|
+
if (!target.containsSelection()) {
|
376
|
+
target.mouseEvent('click');
|
377
|
+
}
|
334
378
|
for (_i = 0, _len = keys.length; _i < _len; _i++) {
|
335
379
|
sequence = keys[_i];
|
336
|
-
key = sequence.key != null ? this.
|
337
|
-
this.
|
380
|
+
key = sequence.key != null ? this.currentPage.keyCode(sequence.key) : sequence;
|
381
|
+
this.currentPage.sendEvent('keypress', key);
|
338
382
|
}
|
339
383
|
return this.sendResponse(true);
|
340
384
|
};
|
@@ -345,7 +389,7 @@ Poltergeist.Browser = (function() {
|
|
345
389
|
selector = null;
|
346
390
|
}
|
347
391
|
this.set_clip_rect(full, selector);
|
348
|
-
encoded_image = this.
|
392
|
+
encoded_image = this.currentPage.renderBase64(format);
|
349
393
|
return this.sendResponse(encoded_image);
|
350
394
|
};
|
351
395
|
|
@@ -355,12 +399,12 @@ Poltergeist.Browser = (function() {
|
|
355
399
|
selector = null;
|
356
400
|
}
|
357
401
|
dimensions = this.set_clip_rect(full, selector);
|
358
|
-
this.
|
402
|
+
this.currentPage.setScrollPosition({
|
359
403
|
left: 0,
|
360
404
|
top: 0
|
361
405
|
});
|
362
|
-
this.
|
363
|
-
this.
|
406
|
+
this.currentPage.render(path);
|
407
|
+
this.currentPage.setScrollPosition({
|
364
408
|
left: dimensions.left,
|
365
409
|
top: dimensions.top
|
366
410
|
});
|
@@ -369,30 +413,35 @@ Poltergeist.Browser = (function() {
|
|
369
413
|
|
370
414
|
Browser.prototype.set_clip_rect = function(full, selector) {
|
371
415
|
var dimensions, document, rect, viewport, _ref;
|
372
|
-
dimensions = this.
|
416
|
+
dimensions = this.currentPage.validatedDimensions();
|
373
417
|
_ref = [dimensions.document, dimensions.viewport], document = _ref[0], viewport = _ref[1];
|
374
418
|
rect = full ? {
|
375
419
|
left: 0,
|
376
420
|
top: 0,
|
377
421
|
width: document.width,
|
378
422
|
height: document.height
|
379
|
-
} : selector != null ? this.
|
423
|
+
} : selector != null ? this.currentPage.elementBounds(selector) : {
|
380
424
|
left: 0,
|
381
425
|
top: 0,
|
382
426
|
width: viewport.width,
|
383
427
|
height: viewport.height
|
384
428
|
};
|
385
|
-
this.
|
429
|
+
this.currentPage.setClipRect(rect);
|
386
430
|
return dimensions;
|
387
431
|
};
|
388
432
|
|
389
433
|
Browser.prototype.set_paper_size = function(size) {
|
390
|
-
this.
|
434
|
+
this.currentPage.setPaperSize(size);
|
435
|
+
return this.sendResponse(true);
|
436
|
+
};
|
437
|
+
|
438
|
+
Browser.prototype.set_zoom_factor = function(zoom_factor) {
|
439
|
+
this.currentPage.setZoomFactor(zoom_factor);
|
391
440
|
return this.sendResponse(true);
|
392
441
|
};
|
393
442
|
|
394
443
|
Browser.prototype.resize = function(width, height) {
|
395
|
-
this.
|
444
|
+
this.currentPage.setViewportSize({
|
396
445
|
width: width,
|
397
446
|
height: height
|
398
447
|
});
|
@@ -400,29 +449,29 @@ Poltergeist.Browser = (function() {
|
|
400
449
|
};
|
401
450
|
|
402
451
|
Browser.prototype.network_traffic = function() {
|
403
|
-
return this.sendResponse(this.
|
452
|
+
return this.sendResponse(this.currentPage.networkTraffic());
|
404
453
|
};
|
405
454
|
|
406
455
|
Browser.prototype.clear_network_traffic = function() {
|
407
|
-
this.
|
456
|
+
this.currentPage.clearNetworkTraffic();
|
408
457
|
return this.sendResponse(true);
|
409
458
|
};
|
410
459
|
|
411
460
|
Browser.prototype.get_headers = function() {
|
412
|
-
return this.sendResponse(this.
|
461
|
+
return this.sendResponse(this.currentPage.getCustomHeaders());
|
413
462
|
};
|
414
463
|
|
415
464
|
Browser.prototype.set_headers = function(headers) {
|
416
465
|
if (headers['User-Agent']) {
|
417
|
-
this.
|
466
|
+
this.currentPage.setUserAgent(headers['User-Agent']);
|
418
467
|
}
|
419
|
-
this.
|
468
|
+
this.currentPage.setCustomHeaders(headers);
|
420
469
|
return this.sendResponse(true);
|
421
470
|
};
|
422
471
|
|
423
472
|
Browser.prototype.add_headers = function(headers) {
|
424
473
|
var allHeaders, name, value;
|
425
|
-
allHeaders = this.
|
474
|
+
allHeaders = this.currentPage.getCustomHeaders();
|
426
475
|
for (name in headers) {
|
427
476
|
value = headers[name];
|
428
477
|
allHeaders[name] = value;
|
@@ -432,17 +481,17 @@ Poltergeist.Browser = (function() {
|
|
432
481
|
|
433
482
|
Browser.prototype.add_header = function(header, permanent) {
|
434
483
|
if (!permanent) {
|
435
|
-
this.
|
484
|
+
this.currentPage.addTempHeader(header);
|
436
485
|
}
|
437
486
|
return this.add_headers(header);
|
438
487
|
};
|
439
488
|
|
440
489
|
Browser.prototype.response_headers = function() {
|
441
|
-
return this.sendResponse(this.
|
490
|
+
return this.sendResponse(this.currentPage.responseHeaders());
|
442
491
|
};
|
443
492
|
|
444
493
|
Browser.prototype.cookies = function() {
|
445
|
-
return this.sendResponse(this.
|
494
|
+
return this.sendResponse(this.currentPage.cookies());
|
446
495
|
};
|
447
496
|
|
448
497
|
Browser.prototype.set_cookie = function(cookie) {
|
@@ -451,7 +500,12 @@ Poltergeist.Browser = (function() {
|
|
451
500
|
};
|
452
501
|
|
453
502
|
Browser.prototype.remove_cookie = function(name) {
|
454
|
-
this.
|
503
|
+
this.currentPage.deleteCookie(name);
|
504
|
+
return this.sendResponse(true);
|
505
|
+
};
|
506
|
+
|
507
|
+
Browser.prototype.clear_cookies = function() {
|
508
|
+
phantom.clearCookies();
|
455
509
|
return this.sendResponse(true);
|
456
510
|
};
|
457
511
|
|
@@ -461,7 +515,7 @@ Poltergeist.Browser = (function() {
|
|
461
515
|
};
|
462
516
|
|
463
517
|
Browser.prototype.set_http_auth = function(user, password) {
|
464
|
-
this.
|
518
|
+
this.currentPage.setHttpAuth(user, password);
|
465
519
|
return this.sendResponse(true);
|
466
520
|
};
|
467
521
|
|
@@ -486,16 +540,33 @@ Poltergeist.Browser = (function() {
|
|
486
540
|
};
|
487
541
|
|
488
542
|
Browser.prototype.go_back = function() {
|
489
|
-
|
490
|
-
|
543
|
+
var _this = this;
|
544
|
+
if (this.currentPage.canGoBack) {
|
545
|
+
this.currentPage.state = 'loading';
|
546
|
+
this.currentPage.goBack();
|
547
|
+
return this.currentPage.waitState('default', function() {
|
548
|
+
return _this.sendResponse(true);
|
549
|
+
});
|
550
|
+
} else {
|
551
|
+
return this.sendResponse(false);
|
491
552
|
}
|
492
|
-
return this.sendResponse(true);
|
493
553
|
};
|
494
554
|
|
495
555
|
Browser.prototype.go_forward = function() {
|
496
|
-
|
497
|
-
|
556
|
+
var _this = this;
|
557
|
+
if (this.currentPage.canGoForward) {
|
558
|
+
this.currentPage.state = 'loading';
|
559
|
+
this.currentPage.goForward();
|
560
|
+
return this.currentPage.waitState('default', function() {
|
561
|
+
return _this.sendResponse(true);
|
562
|
+
});
|
563
|
+
} else {
|
564
|
+
return this.sendResponse(false);
|
498
565
|
}
|
566
|
+
};
|
567
|
+
|
568
|
+
Browser.prototype.set_url_blacklist = function() {
|
569
|
+
this.currentPage.urlBlacklist = Array.prototype.slice.call(arguments);
|
499
570
|
return this.sendResponse(true);
|
500
571
|
};
|
501
572
|
|