rabbitmq-server/deps/rabbitmq_management/selenium/test/utils.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

102 lines
2.9 KiB
JavaScript
Raw Normal View History

2022-08-26 17:57:35 +08:00
const fs = require('fs')
const XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest
2022-08-26 17:57:35 +08:00
const fsp = fs.promises
const path = require('path')
2023-03-21 19:39:28 +08:00
const { By, Key, until, Builder, logging } = require('selenium-webdriver')
require('chromedriver')
const uaaUrl = process.env.UAA_URL || 'http://localhost:8080'
const baseUrl = process.env.RABBITMQ_URL || 'http://localhost:15672'
const runLocal = String(process.env.RUN_LOCAL).toLowerCase() != 'false'
const seleniumUrl = process.env.SELENIUM_URL || 'http://selenium:4444'
const screenshotsDir = process.env.SCREENSHOTS_DIR || '/screens'
2022-08-26 17:57:35 +08:00
class CaptureScreenshot {
driver
test
constructor (webdriver, test) {
2022-08-26 17:57:35 +08:00
this.driver = webdriver
this.test = test
}
async shot (name) {
const image = await driver.takeScreenshot()
const screenshotsSubDir = path.join(screenshotsDir, this.test)
2022-08-26 17:57:35 +08:00
if (!fs.existsSync(screenshotsSubDir)) {
await fsp.mkdir(screenshotsSubDir)
2022-08-26 17:57:35 +08:00
}
const dest = path.join(screenshotsSubDir, name + '.png')
await fsp.writeFile(dest, image, 'base64')
2022-08-26 17:57:35 +08:00
}
}
module.exports = {
buildDriver: (caps) => {
builder = new Builder()
2022-07-06 23:38:45 +08:00
if (!runLocal) {
builder = builder.usingServer(seleniumUrl)
2022-07-06 23:38:45 +08:00
}
return builder.forBrowser('chrome').build()
},
goToHome: (driver) => {
return driver.get(baseUrl)
2022-07-07 00:23:33 +08:00
},
goToLogin: (driver, token) => {
return driver.get(baseUrl + '/#/login?access_token=' + token)
},
goTo: (driver, address) => {
return driver.get(address)
},
2022-07-07 00:23:33 +08:00
delay: async (msec, ref) => {
return new Promise(resolve => {
setTimeout(resolve, msec, ref)
2022-07-07 00:23:33 +08:00
})
2022-08-26 17:57:35 +08:00
},
captureScreensFor: (driver, test) => {
return new CaptureScreenshot(driver, require('path').basename(test))
},
tokenFor: (client_id, client_secret) => {
const req = new XMLHttpRequest()
const url = uaaUrl + '/oauth/token'
const params = 'client_id=' + client_id +
'&client_secret=' + client_secret +
'&grant_type=client_credentials' +
'&token_format=jwt' +
'&response_type=token'
req.open('POST', url, false)
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
req.setRequestHeader('Accept', 'application/json')
req.send(params)
if (req.status == 200) return JSON.parse(req.responseText).access_token
else {
console.error(req.responseText)
throw new Error(req.responseText)
2022-08-26 17:57:35 +08:00
}
},
teardown: async (driver, test, captureScreen = null) => {
2023-03-21 19:39:28 +08:00
driver.manage().logs().get(logging.Type.BROWSER).then(function(entries) {
entries.forEach(function(entry) {
console.log('[%s] %s', entry.level.name, entry.message);
})
})
if (test.currentTest) {
if (test.currentTest.isPassed()) {
driver.executeScript('lambda-status=passed')
} else {
if (captureScreen != null) await captureScreen.shot('after-failed')
driver.executeScript('lambda-status=failed')
}
}
await driver.quit()
2022-07-07 00:23:33 +08:00
}
}