@christian-bromann/webdriverio
Version:
A nodejs bindings implementation for selenium 2.0/webdriver
142 lines (120 loc) • 4.58 kB
JavaScript
import { remote } from '../../../index.js'
import conf from '../../conf/index.js'
const tmpConf = {
desiredCapabilities: {
browserName: 'phantomjs'
}
}
describe('event handling', () => {
describe('is able to emit and listen to driver specific events and', () => {
let isCommandHandlerEmitted = false
let isErrorHandlerEmitted = false
let isInitHandlerEmitted = false
let isEndHandlerEmitted = false
let uri = null
let desiredCapabilties = null
let client
before(() => {
client = remote(tmpConf)
client.on('end', () => {
isEndHandlerEmitted = true
})
client.on('init', () => {
isInitHandlerEmitted = true
})
client.on('error', () => {
isErrorHandlerEmitted = true
})
client.on('command', (e) => {
// assign variables only on first command
if (isCommandHandlerEmitted) {
return
}
isCommandHandlerEmitted = true
desiredCapabilties = e.data.desiredCapabilities.browserName
uri = e.uri
})
})
it('should emit an init event after calling the init command', async () => {
await client.init()
isInitHandlerEmitted.should.be.true
uri.host.should.be.equal('127.0.0.1:4444')
desiredCapabilties.should.be.equal('phantomjs')
})
/**
* we don't throw error events anymore since they screw up the reporter
* output. Use onError handlers instead
*/
it.skip('should emit an error event after querying a non existing element', async () => {
await client.url(conf.testPage.start)
// click on non existing element to cause an error
try {
await client.click('#notExistent')
} catch (e) {}
isErrorHandlerEmitted.should.be.true
})
it('should emit an end event after calling the end command', async () => {
await client.end()
isEndHandlerEmitted.should.be.true
})
/**
* we don't throw error events anymore since they screw up the reporter
* output. Use onError handlers instead
*/
it.skip('should emit custom command events', async () => {
isErrorHandlerEmitted = false
client.addCommand('throwMe', () => {
throw new Error('uups')
})
try {
await client.throwMe()
} catch (e) {}
isErrorHandlerEmitted.should.be.true
})
})
describe('custom events', () => {
let iWasTriggered = false
let eventWasTriggeredAtLeastOnce = false
beforeEach(function () {
iWasTriggered = false
eventWasTriggeredAtLeastOnce = false
this.client.removeAllListeners('testme')
})
it('should register and fire events with on/emit', function () {
return this.client
.emit('testme')
.on('testme', async function () {
iWasTriggered.should.be.true
eventWasTriggeredAtLeastOnce = true
})
.call(function () {
iWasTriggered = true
})
.emit('testme')
.call(() => eventWasTriggeredAtLeastOnce.should.be.true)
})
it('should register and fire events with once/emit', function () {
return this.client
.once('testme', async function () {
iWasTriggered.should.be.true
eventWasTriggeredAtLeastOnce.should.be.false
eventWasTriggeredAtLeastOnce = true
})
.call(function () {
iWasTriggered = true
})
.emit('testme')
.emit('testme')
})
it('two instances should have different event handlers', async function () {
const clientA = remote(tmpConf)
const clientB = remote(tmpConf)
clientA.on('testme', (key) => key.should.be.equal('A'))
clientB.on('testme', (key) => key.should.be.equal('B'))
clientA.emit('testme', 'A')
clientB.emit('testme', 'B')
await clientA.end()
await clientB.end()
})
})
})