You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.8 KiB
141 lines
4.8 KiB
(function (factory) { |
|
if (typeof module === "object" && typeof module.exports === "object") { |
|
var v = factory(require, exports); |
|
if (v !== undefined) module.exports = v; |
|
} |
|
else if (typeof define === "function" && define.amd) { |
|
define(["require", "exports", "selenium-webdriver"], factory); |
|
} |
|
})(function (require, exports) { |
|
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
const $webdriver = require("selenium-webdriver"); |
|
class Driver { |
|
static get CHROME() { |
|
return 'chrome'; |
|
} |
|
; |
|
static get FIREFOX() { |
|
return 'firefox'; |
|
} |
|
; |
|
static get OPERA() { |
|
return 'opera'; |
|
} |
|
; |
|
static get IE() { |
|
return 'ie'; |
|
} |
|
; |
|
static get EDGE() { |
|
return 'edge'; |
|
} |
|
; |
|
static create(browserName, remoteUrl) { |
|
let capabilities = null; |
|
switch (browserName) { |
|
case this.CHROME: |
|
capabilities = $webdriver.Capabilities.chrome(); |
|
break; |
|
case this.IE: |
|
capabilities = $webdriver.Capabilities.ie(); |
|
break; |
|
case this.FIREFOX: |
|
capabilities = $webdriver.Capabilities.firefox(); |
|
break; |
|
case this.OPERA: |
|
capabilities = $webdriver.Capabilities.opera(); |
|
break; |
|
case this.EDGE: |
|
capabilities = $webdriver.Capabilities.edge(); |
|
break; |
|
default: |
|
throw new Error(`Can't find browswer name ${browserName}`); |
|
} |
|
let builder = new $webdriver.Builder(); |
|
if (remoteUrl !== void 0) { |
|
builder = builder.usingServer(remoteUrl); |
|
} |
|
return new Driver(builder |
|
.withCapabilities(capabilities) |
|
.build()); |
|
} |
|
constructor(driver) { |
|
this.driver = driver; |
|
} |
|
/** |
|
* Executes an async script in the browser. Provides 2 function: |
|
* - resolve |
|
* - reject |
|
* @param {string} script |
|
* @return {Promise<void>} |
|
*/ |
|
executeAsyncScript(script) { |
|
// return this.driver.executeAsyncScript('arguments[arguments.length - 1]()'); |
|
return this.driver.executeAsyncScript(` |
|
var __done = arguments[arguments.length - 1]; |
|
|
|
var resolve = function(data) { |
|
if(__done) __done({ success : true, data: data }); |
|
__done = null; |
|
}; |
|
|
|
var reject = function(error) { |
|
if(error instanceof Error) { |
|
var type = error.constructor.name || (/^\\s*function\\s+([^\\(\\s]*)\\s*/).exec(error.constructor.toString())[1] |
|
error = { type: type, name: error.name || '', message: error.message || '', stack: error.stack || '' }; |
|
} |
|
if(__done) __done({ success : false, _error: error }); |
|
__done = null; |
|
}; |
|
|
|
try { |
|
${script} |
|
} catch(error) { |
|
reject(error); |
|
} |
|
|
|
`).then((data) => { |
|
if (data.success) { |
|
return data.data; |
|
} |
|
else { |
|
let error = data._error; |
|
if (typeof error === 'object') { |
|
const type = (error.type in global) ? global[error.type] : Error; |
|
const _error = new type(error.message || ''); |
|
if (error.name && (error.name !== _error.name)) |
|
_error.name = error.name; |
|
// if(error.stack) _error.stack = error.stack; |
|
_error.stack = error.stack || `${error.name}: ${error.message}\n\tempty stack`; |
|
error = _error; |
|
} |
|
throw error; |
|
} |
|
}); |
|
} |
|
/** |
|
* Executes a script in the browser. |
|
* Can return a value with 'return' |
|
* @param {string} script |
|
* @return {Promise<void>} |
|
*/ |
|
executeScript(script) { |
|
return this.executeAsyncScript(`resolve( |
|
(function() { |
|
${script} |
|
})() |
|
);`); |
|
} |
|
navigate(url) { |
|
return this.driver.navigate().to(url); |
|
} |
|
ngNavigate(path) { |
|
return this.driver.executeScript(`return window.router.navigate(${JSON.stringify(path)});`); |
|
} |
|
quit() { |
|
return this.driver.quit(); |
|
} |
|
} |
|
exports.Driver = Driver; |
|
});
|
|
|