capybara-webkit/src/capybara.js

72 lines
1.8 KiB
JavaScript
Raw Normal View History

Capybara = {
nextIndex: 0,
nodes: {},
invoke: function () {
return this[CapybaraInvocation.functionName].apply(this, CapybaraInvocation.arguments);
},
find: function (xpath) {
2011-02-26 21:46:59 +00:00
return this.findRelativeTo(document, xpath);
},
findWithin: function (index, xpath) {
return this.findRelativeTo(this.nodes[index], xpath);
},
findRelativeTo: function (reference, xpath) {
var iterator = document.evaluate(xpath, reference, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
var node;
var results = [];
while (node = iterator.iterateNext()) {
this.nextIndex++;
this.nodes[this.nextIndex] = node;
results.push(this.nextIndex);
}
return results.join(",");
},
text: function (index) {
return this.nodes[index].innerText;
},
attribute: function (index, name) {
return this.nodes[index].getAttribute(name);
2011-02-26 19:55:40 +00:00
},
tagName: function(index) {
2011-02-26 20:04:34 +00:00
return this.nodes[index].tagName.toLowerCase();
2011-02-26 20:18:11 +00:00
},
click: function (index) {
var clickEvent = document.createEvent('MouseEvents');
clickEvent.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
this.nodes[index].dispatchEvent(clickEvent);
2011-02-26 20:50:45 +00:00
},
trigger: function (index, eventName) {
var eventObject = document.createEvent("HTMLEvents");
eventObject.initEvent(eventName, true, true);
this.nodes[index].dispatchEvent(eventObject);
2011-02-26 21:20:05 +00:00
},
visible: function (index) {
var element = this.nodes[index];
while (element) {
if (element.style.display == 'none')
return false;
element = element.parentElement;
}
return true;
2011-02-26 20:48:44 +00:00
},
value: function(index) {
return this.nodes[index].value;
2011-02-26 21:26:22 +00:00
},
set: function(index, value) {
this.nodes[index].value = value;
}
};