mouse.js
2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
var utils = require('utils');
exports.create = function(casper) {
return new Mouse(casper);
};
var Mouse = function(casper) {
if (!utils.isCasperObject(casper)) {
throw new Error('Mouse() needs a Casper instance');
}
var supportedEvents = ['mouseup', 'mousedown', 'click', 'mousemove'];
var computeCenter = function(selector) {
var bounds = casper.getElementBounds(selector);
if (utils.isClipRect(bounds)) {
var x = Math.round(bounds.left + bounds.width / 2);
var y = Math.round(bounds.top + bounds.height / 2);
return [x, y];
}
};
var processEvent = function(type, args) {
if (!utils.isString(type) || supportedEvents.indexOf(type) === -1) {
throw new Error('Unsupported mouse event type: ' + type);
}
args = Array.prototype.slice.call(args); // cast Arguments -> Array
switch (args.length) {
case 0:
throw new Error('Too few arguments');
case 1:
// selector
var selector = args[0];
if (!utils.isString(selector)) {
throw new Error('No valid CSS selector passed: ' + selector);
}
casper.page.sendEvent.apply(casper.page, [type].concat(computeCenter(selector)))
break;
case 2:
// coordinates
if (!utils.isNumber(args[1]) || !utils.isNumber(args[2])) {
throw new Error('No valid coordinates passed');
}
casper.page.sendEvent(type, args[0], args[1])
break;
default:
throw new Error('Too many arguments');
}
};
this.click = function() {
processEvent('click', arguments);
},
this.down = function() {
processEvent('mousedown', arguments);
},
this.move = function() {
processEvent('mousemove', arguments);
},
this.up = function() {
processEvent('mouseup', arguments);
}
};
exports.Mouse = Mouse;