1
- const args = process . argv
2
-
3
1
const { spawn } = require ( 'child_process' )
4
2
const webdriver = require ( 'selenium-webdriver' )
5
3
const fs = require ( 'fs' )
@@ -8,8 +6,6 @@ const os = require('os')
8
6
9
7
const WebdriverDebugLog = console . log // debuglog('webdriver')
10
8
11
- const appName = 'Electron'
12
-
13
9
const driverPath = path . join (
14
10
__dirname ,
15
11
'..' ,
@@ -19,16 +15,25 @@ const driverPath = path.join(
19
15
'chromedriver' + ( os . platform ( ) === 'win32' ? '.exe' : '' )
20
16
)
21
17
22
- const electronBinaryPath = path . join (
23
- require . resolve ( 'electron' ) ,
24
- '..' ,
25
- 'dist' ,
26
- appName + '.app' ,
27
- 'Contents' ,
28
- 'MacOS' ,
29
- appName
30
- )
18
+ const getElectronPath = ( ) => {
19
+ const basePath = path . join ( require . resolve ( 'electron' ) , '..' , 'dist' )
20
+ switch ( os . platform ( ) ) {
21
+ case 'darwin' :
22
+ return path . join (
23
+ basePath ,
24
+ 'Electron.app' ,
25
+ 'Contents' ,
26
+ 'MacOS' ,
27
+ 'Electron'
28
+ )
29
+ case 'win32' :
30
+ return path . join ( basePath , 'electron.exe' )
31
+ default :
32
+ return path . join ( basePath , 'electron' )
33
+ }
34
+ }
31
35
36
+ const electronBinaryPath = getElectronPath ( )
32
37
const pathToSeleniumIDE = path . join ( __dirname , '..' , 'build' , 'main-bundle.js' )
33
38
34
39
const port = 9518
@@ -40,28 +45,87 @@ async function main() {
40
45
if ( ! success ) {
41
46
console . error ( 'Failed to start webdriver backend' )
42
47
console . error ( proc . error )
43
- return
48
+ throw proc . error
44
49
}
45
- const sideFiles = args . filter ( ( arg ) => arg . endsWith ( '.side' ) )
46
- for ( const sideFile of [ sideFiles [ 0 ] ] ) {
47
- console . log ( 'Starting driver for sidefile' , sideFile )
48
- const driver = await new webdriver . Builder ( )
50
+ let driver
51
+ try {
52
+ driver = await new webdriver . Builder ( )
49
53
. usingServer ( `http://localhost:${ port } ` )
50
54
. withCapabilities ( {
51
55
'goog:chromeOptions' : {
52
56
// Here is the path to your Electron binary.
53
57
binary : electronBinaryPath ,
54
- args : [ 'app=' + pathToSeleniumIDE , `side-file= ${ sideFile } ` ] ,
58
+ args : [ 'app=' + pathToSeleniumIDE , 'enable-automation' ] ,
55
59
excludeSwitches : [ 'enable-logging' ] ,
56
60
} ,
57
61
} )
58
- . forBrowser ( 'chrome' ) // note: use .forBrowser('electron') for selenium-webdriver <= 3.6.0
62
+ . forBrowser ( 'chrome' )
59
63
. build ( )
60
- await driver . sleep ( 10000 )
64
+ const newProject = await driver . wait (
65
+ webdriver . until . elementLocated ( webdriver . By . css ( '[data-new-project]' ) ) ,
66
+ 5000
67
+ )
68
+ const firstHandle = await driver . getWindowHandle ( )
69
+ await newProject . click ( )
70
+ let handles = await driver . getAllWindowHandles ( )
71
+ while ( handles . length < 1 || handles [ 0 ] === firstHandle ) {
72
+ await driver . sleep ( 100 )
73
+ try {
74
+ handles = await driver . getAllWindowHandles ( )
75
+ } catch ( e ) { }
76
+ }
77
+ await driver . switchTo ( ) . window ( handles [ 0 ] )
78
+ const url = await driver . wait (
79
+ webdriver . until . elementLocated ( webdriver . By . css ( '[data-url]' ) ) ,
80
+ 5000
81
+ )
82
+ await url . click ( )
83
+ while ( ( await url . getAttribute ( 'value' ) ) !== '' ) {
84
+ await url . sendKeys ( webdriver . Key . BACK_SPACE )
85
+ }
86
+ const host = 'http://localhost:8080'
87
+ for ( const index in host ) {
88
+ await url . sendKeys ( host [ index ] )
89
+ await driver . sleep ( 10 )
90
+ }
91
+ const record = await driver . wait (
92
+ webdriver . until . elementLocated ( webdriver . By . css ( '[data-record]' ) ) ,
93
+ 1000
94
+ )
95
+ await record . click ( )
96
+ let handles2 = await driver . getAllWindowHandles ( )
97
+ while ( handles2 . length < 2 ) {
98
+ await driver . sleep ( 100 )
99
+ handles2 = await driver . getAllWindowHandles ( )
100
+ }
101
+ await driver . switchTo ( ) . window ( handles2 [ 1 ] )
102
+ await driver . sleep ( 1000 )
103
+ const link = await driver . wait (
104
+ webdriver . until . elementLocated ( webdriver . By . linkText ( 'windows.html' ) ) ,
105
+ 3000
106
+ )
107
+ await link . click ( )
108
+ await driver . switchTo ( ) . window ( handles2 [ 0 ] )
109
+ const command = await driver . wait (
110
+ webdriver . until . elementLocated (
111
+ webdriver . By . css ( '[data-command-id]:nth-child(2)' )
112
+ ) ,
113
+ 1000
114
+ )
115
+ const text = ( await command . getText ( ) ) . replace ( / \s + / g, ' ' )
116
+ if ( text !== 'Click linkText=windows.html' ) {
117
+ throw new Error ( 'Unexpected command text: ' + text )
118
+ }
119
+ console . log ( 'IDE is correctly recording commands!' )
61
120
await driver . quit ( )
62
- return
121
+ proc . kill ( )
122
+ } catch ( e ) {
123
+ if ( driver ) {
124
+ await driver . quit ( )
125
+ }
126
+ proc . kill ( )
127
+ throw e
63
128
}
64
- proc . kill ( )
65
129
}
66
130
67
131
function startWebdriverBackend ( ) {
@@ -76,7 +140,7 @@ function startWebdriverBackend() {
76
140
} )
77
141
proc . stdout . on ( 'data' , ( out ) => {
78
142
const outStr = `${ out } `
79
- WebdriverDebugLog ( outStr )
143
+ // WebdriverDebugLog(outStr)
80
144
const fullyStarted = outStr . includes ( successMessage )
81
145
if ( fullyStarted ) {
82
146
initialized = true
@@ -86,7 +150,7 @@ function startWebdriverBackend() {
86
150
} )
87
151
proc . stderr . on ( 'data' , ( err ) => {
88
152
const errStr = `${ err } `
89
- WebdriverDebugLog ( errStr )
153
+ // WebdriverDebugLog(errStr)
90
154
if ( ! initialized ) {
91
155
resolve ( { success : false , error : errStr } )
92
156
}
0 commit comments