diff --git a/lib/webdriver.js b/lib/webdriver.js new file mode 100644 index 00000000..3428bb14 --- /dev/null +++ b/lib/webdriver.js @@ -0,0 +1,53 @@ +'use strict'; + +const fs = require('fs'); +const path = require('path'); +const { appendToContext } = require('macaca-reporter'); +const { sync: mkdir } = require('mkdirp'); +const { default: WebDriver } = require('webdriver'); + +module.exports.buildDriver = wd => { + let client; + const driver = wd.promiseChainRemote(); + + async function initDriver(options = {}) { + client = await WebDriver.newSession(options); + return driver; + } + + async function saveScreenshots(context) { + const reportspath = path.join(process.cwd(), 'report'); + const base64 = await client.takeScreenshot(); + const img = new Buffer(base64, 'base64'); + const filepath = path.join(reportspath, 'screenshots', `${Date.now()}.png`); + mkdir(path.dirname(filepath)); + fs.writeFileSync(filepath, img.toString('binary'), 'binary'); + appendToContext(context, `${path.relative(reportspath, filepath)}`); + } + + async function execute(code) { + return await client.executeScript(code, []); + } + + async function quit() { + await client.deleteSession(); + } + + async function initWindow() { + return driver; + } + + async function get(url) { + return await client.navigateTo(url); + } + + const { addPromiseChainMethod } = wd; + addPromiseChainMethod('initDriver', initDriver); + addPromiseChainMethod('saveScreenshots', saveScreenshots); + addPromiseChainMethod('execute', execute); + addPromiseChainMethod('quit', quit); + addPromiseChainMethod('initWindow', initWindow); + addPromiseChainMethod('get', get); + + return driver; +}; \ No newline at end of file diff --git a/package.json b/package.json index 5f910b67..9f062e78 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "macaca-wd", - "version": "3.4.2", + "version": "3.5.0", "description": "Macaca wd client", "keywords": [ "macaca", @@ -34,6 +34,7 @@ "request": "~2.85.0", "underscore.string": "~3.0.3", "vargs": "~0.1.0", + "webdriver": "^7.16.11", "webdriver-keycode": "^1.0.0", "xlogger": "^1.0.6", "xutil": "1"