Skip to content
This repository was archived by the owner on Jul 29, 2024. It is now read-only.

Commit 2a3a0dc

Browse files
cnishinaheathkit
authored andcommitted
fix(exports): fix type exports and require('protractor') exports (#3404)
* fix(package): set main to ptor instead of browser * fix(exports): fix type exports and require('protractor') exports
1 parent 55fe53a commit 2a3a0dc

File tree

10 files changed

+113
-30
lines changed

10 files changed

+113
-30
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ xmloutput*
1313
npm-debug.log
1414

1515
*.swp
16+
globals.js

exampleTypescript/tsconfig.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
},
1010
"exclude": [
1111
"node_modules",
12-
"typings/globals"
12+
"typings/globals",
13+
"asyncAwait"
1314
]
1415
}

globals.ts

+8-9
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,6 @@ import {
77
ProtractorExpectedConditions
88
} from 'protractor';
99

10-
export var browser: Browser = global['protractor.browser'];
11-
export var element: ElementHelper = global['protractor.element'];
12-
export var by: ProtractorBy = global['protractor.by'];
13-
export var By: ProtractorBy = global['protractor.By'];
14-
export var $: (search: string) => ElementFinder = global['protractor.$'];
15-
export var $$: (search: string) => ElementArrayFinder = global['protractor.$$'];
16-
export var ExpectedConditions: ProtractorExpectedConditions =
17-
global['protractor.ExpectedConditions'];
18-
1910
export interface Protractor {
2011
browser: Browser;
2112
element: ElementHelper;
@@ -26,3 +17,11 @@ export interface Protractor {
2617
ExpectedConditions: ProtractorExpectedConditions;
2718
}
2819
export var protractor: Protractor = global['protractor'];
20+
export var browser: Browser = global['protractor']['browser'];
21+
export var element: ElementHelper = global['protractor']['element'];
22+
export var by: ProtractorBy = global['protractor']['by'];
23+
export var By: ProtractorBy = global['protractor']['By'];
24+
export var $: (search: string) => ElementFinder = global['protractor']['$'];
25+
export var $$: (search: string) => ElementArrayFinder = global['protractor']['$$'];
26+
export var ExpectedConditions: ProtractorExpectedConditions =
27+
global['protractor']['ExpectedConditions'];

gulpfile.js

+15-5
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,13 @@ var fs = require('fs');
99
var path = require('path');
1010
var glob = require('glob');
1111

12-
var runSpawn = function(done, task, opt_arg) {
12+
var runSpawn = function(done, task, opt_arg, opt_io) {
1313
opt_arg = typeof opt_arg !== 'undefined' ? opt_arg : [];
14-
var child = spawn(task, opt_arg, {stdio: 'inherit'});
14+
var stdio = 'inherit';
15+
if (opt_io === 'ignore') {
16+
stdio = 'ignore';
17+
}
18+
var child = spawn(task, opt_arg, {stdio: stdio});
1519
var running = false;
1620
child.on('close', function() {
1721
if (!running) {
@@ -64,14 +68,20 @@ gulp.task('tsc', function(done) {
6468
runSpawn(done, 'node', ['node_modules/typescript/bin/tsc']);
6569
});
6670

71+
gulp.task('tsc:globals', function(done) {
72+
runSpawn(done, 'node', ['node_modules/typescript/bin/tsc', 'globals.ts'],
73+
'ignore');
74+
});
75+
6776
gulp.task('prepublish', function(done) {
68-
runSequence(['typings', 'jshint', 'format'], 'tsc', 'types', 'ambient', 'built:copy', done);
77+
runSequence(['typings', 'jshint', 'format'], 'tsc', 'tsc:globals', 'types',
78+
'ambient', 'built:copy', done);
6979
});
7080

7181
gulp.task('pretest', function(done) {
7282
runSequence(
73-
['webdriver:update', 'typings', 'jshint', 'format'], 'tsc', 'types', 'ambient',
74-
'built:copy', done);
83+
['webdriver:update', 'typings', 'jshint', 'format'], 'tsc', 'types',
84+
'ambient', 'tsc:globals', 'built:copy', done);
7585
});
7686

7787
gulp.task('default',['prepublish']);

lib/browser.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ import {ProtractorExpectedConditions} from './expectedConditions';
88
import {Locator, ProtractorBy} from './locators';
99
import {Logger} from './logger';
1010
import {Plugins} from './plugins';
11-
import {protractor} from './ptor';
1211
import * as helper from './util';
1312

1413
let clientSideScripts = require('./clientsidescripts');
1514
let webdriver = require('selenium-webdriver');
15+
let Command = require('selenium-webdriver/lib/command').Command;
16+
let CommandName = require('selenium-webdriver/lib/command').Name;
1617

1718
// jshint browser: true
1819
/* global angular */
@@ -361,7 +362,7 @@ export class Browser extends Webdriver {
361362
}
362363

363364
return this.driver.schedule(
364-
new protractor.Command(protractor.CommandName.EXECUTE_SCRIPT)
365+
new Command(CommandName.EXECUTE_SCRIPT)
365366
.setParameter('script', script)
366367
.setParameter('args', scriptArgs),
367368
description);
@@ -387,7 +388,7 @@ export class Browser extends Webdriver {
387388
script = 'return (' + script + ').apply(null, arguments);';
388389
}
389390
return this.driver.schedule(
390-
new protractor.Command(protractor.CommandName.EXECUTE_ASYNC_SCRIPT)
391+
new Command(CommandName.EXECUTE_ASYNC_SCRIPT)
391392
.setParameter('script', script)
392393
.setParameter('args', scriptArgs),
393394
description);
@@ -1003,7 +1004,7 @@ export class Browser extends Webdriver {
10031004
let context: Object = {require: require};
10041005
global.list = (locator: Locator) => {
10051006
/* globals browser */
1006-
return protractor.browser.findElements(locator).then(
1007+
return global.browser.findElements(locator).then(
10071008
(arr: webdriver.WebElement[]) => {
10081009
let found: string[] = [];
10091010
for (let i = 0; i < arr.length; ++i) {

lib/expectedConditions.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {ElementFinder} from './element';
2-
import {protractor} from './ptor';
32

43
let webdriver = require('selenium-webdriver');
54

@@ -150,7 +149,7 @@ export class ProtractorExpectedConditions {
150149
*/
151150
alertIsPresent(): Function {
152151
return () => {
153-
return protractor.browser.driver.switchTo().alert().then(
152+
return global.browser.driver.switchTo().alert().then(
154153
(): boolean => { return true; },
155154
(err: any) => {
156155
if (err.code == webdriver.error.ErrorCode.NO_SUCH_ALERT) {
@@ -253,7 +252,7 @@ export class ProtractorExpectedConditions {
253252
*/
254253
titleContains(title: string): Function {
255254
return () => {
256-
return protractor.browser.driver.getTitle().then(
255+
return global.browser.driver.getTitle().then(
257256
(actualTitle: string): boolean => {
258257
return actualTitle.indexOf(title) > -1;
259258
});
@@ -276,7 +275,7 @@ export class ProtractorExpectedConditions {
276275
*/
277276
titleIs(title: string): Function {
278277
return () => {
279-
return protractor.browser.driver.getTitle().then(
278+
return global.browser.driver.getTitle().then(
280279
(actualTitle: string): boolean => { return actualTitle === title; });
281280
};
282281
}
@@ -298,7 +297,7 @@ export class ProtractorExpectedConditions {
298297
*/
299298
urlContains(url: string): Function {
300299
return () => {
301-
return protractor.browser.driver.getCurrentUrl().then(
300+
return global.browser.driver.getCurrentUrl().then(
302301
(actualUrl: string): boolean => {
303302
return actualUrl.indexOf(url) > -1;
304303
});
@@ -321,7 +320,7 @@ export class ProtractorExpectedConditions {
321320
*/
322321
urlIs(url: string): Function {
323322
return () => {
324-
return protractor.browser.driver.getCurrentUrl().then(
323+
return global.browser.driver.getCurrentUrl().then(
325324
(actualUrl: string): boolean => { return actualUrl === url; });
326325
};
327326
}

lib/main.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/**
2+
* Requiring protractor as a node module. Export the contents of the protractor
3+
* namespace.
4+
*/
5+
6+
export = require('./ptor').protractor

lib/ptor.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,27 @@ import {ProtractorBy} from './locators';
66
let webdriver = require('selenium-webdriver');
77

88
export namespace protractor {
9+
// Variables tied to the global namespace.
910
export let browser: Browser;
1011
export let $ = function(search: string): ElementFinder { return null;};
1112
export let $$ = function(search: string): ElementArrayFinder { return null;};
1213
export let element: ElementHelper;
1314
export let By: ProtractorBy;
1415
export let by: ProtractorBy;
15-
export let wrapDriver: Function;
16+
export let wrapDriver:
17+
(webdriver: webdriver.WebDriver, baseUrl?: string, rootElement?: string,
18+
untrackOutstandingTimeouts?: boolean) => Browser;
1619
export let ExpectedConditions: ProtractorExpectedConditions;
1720

18-
// Export the protractor classes
21+
// Export protractor classes.
1922
export let Browser = require('./browser').Browser;
2023
export let ElementFinder = require('./element').ElementFinder;
2124
export let ElementArrayFinder = require('./element').ElementArrayFinder;
22-
export let ElementHelper = require('./browser').ElementHelper;
2325
export let ProtractorBy = require('./locators').ProtractorBy;
2426
export let ProtractorExpectedConditions =
2527
require('./expectedConditions').ProtractorExpectedConditions;
2628

27-
// Define selenium webdriver imports.
29+
// Export selenium webdriver.
2830
export let promise = webdriver.promise;
2931
export let WebElement = webdriver.WebElement;
3032
export let ActionSequence = webdriver.ActionSequence;

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"protractor": "bin/protractor",
5151
"webdriver-manager": "bin/webdriver-manager"
5252
},
53-
"main": "built/browser.js",
53+
"main": "built/main.js",
5454
"typings": "built/index.d.ts",
5555
"scripts": {
5656
"prepublish": "gulp prepublish",
+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// require('protractor') equivalent is requiring ptor
2+
let protractor = require('../../built/main');
3+
4+
// the webdriver stuff we are exposing externally
5+
6+
7+
describe('require(\'protractor\')', () => {
8+
9+
describe('exported protractor classes', () => {
10+
it('should be defined', () => {
11+
var protractorClasses = ['Browser', 'ElementFinder', 'ElementArrayFinder',
12+
'ProtractorBy', 'ProtractorExpectedConditions'];
13+
for (var pos in protractorClasses) {
14+
var property = protractorClasses[pos];
15+
expect(typeof protractor[property]).toEqual('function');
16+
}
17+
});
18+
19+
describe('browser class', () => {
20+
it('should have static method defined', () => {
21+
var staticMethod = 'wrapDriver';
22+
expect(typeof protractor.Browser['wrapDriver']).toEqual('function');
23+
});
24+
25+
it('should have static variables defined', () => {
26+
var staticVariables = ['By', 'ExpectedConditions'];
27+
for (var pos in staticVariables) {
28+
var property = staticVariables[pos];
29+
expect(typeof protractor.Browser[property]).toEqual('object');
30+
}
31+
});
32+
});
33+
34+
});
35+
36+
describe('exported webdriver namespace', ()=> {
37+
it('should have exported classes', () => {
38+
var webdriverClasses = ['WebElement', 'ActionSequence', 'Command'];
39+
for (var pos in webdriverClasses) {
40+
var property = webdriverClasses[pos];
41+
expect(typeof protractor[property]).toEqual('function');
42+
}
43+
});
44+
45+
it('should have variables defined', () => {
46+
var webdriverObjects = ['Key', 'CommandName'];
47+
for (var pos in webdriverObjects) {
48+
var property = webdriverObjects[pos];
49+
expect(typeof protractor[property]).toEqual('object');
50+
}
51+
});
52+
53+
describe('promise namespace', () => {
54+
it('should have functions defined (spot check)', () => {
55+
var promiseFunctions = ['Promise', 'defer', 'delayed', 'createFlow',
56+
'controlFlow', 'all', 'fulfilled', 'filter', 'when' ]
57+
for (var pos in promiseFunctions) {
58+
var property = promiseFunctions[pos];
59+
expect(typeof protractor.promise[property]).toEqual('function');
60+
}
61+
});
62+
});
63+
});
64+
});

0 commit comments

Comments
 (0)