diff --git a/.travis.yml b/.travis.yml index 08ae0d1..b9e743a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,9 @@ language: node_js sudo: false node_js: - - "4" - - "5" + - "6" + - "8" + - "10" env: global: diff --git a/README.md b/README.md index 533b08f..50727a5 100644 --- a/README.md +++ b/README.md @@ -11,18 +11,8 @@ You can view the full list of commands in [`lib/index.ts`](lib/index.ts#L8). Usage ----- -If you are using a versoin of `selenium-webdriver` below `3.0.0-beta-1`, you -must use the `patch()` function before you create your webdriver instance: +Use WebDriver JS Extender's `extend` function on your webdriver instance: -```js -require('webdriver-js-extender').patch( - require('selenium-webdriver/lib/command'), - require('selenium-webdriver/executors'), - require('selenium-webdriver/http')); -``` - -Once you've patched `selenium-webdriver` (or if you're using version `3.x`), all -you need to do is run the `extend` function on your webdriver instance: ```js var extendedWebdriver = require('webdriver-js-extender').extend(webdriver); diff --git a/lib/index.ts b/lib/index.ts index f2d59ee..9567dc1 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -2,7 +2,6 @@ import {promise as wdpromise, WebDriver} from 'selenium-webdriver'; import {CommandDefinition} from './command_definition'; import * as commandDefinitions from './command_definitions'; -import {DeferredExecutor} from './deferred_executor'; import {Extender} from './extender'; export interface ExtendedWebDriver extends WebDriver { @@ -155,34 +154,3 @@ export function extend(baseDriver: WebDriver, fallbackGracefully = false): Exten return extendedDriver; } - -/** - * Patches webdriver so that the extender can defie new commands. - * - * @example - * patch(require('selenium-webdriver/lib/command'), - * require('selenium-webdriver/executors'), - * require('selenium-webdriver/http')); - * - * @param {*} lib_command The object at 'selenium-webdriver/lib/command' - * @param {*} executors The object at 'selenium-webdriver/executors' - * @param {*} http The object at 'selenium-webdriver/http' - */ -export function patch(lib_command: any, executors: any, http: any) { - if (lib_command.DeferredExecutor === undefined) { - throw new Error( - 'The version of `selenium-webdriver` you provided does ' + - 'not use Deferred Executors. Are you using version 3.x or above? If ' + - 'so, you do not need to call the `patch()` function.'); - } - lib_command.DeferredExecutor = DeferredExecutor; - executors.DeferredExecutor = DeferredExecutor; - // Based off of - // https://github.com/SeleniumHQ/selenium/blob/selenium-2.53.0/javascript/node/selenium-webdriver/executors.js#L45 - executors.createExecutor = (url: any, opt_agent?: any, opt_proxy?: any) => { - return new DeferredExecutor(wdpromise.when(url, (url: any) => { - var client = new http.HttpClient(url, opt_agent, opt_proxy); - return new http.Executor(client); - })); - }; -} diff --git a/package.json b/package.json index 4e34ba1..6660646 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "webdriver-js-extender", - "version": "1.0.0", + "version": "2.0.0", "description": "A plugin which adds additional commands to selenium's javascript implementation of the webdriver client side API", "scripts": { "prepublish": "gulp prepublish", @@ -22,13 +22,11 @@ "license": "MIT", "typings": "built/lib/index.d.ts", "dependencies": { - "@types/selenium-webdriver": "^2.53.35", - "selenium-webdriver": "^2.53.2" + "@types/selenium-webdriver": "^3.0.0", + "selenium-webdriver": "^3.0.1" }, "devDependencies": { - "@types/es6-promise": "0.0.32", "@types/jasmine": "^2.5.37", - "@types/node": "^6.0.46", "clang-format": "^1.0.42", "gulp": "^3.9.1", "gulp-clang-format": "^1.0.23", @@ -37,5 +35,8 @@ "run-sequence": "^1.2.2", "selenium-mock": "^0.1.5", "typescript": "^2.0.0" + }, + "engines": { + "node": ">=6.9.x" } } diff --git a/spec/command_tests/helpers.ts b/spec/command_tests/helpers.ts index b2115ba..b924165 100644 --- a/spec/command_tests/helpers.ts +++ b/spec/command_tests/helpers.ts @@ -5,7 +5,7 @@ import {MockAppium} from '../mock-server'; import {Session, CommandList} from '../mock-server/interfaces'; import {session as commandList} from '../mock-server/commands'; import {Command} from 'selenium-mock'; -import {extend, patch, ExtendedWebDriver} from '../../lib'; +import {extend, ExtendedWebDriver} from '../../lib'; let portfinder = require('portfinder'); @@ -28,9 +28,6 @@ export function initMockSeleniumStandaloneServerAndGetDriverFactory(annotateComm let server: MockAppium; let port: number; beforeAll((done) => { - patch(require('selenium-webdriver/lib/command'), - require('selenium-webdriver/executors'), - require('selenium-webdriver/http')); portfinder.getPort((err: Error, p: number) => { if (err) { done.fail(err); diff --git a/spec/command_tests/normal_spec.ts b/spec/command_tests/normal_spec.ts index 65350ae..371df68 100644 --- a/spec/command_tests/normal_spec.ts +++ b/spec/command_tests/normal_spec.ts @@ -106,7 +106,7 @@ describe('normal tests', () => { }).then((fileContents) => { expect(fileContents).toBe('bar'); return driver.pullFolderFromDevice('/tmp/wd_js_ext/folder'); - }).then((folderContents) => { + }).then((folderContents: any) => { expect(folderContents['a.txt']).toBe('x'); expect(folderContents['b.txt']).toBe('y'); expect(folderContents['c.txt']).toBe('z'); diff --git a/spec/deferred_executor_spec.ts b/spec/deferred_executor_spec.ts deleted file mode 100644 index 355947c..0000000 --- a/spec/deferred_executor_spec.ts +++ /dev/null @@ -1,52 +0,0 @@ -import * as webdriver from 'selenium-webdriver'; -import {DeferredExecutor} from '../lib/deferred_executor'; - - -describe('Deferred Executor', () => { - function makeExecutor(done: Function) { - return { - execute: (command: any) => { - expect(command).toBe('command'); - done(); - }, - defineCommand: (name: string, method: string, path: string) => { - expect(name).toBe('name'); - expect(method).toBe('method'); - expect(path).toBe('path'); - done(); - } - }; - }; - - it('should call execute on pending executors', (done) => { - let deferred = webdriver.promise.defer(); - var deferredExecutor = new DeferredExecutor(deferred.promise); - - deferredExecutor.execute('command'); - deferred.fulfill(makeExecutor(done)); - }); - - it('should call execute on fulfilled executors', (done) => { - let deferred = webdriver.promise.defer(); - var deferredExecutor = new DeferredExecutor(deferred.promise); - - deferred.fulfill(makeExecutor(done)); - deferredExecutor.execute('command'); - }); - - it('should call defineCommand on pending executors', (done) => { - let deferred = webdriver.promise.defer(); - var deferredExecutor = new DeferredExecutor(deferred.promise); - - deferredExecutor.defineCommand('name', 'method', 'path'); - deferred.fulfill(makeExecutor(done)); - }); - - it('should call defineCommand on fulfilled executors', (done) => { - let deferred = webdriver.promise.defer(); - var deferredExecutor = new DeferredExecutor(deferred.promise); - - deferred.fulfill(makeExecutor(done)); - deferredExecutor.defineCommand('name', 'method', 'path'); - }); -}); diff --git a/spec/index_spec.ts b/spec/index_spec.ts index 8e6b603..fee2a68 100644 --- a/spec/index_spec.ts +++ b/spec/index_spec.ts @@ -1,6 +1,5 @@ import * as webdriver from 'selenium-webdriver'; -import {extend, patch} from '../lib'; -import {DeferredExecutor} from '../lib/deferred_executor'; +import {extend} from '../lib'; import {buildMockDriver, Data} from './mockdriver'; @@ -28,12 +27,4 @@ describe('extender', () => { done(); }); }); - - it('should patch selenium-webdriver', () => { - patch(require('selenium-webdriver/lib/command'), - require('selenium-webdriver/executors'), - require('selenium-webdriver/http')); - expect(require('selenium-webdriver/executors').createExecutor( - 'http://localhost')).toEqual(jasmine.any(DeferredExecutor)); - }); }); diff --git a/spec/mockdriver.ts b/spec/mockdriver.ts index 7ed543b..a11f3b2 100644 --- a/spec/mockdriver.ts +++ b/spec/mockdriver.ts @@ -1,5 +1,5 @@ import * as webdriver from 'selenium-webdriver'; -let buildPath = require('selenium-webdriver/http').buildPath; +let buildPath = require('selenium-webdriver/lib/http').buildPath; export interface Data { sessionId: string; diff --git a/tsconfig.json b/tsconfig.json index d32da74..9c12cf9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "es6", "module": "commonjs", "moduleResolution": "node", "sourceMap": true,