topological-nodered-wdio 0.4.7 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,107 +1,107 @@
1
- const common = require('./wdio-common')
2
-
3
- module.exports = function(RED) {
4
- function newSession(config) {
5
- RED.nodes.createNode(this, config)
6
- const node = this
7
-
8
- common.clearStatus(node)
9
-
10
- node.on('input', async (msg) => {
11
- try {
12
- const webdriverConfig = Object.assign(
13
- { logLevel: config.logLevel },
14
- parseUri(config.webdriverUri || msg.webdriverUri, node),
15
- getCapabilities(
16
- config.webdriverProvider,
17
- config.webdriverBrowser,
18
- msg
19
- )
20
- )
21
- node.log = `Open new browser.`
22
- let b = await common.newSession(webdriverConfig, node, node.context())
23
- await common.log(node)
24
- common.connectedStatus(node)
25
- msg.payload = b.sessionId
26
- node.send(msg)
27
- } catch (e) {
28
- await common.log(node)
29
- common.handleError(e, node, msg)
30
- }
31
- })
32
-
33
- node.on('close', async (done) => {
34
- try {
35
- if (config.killSession) {
36
- let b = await common.deleteSession(node.context())
37
- let sessionId = ''
38
- if (b && b.sessionId) sessionId = b.sessionId
39
- common.disconnectedStatus(node)
40
- node.log('Disconnected webdriver session ' + sessionId)
41
- }
42
- } catch (e) {
43
- await common.log(node)
44
- common.handleError(e, node, msg)
45
- }
46
- done()
47
- })
48
- }
49
- RED.nodes.registerType('new-session', newSession)
50
- }
51
-
52
- const parseUri = (uri, node) => {
53
- let uriComponents
54
- try {
55
- if (uri[uri.length - 1] !== '/') uri += '/'
56
- let parsed = uri.match(/(\w+):\/\/(.+):(\d+)(\/.*)/)
57
- uriComponents = {
58
- protocol: parsed[1],
59
- hostname: parsed[2],
60
- port: parseInt(parsed[3]),
61
- path: parsed[4]
62
- }
63
- } catch (e) {
64
- common.handleError(
65
- new Error(
66
- 'Invalid URI, expected format "<protocol>://<host>:<port>/<path>'
67
- ),
68
- node
69
- )
70
- }
71
-
72
- return uriComponents
73
- }
74
-
75
- const getCapabilities = (vendor, browser, msg) => {
76
- let capabilities
77
-
78
- if(browser == 'custom'){
79
- capabilities = msg.capabilities
80
- }
81
- else if (vendor === 'browserless.io') {
82
- capabilities = {
83
- browserName: browser,
84
- 'goog:chromeOptions': {
85
- args: ['--headless', '--no-sandbox']
86
- }
87
- }
88
- } else if (vendor === 'local' && browser === 'chromium') {
89
- capabilities = {
90
- browserName: 'chrome',
91
- 'goog:chromeOptions': {
92
- args: ['--headless', '--no-sandbox'],
93
- w3c: false
94
- }
95
- }
96
- } else if (vendor === 'local') {
97
- capabilities = {
98
- browserName: browser,
99
- //platformName: 'Linux',
100
- 'goog:chromeOptions': {
101
- w3c: false
102
- }
103
- }
104
- }
105
-
106
- return { capabilities }
107
- }
1
+ const common = require('./wdio-common')
2
+
3
+ module.exports = function(RED) {
4
+ function newSession(config) {
5
+ RED.nodes.createNode(this, config)
6
+ const node = this
7
+
8
+ common.clearStatus(node)
9
+
10
+ node.on('input', async (msg) => {
11
+ try {
12
+ const webdriverConfig = Object.assign(
13
+ { logLevel: config.logLevel },
14
+ parseUri(config.webdriverUri || msg.webdriverUri, node),
15
+ getCapabilities(
16
+ config.webdriverProvider,
17
+ config.webdriverBrowser,
18
+ msg
19
+ )
20
+ )
21
+ node.log = `Open new browser.`
22
+ let b = await common.newSession(webdriverConfig, node, node.context())
23
+ await common.log(node)
24
+ common.connectedStatus(node)
25
+ msg.payload = b.sessionId
26
+ node.send(msg)
27
+ } catch (e) {
28
+ await common.log(node)
29
+ common.handleError(e, node, msg)
30
+ }
31
+ })
32
+
33
+ node.on('close', async (done) => {
34
+ try {
35
+ if (config.killSession) {
36
+ let b = await common.deleteSession(node.context())
37
+ let sessionId = ''
38
+ if (b && b.sessionId) sessionId = b.sessionId
39
+ common.disconnectedStatus(node)
40
+ node.log('Disconnected webdriver session ' + sessionId)
41
+ }
42
+ } catch (e) {
43
+ await common.log(node)
44
+ common.handleError(e, node, msg)
45
+ }
46
+ done()
47
+ })
48
+ }
49
+ RED.nodes.registerType('new-session', newSession)
50
+ }
51
+
52
+ const parseUri = (uri, node) => {
53
+ let uriComponents
54
+ try {
55
+ if (uri[uri.length - 1] !== '/') uri += '/'
56
+ let parsed = uri.match(/(\w+):\/\/(.+):(\d+)(\/.*)/)
57
+ uriComponents = {
58
+ protocol: parsed[1],
59
+ hostname: parsed[2],
60
+ port: parseInt(parsed[3]),
61
+ path: parsed[4]
62
+ }
63
+ } catch (e) {
64
+ common.handleError(
65
+ new Error(
66
+ 'Invalid URI, expected format "<protocol>://<host>:<port>/<path>'
67
+ ),
68
+ node
69
+ )
70
+ }
71
+
72
+ return uriComponents
73
+ }
74
+
75
+ const getCapabilities = (vendor, browser, msg) => {
76
+ let capabilities
77
+
78
+ if(browser == 'custom'){
79
+ capabilities = msg.capabilities
80
+ }
81
+ else if (vendor === 'browserless.io') {
82
+ capabilities = {
83
+ browserName: browser,
84
+ 'goog:chromeOptions': {
85
+ args: ['--headless', '--no-sandbox']
86
+ }
87
+ }
88
+ } else if (vendor === 'local' && browser === 'chromium') {
89
+ capabilities = {
90
+ browserName: 'chrome',
91
+ 'goog:chromeOptions': {
92
+ args: ['--headless', '--no-sandbox'],
93
+ w3c: false
94
+ }
95
+ }
96
+ } else if (vendor === 'local') {
97
+ capabilities = {
98
+ browserName: browser,
99
+ //platformName: 'Linux',
100
+ 'goog:chromeOptions': {
101
+ w3c: false
102
+ }
103
+ }
104
+ }
105
+
106
+ return { capabilities }
107
+ }
@@ -1,155 +1,155 @@
1
- const wdio = require('webdriverio')
2
- let newSessionNode
3
-
4
- module.exports.getBrowser = (context) => {
5
- let browser = context.flow.get('wdio_browser')
6
- if (!browser || !browser.sessionId)
7
- throw new Error('No session defined - call newSession first')
8
-
9
- return browser
10
- }
11
-
12
- /*
13
- config = {
14
- logLevel: 'error',
15
- protocol: 'https',
16
- hostname: '<key>@chrome.browserless.io',
17
- port: 443,
18
- path: '/webdriver',
19
- capabilities: {
20
- browserName: 'chrome',
21
- chromeOptions: {
22
- args: ['--headless', '--no-sandbox']
23
- }
24
- }
25
- }
26
- */
27
- module.exports.newSession = async (config, node, context) => {
28
- let browser
29
- try {
30
- browser = await wdio.remote(config)
31
- context.flow.set('wdio_browser', browser)
32
- newSessionNode = node
33
- } catch (e) {
34
- throw e
35
- }
36
- return browser
37
- }
38
-
39
- module.exports.deleteSession = async (context) => {
40
- let b
41
- let browser = context.flow.get('wdio_browser')
42
- try {
43
- b = { sessionId: browser.sessionId }
44
- await browser.closeWindow()
45
- await browser.deleteSession()
46
- context.flow.set('wdio_browser', null)
47
- if (newSessionNode) module.exports.disconnected(newSessionNode)
48
- } catch (e) {}
49
- return b
50
- }
51
-
52
- module.exports.getElementId = async (browser, using, value) => {
53
- let elementId
54
- try {
55
- const element = await browser.findElement(using, value)
56
- if (element && Object.keys(element)) {
57
- elementId = element[Object.keys(element)[0]]
58
- } else {
59
- let e
60
- if (element && element.message) {
61
- e = element.message
62
- } else {
63
- e = 'Element not found'
64
- }
65
- throw new Error(e)
66
- }
67
- } catch (e) {
68
- throw e
69
- }
70
- return elementId
71
- }
72
-
73
- module.exports.getLocator = async (browser, using, value) => {
74
- let locator = ''
75
- switch (using) {
76
- case 'id':
77
- locator = `#${value}`
78
- break
79
- case 'name':
80
- locator = `[name='${value}']`
81
- break
82
- case 'className':
83
- locator = `.${value}`
84
- break
85
- case 'tagName':
86
- locator = value
87
- break
88
- case 'cssSelector':
89
- locator = value
90
- break
91
- case 'text':
92
- locator = `=${value}`
93
- break
94
- case 'partialText':
95
- locator = `*=${value}`
96
- break
97
- case 'xPath':
98
- locator = value
99
- break
100
- default:
101
- locator = value
102
- }
103
-
104
- return locator
105
- }
106
-
107
- module.exports.handleError = (e, node, msg) => {
108
- console.log(e)
109
- module.exports.errorStatus(node)
110
- node.error(e, msg)
111
- }
112
-
113
- module.exports.clearStatus = (node) => {
114
- node.status({})
115
- }
116
-
117
- module.exports.connectedStatus = (node) => {
118
- node.status({
119
- fill: 'green',
120
- shape: 'dot',
121
- text: 'connected'
122
- })
123
- }
124
-
125
- module.exports.disconnectedStatus = (node) => {
126
- node.status({
127
- fill: 'green',
128
- shape: 'ring',
129
- text: 'disconnected'
130
- })
131
- }
132
-
133
- module.exports.successStatus = (node) => {
134
- node.status({
135
- fill: 'green',
136
- shape: 'ring',
137
- text: 'done'
138
- })
139
- }
140
-
141
- module.exports.errorStatus = (node) => {
142
- node.status({
143
- fill: 'red',
144
- shape: 'ring',
145
- text: 'error'
146
- })
147
- }
148
-
149
- module.exports.log = async (node) => {
150
- let context = node.context()
151
- let stepCount = await (context.global.get('stepCount') || 0) + 1
152
- let document = await context.global.get('document') || ''
153
- await context.global.set('document', `${document}\n${stepCount}. Node: ${node.name} - ${node.log}`)
154
- await context.global.set('stepCount', stepCount)
155
- }
1
+ const wdio = require('webdriverio')
2
+ let newSessionNode
3
+
4
+ module.exports.getBrowser = (context) => {
5
+ let browser = context.flow.get('wdio_browser')
6
+ if (!browser || !browser.sessionId)
7
+ throw new Error('No session defined - call newSession first')
8
+
9
+ return browser
10
+ }
11
+
12
+ /*
13
+ config = {
14
+ logLevel: 'error',
15
+ protocol: 'https',
16
+ hostname: '<key>@chrome.browserless.io',
17
+ port: 443,
18
+ path: '/webdriver',
19
+ capabilities: {
20
+ browserName: 'chrome',
21
+ chromeOptions: {
22
+ args: ['--headless', '--no-sandbox']
23
+ }
24
+ }
25
+ }
26
+ */
27
+ module.exports.newSession = async (config, node, context) => {
28
+ let browser
29
+ try {
30
+ browser = await wdio.remote(config)
31
+ context.flow.set('wdio_browser', browser)
32
+ newSessionNode = node
33
+ } catch (e) {
34
+ throw e
35
+ }
36
+ return browser
37
+ }
38
+
39
+ module.exports.deleteSession = async (context) => {
40
+ let b
41
+ let browser = context.flow.get('wdio_browser')
42
+ try {
43
+ b = { sessionId: browser.sessionId }
44
+ await browser.closeWindow()
45
+ await browser.deleteSession()
46
+ context.flow.set('wdio_browser', null)
47
+ if (newSessionNode) module.exports.disconnected(newSessionNode)
48
+ } catch (e) {}
49
+ return b
50
+ }
51
+
52
+ module.exports.getElementId = async (browser, using, value) => {
53
+ let elementId
54
+ try {
55
+ const element = await browser.findElement(using, value)
56
+ if (element && Object.keys(element)) {
57
+ elementId = element[Object.keys(element)[0]]
58
+ } else {
59
+ let e
60
+ if (element && element.message) {
61
+ e = element.message
62
+ } else {
63
+ e = 'Element not found'
64
+ }
65
+ throw new Error(e)
66
+ }
67
+ } catch (e) {
68
+ throw e
69
+ }
70
+ return elementId
71
+ }
72
+
73
+ module.exports.getLocator = async (browser, using, value) => {
74
+ let locator = ''
75
+ switch (using) {
76
+ case 'id':
77
+ locator = `#${value}`
78
+ break
79
+ case 'name':
80
+ locator = `[name='${value}']`
81
+ break
82
+ case 'className':
83
+ locator = `.${value}`
84
+ break
85
+ case 'tagName':
86
+ locator = value
87
+ break
88
+ case 'cssSelector':
89
+ locator = value
90
+ break
91
+ case 'text':
92
+ locator = `=${value}`
93
+ break
94
+ case 'partialText':
95
+ locator = `*=${value}`
96
+ break
97
+ case 'xPath':
98
+ locator = value
99
+ break
100
+ default:
101
+ locator = value
102
+ }
103
+
104
+ return locator
105
+ }
106
+
107
+ module.exports.handleError = (e, node, msg) => {
108
+ console.log(e)
109
+ module.exports.errorStatus(node)
110
+ node.error(e, msg)
111
+ }
112
+
113
+ module.exports.clearStatus = (node) => {
114
+ node.status({})
115
+ }
116
+
117
+ module.exports.connectedStatus = (node) => {
118
+ node.status({
119
+ fill: 'green',
120
+ shape: 'dot',
121
+ text: 'connected'
122
+ })
123
+ }
124
+
125
+ module.exports.disconnectedStatus = (node) => {
126
+ node.status({
127
+ fill: 'green',
128
+ shape: 'ring',
129
+ text: 'disconnected'
130
+ })
131
+ }
132
+
133
+ module.exports.successStatus = (node) => {
134
+ node.status({
135
+ fill: 'green',
136
+ shape: 'ring',
137
+ text: 'done'
138
+ })
139
+ }
140
+
141
+ module.exports.errorStatus = (node) => {
142
+ node.status({
143
+ fill: 'red',
144
+ shape: 'ring',
145
+ text: 'error'
146
+ })
147
+ }
148
+
149
+ module.exports.log = async (node) => {
150
+ let context = node.context()
151
+ let stepCount = await (context.global.get('stepCount') || 0) + 1
152
+ let document = await context.global.get('document') || ''
153
+ await context.global.set('document', `${document}\n${stepCount}. Node: ${node.name} - ${node.log}`)
154
+ await context.global.set('stepCount', stepCount)
155
+ }