webdriverjs
Version:
A nodejs bindings implementation for selenium 2.0/webdriver
140 lines (119 loc) • 4.74 kB
JavaScript
var webdriverjs = require('../../index.js'),
conf = require('../conf/index.js'),
tmpConf = { desiredCapabilities: { browserName: 'phantomjs' }},
client;
describe('event handling', function () {
describe('test webdriverjs events (init/command/error/end)', function () {
var isCommandHandlerEmitted = false,
isErrorHandlerEmitted = false,
isInitHandlerEmitted = false,
isEndHandlerEmitted = false,
commandUrl = null,
desiredCapabilties = null,
client;
before(function() {
client = webdriverjs.remote(tmpConf);
client.on('end', function() {
isEndHandlerEmitted = true;
})
client.on('init', function() {
isInitHandlerEmitted = true;
})
client.on('error', function() {
isErrorHandlerEmitted = true;
})
client.on('command', function(e) {
// assign variables only on first command
if(isCommandHandlerEmitted) {
return;
}
isCommandHandlerEmitted = true;
desiredCapabilties = e.data.desiredCapabilities.browserName;
commandUrl = e.uri;
})
});
it('should emit an init event and therefore an command event as well',function(done) {
client
.init()
.call(function() {
assert.ok(isInitHandlerEmitted,'init handler wasn\'t called');
assert.strictEqual(commandUrl,'http://127.0.0.1:4444/wd/hub/session');
assert.strictEqual(desiredCapabilties,'phantomjs');
})
.call(done);
});
it.skip('should emit an error event', function(done) {
client
.url(conf.testPage.start)
// click on non existing element to cause an error
.click('#notExistentant')
.call(function() {
assert.ok(isErrorHandlerEmitted,'error handler wasn\'t called');
})
.call(done);
});
it('should emit an end event', function(done) {
client
.end()
.call(function() {
assert.ok(isEndHandlerEmitted,'end handler wasn\'t called');
})
.call(done);
});
});
describe('costume events', function() {
var iShouldBeGetTriggered = false,
eventWasTriggeredAtLeastOnce = false;
before(h.setup);
beforeEach(function() {
iShouldBeGetTriggered = false;
eventWasTriggeredAtLeastOnce = false;
this.client.removeAllListeners('testme');
})
it('should register and fire events with on/emit', function(done) {
this.client
.emit('testme')
.on('testme', function() {
assert.ok(iShouldBeGetTriggered,'event was triggered unexpected');
eventWasTriggeredAtLeastOnce = true;
})
.call(function() {
iShouldBeGetTriggered = true;
})
.emit('testme')
.call(function() {
if(eventWasTriggeredAtLeastOnce) {
done();
} else {
done(new Error('event wasn\'t thrown'));
}
})
});
it('should register and fire events with once/emit', function(done) {
this.client
.once('testme', function() {
assert.ok(iShouldBeGetTriggered,'event was triggered unexpected');
assert.ok(!eventWasTriggeredAtLeastOnce, 'once event got triggered twice');
eventWasTriggeredAtLeastOnce = true;
})
.call(function() {
iShouldBeGetTriggered = true;
})
.emit('testme')
.emit('testme')
.call(done);
});
it('two instances should have different event handlers', function() {
var clientA = webdriverjs.remote(tmpConf);
var clientB = webdriverjs.remote(tmpConf);
clientA.on('testme', function(key) {
assert.strictEqual(key,'A');
});
clientB.on('testme', function(key) {
assert.strictEqual(key,'B');
})
clientA.emit('testme','A');
clientB.emit('testme','B');
})
})
});