f89d55f10d
* Migrate from wd to selenium-webdriver * Add chaining for next-webdriver * Re-add browserStackLocal global for teardown * Add additional element methods * Use freshWindow helper for chrome * Add selenium-server * Add cross-env for windows compat * Fix single quote windows * Update production preload tests * Update preload tests count * Update CircleCi for testing other browsers * Update CI configs * Update config * Add browser.url command * Add more methods * Update xcode version * Make sure to add chromedriver to path * Add forceExit flag * Update config * Update config * Disable safari * Fix bug in test * Add teardown logging * Update jest teardown * Move testing ie11 to Azure * Update job names * Remove force exiting on long teardown * Update Azure config * Re-add safari testing with BrowserStack * Update config * Update prefetch tests for ie11 * Update prefetch for safari and ids for ie11 testing * trigger prefetching manually in ie
85 lines
2.1 KiB
JavaScript
85 lines
2.1 KiB
JavaScript
// my-custom-environment
|
|
const http = require('http')
|
|
const getPort = require('get-port')
|
|
const seleniumServer = require('selenium-standalone')
|
|
const NodeEnvironment = require('jest-environment-node')
|
|
|
|
const { BROWSER_NAME: browserName = 'chrome' } = process.env
|
|
|
|
const newTabPg = `
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>new tab</title>
|
|
</head>
|
|
<body>
|
|
<a href="about:blank" target="_blank" id="new">Click me</a>
|
|
</body>
|
|
</html>
|
|
`
|
|
|
|
class CustomEnvironment extends NodeEnvironment {
|
|
async setup() {
|
|
await super.setup()
|
|
// Since ie11 doesn't like dataURIs we have to spin up a
|
|
// server to handle the new tab page
|
|
this.server = http.createServer((req, res) => {
|
|
res.statusCode = 200
|
|
res.end(newTabPg)
|
|
})
|
|
const newTabPort = await getPort()
|
|
|
|
await new Promise((resolve, reject) => {
|
|
this.server.listen(newTabPort, err => {
|
|
if (err) return reject(err)
|
|
resolve()
|
|
})
|
|
})
|
|
|
|
let seleniumServerPort
|
|
|
|
if (browserName !== 'chrome') {
|
|
console.log('Installing selenium server')
|
|
await new Promise((resolve, reject) => {
|
|
seleniumServer.install(err => {
|
|
if (err) return reject(err)
|
|
resolve()
|
|
})
|
|
})
|
|
|
|
console.log('Starting selenium server')
|
|
await new Promise((resolve, reject) => {
|
|
seleniumServer.start((err, child) => {
|
|
if (err) return reject(err)
|
|
this.seleniumServer = child
|
|
resolve()
|
|
})
|
|
})
|
|
console.log('Started selenium server')
|
|
seleniumServerPort = 4444
|
|
}
|
|
|
|
this.global.wd = null
|
|
this.global._newTabPort = newTabPort
|
|
this.global.browserName = browserName
|
|
this.global.seleniumServerPort = seleniumServerPort
|
|
this.global.browserStackLocalId = global.browserStackLocalId
|
|
}
|
|
|
|
async teardown() {
|
|
await super.teardown()
|
|
|
|
if (this.server) {
|
|
this.server.close()
|
|
}
|
|
if (this.global.wd) {
|
|
await this.global.wd.quit()
|
|
}
|
|
// must come after wd.quit()
|
|
if (this.seleniumServer) {
|
|
this.seleniumServer.kill()
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = CustomEnvironment
|