@wdio/cli 8.11.4 → 8.12.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.
- package/build/cjs/index.js +2 -2
- package/build/commands/config.d.ts.map +1 -1
- package/build/commands/config.js +1 -0
- package/build/commands/run.js +1 -1
- package/build/constants.d.ts +119 -56
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +110 -42
- package/build/templates/exampleFiles/cucumber/step_definitions/steps.js.ejs +6 -6
- package/build/templates/exampleFiles/mochaJasmine/test.e2e.js.ejs +11 -0
- package/build/templates/exampleFiles/pageobjects/login.page.js.ejs +9 -9
- package/build/templates/exampleFiles/pageobjects/page.js.ejs +2 -2
- package/build/templates/exampleFiles/pageobjects/secure.page.js.ejs +5 -5
- package/build/templates/snippets/capabilities.ejs +46 -0
- package/build/templates/snippets/electronTest.js.ejs +9 -0
- package/build/templates/snippets/macosTest.js.ejs +11 -0
- package/build/templates/snippets/services.ejs +18 -0
- package/build/templates/snippets/testWithPO.js.ejs +20 -0
- package/build/templates/snippets/testWithoutPO.js.ejs +16 -0
- package/build/templates/snippets/vscodeTest.js.ejs +9 -0
- package/build/templates/wdio.conf.tpl.ejs +23 -29
- package/build/types.d.ts +7 -2
- package/build/types.d.ts.map +1 -1
- package/build/utils.d.ts.map +1 -1
- package/build/utils.js +18 -11
- package/package.json +2 -2
- package/build/templates/exampleFiles/jasmine/example.e2e.js.ejs +0 -42
- package/build/templates/exampleFiles/mocha/example.e2e.js.ejs +0 -42
- /package/build/templates/{afterTest.ejs → snippets/afterTest.ejs} +0 -0
- /package/build/templates/{reporters.ejs → snippets/reporters.ejs} +0 -0
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
<%- isUsingTypeScript || esmSupport
|
|
1
|
+
<%- answers.isUsingTypeScript || answers.esmSupport
|
|
2
2
|
? "import { Given, When, Then } from '@wdio/cucumber-framework';"
|
|
3
3
|
: "const { Given, When, Then } = require('@wdio/cucumber-framework');" %>
|
|
4
4
|
<%
|
|
5
5
|
/**
|
|
6
6
|
* step definition without page objects
|
|
7
7
|
*/
|
|
8
|
-
if (usePageObjects) { %>
|
|
9
|
-
<%- isUsingTypeScript || esmSupport
|
|
10
|
-
? `import LoginPage from '${relativePath}/login.page${esmSupport ? '.js' : ''}';`
|
|
8
|
+
if (answers.usePageObjects) { %>
|
|
9
|
+
<%- answers.isUsingTypeScript || answers.esmSupport
|
|
10
|
+
? `import LoginPage from '${relativePath}/login.page${answers.esmSupport ? '.js' : ''}';`
|
|
11
11
|
: `const LoginPage = require('${relativePath}/login.page');` %>
|
|
12
|
-
<%- isUsingTypeScript || esmSupport
|
|
13
|
-
? `import SecurePage from '${relativePath}/secure.page${esmSupport ? '.js' : ''}';`
|
|
12
|
+
<%- answers.isUsingTypeScript || answers.esmSupport
|
|
13
|
+
? `import SecurePage from '${relativePath}/secure.page${answers.esmSupport ? '.js' : ''}';`
|
|
14
14
|
: `const SecurePage = require('${relativePath}/secure.page');` %>
|
|
15
15
|
|
|
16
16
|
const pages = {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<% if (answers.purpose === 'vscode') {
|
|
2
|
+
%><%- include('../../snippets/vscodeTest.js.ejs', { answers }) %><%
|
|
3
|
+
} else if (answers.purpose === 'electron') {
|
|
4
|
+
%><%- include('../../snippets/electronTest.js.ejs', { answers }) %><%
|
|
5
|
+
} else if (answers.purpose === 'macos') {
|
|
6
|
+
%><%- include('../../snippets/macosTest.js.ejs', { answers }) %><%
|
|
7
|
+
} else if (answers.usePageObjects) {
|
|
8
|
+
%><%- include('../../snippets/testWithPO.js.ejs', { answers }) %><%
|
|
9
|
+
} else if (!answers.usePageObjects) {
|
|
10
|
+
%><%- include('../../snippets/testWithoutPO.js.ejs', { answers }) %><%
|
|
11
|
+
} %>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
<%- isUsingTypeScript ? "import { ChainablePromiseElement } from 'webdriverio';" : "" %>
|
|
1
|
+
<%- answers.isUsingTypeScript ? "import { ChainablePromiseElement } from 'webdriverio';" : "" %>
|
|
2
2
|
|
|
3
|
-
<%- isUsingTypeScript || esmSupport
|
|
4
|
-
? `import Page from './page${esmSupport ? '.js' : ''}';`
|
|
3
|
+
<%- answers.isUsingTypeScript || answers.esmSupport
|
|
4
|
+
? `import Page from './page${answers.esmSupport ? '.js' : ''}';`
|
|
5
5
|
: "const Page = require('./page');" %>
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -11,15 +11,15 @@ class LoginPage extends Page {
|
|
|
11
11
|
/**
|
|
12
12
|
* define selectors using getter methods
|
|
13
13
|
*/
|
|
14
|
-
<%- isUsingTypeScript ? "public " : "" %>get inputUsername () {
|
|
14
|
+
<%- answers.isUsingTypeScript ? "public " : "" %>get inputUsername () {
|
|
15
15
|
return $('#username');
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
<%- isUsingTypeScript ? "public " : "" %>get inputPassword () {
|
|
18
|
+
<%- answers.isUsingTypeScript ? "public " : "" %>get inputPassword () {
|
|
19
19
|
return $('#password');
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
<%- isUsingTypeScript ? "public " : "" %>get btnSubmit () {
|
|
22
|
+
<%- answers.isUsingTypeScript ? "public " : "" %>get btnSubmit () {
|
|
23
23
|
return $('button[type="submit"]');
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -27,7 +27,7 @@ class LoginPage extends Page {
|
|
|
27
27
|
* a method to encapsule automation code to interact with the page
|
|
28
28
|
* e.g. to login using username and password
|
|
29
29
|
*/
|
|
30
|
-
<%- isUsingTypeScript ? "public " : "" %>async login (username<%- isUsingTypeScript ? ": string": "" %>, password<%- isUsingTypeScript ? ": string": "" %>) {
|
|
30
|
+
<%- answers.isUsingTypeScript ? "public " : "" %>async login (username<%- answers.isUsingTypeScript ? ": string": "" %>, password<%- answers.isUsingTypeScript ? ": string": "" %>) {
|
|
31
31
|
await this.inputUsername.setValue(username);
|
|
32
32
|
await this.inputPassword.setValue(password);
|
|
33
33
|
await this.btnSubmit.click();
|
|
@@ -36,9 +36,9 @@ class LoginPage extends Page {
|
|
|
36
36
|
/**
|
|
37
37
|
* overwrite specific options to adapt it to page object
|
|
38
38
|
*/
|
|
39
|
-
<%- isUsingTypeScript ? "public " : "" %>open () {
|
|
39
|
+
<%- answers.isUsingTypeScript ? "public " : "" %>open () {
|
|
40
40
|
return super.open('login');
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
<%- isUsingTypeScript || esmSupport ? "export default": "module.exports =" %> new LoginPage();
|
|
44
|
+
<%- answers.isUsingTypeScript || answers.esmSupport ? "export default": "module.exports =" %> new LoginPage();
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
* main page object containing all methods, selectors and functionality
|
|
3
3
|
* that is shared across all page objects
|
|
4
4
|
*/
|
|
5
|
-
<%- isUsingTypeScript || esmSupport ? "export default" : "module.exports =" %> class Page {
|
|
5
|
+
<%- answers.isUsingTypeScript || answers.esmSupport ? "export default" : "module.exports =" %> class Page {
|
|
6
6
|
/**
|
|
7
7
|
* Opens a sub page of the page
|
|
8
8
|
* @param path path of the sub page (e.g. /path/to/page.html)
|
|
9
9
|
*/
|
|
10
|
-
<%- isUsingTypeScript ? "public " : "" %>open (path<%- isUsingTypeScript ? ": string" : "" %>) {
|
|
10
|
+
<%- answers.isUsingTypeScript ? "public " : "" %>open (path<%- answers.isUsingTypeScript ? ": string" : "" %>) {
|
|
11
11
|
return browser.url(`https://the-internet.herokuapp.com/${path}`)
|
|
12
12
|
}
|
|
13
13
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
<%- isUsingTypeScript ? "import { ChainablePromiseElement } from 'webdriverio';" : "" %>
|
|
1
|
+
<%- answers.isUsingTypeScript ? "import { ChainablePromiseElement } from 'webdriverio';" : "" %>
|
|
2
2
|
|
|
3
|
-
<%- isUsingTypeScript || esmSupport
|
|
4
|
-
? `import Page from './page${esmSupport ? '.js' : ''}';`
|
|
3
|
+
<%- answers.isUsingTypeScript || answers.esmSupport
|
|
4
|
+
? `import Page from './page${answers.esmSupport ? '.js' : ''}';`
|
|
5
5
|
: "const Page = require('./page');" %>
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -11,9 +11,9 @@ class SecurePage extends Page {
|
|
|
11
11
|
/**
|
|
12
12
|
* define selectors using getter methods
|
|
13
13
|
*/
|
|
14
|
-
<%- isUsingTypeScript ? "public " : "" %>get flashAlert () {
|
|
14
|
+
<%- answers.isUsingTypeScript ? "public " : "" %>get flashAlert () {
|
|
15
15
|
return $('#flash');
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
<%- isUsingTypeScript || esmSupport ? "export default": "module.exports =" %> new SecurePage();
|
|
19
|
+
<%- answers.isUsingTypeScript || answers.esmSupport ? "export default": "module.exports =" %> new SecurePage();
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
capabilities: [{<%
|
|
2
|
+
if (answers.expEnvAccessKey) { %>
|
|
3
|
+
// Experitest Access Key
|
|
4
|
+
// get more information at https://docs.experitest.com/display/TE/Obtaining+Access+Key
|
|
5
|
+
'experitest:accessKey': '<%- answers.expEnvAccessKey %>',<%
|
|
6
|
+
}
|
|
7
|
+
if (answers.browserEnvironment && answers.browserEnvironment.length) { %>
|
|
8
|
+
<%- answers.browserEnvironment.map((browserName) => `browserName: '${browserName}'`).join('\n }, {\n ') %><%
|
|
9
|
+
} else if (answers.mobileEnvironment === 'android') { %>
|
|
10
|
+
// capabilities for local Appium web tests on an Android Emulator
|
|
11
|
+
platformName: 'Android',
|
|
12
|
+
browserName: 'Chrome',
|
|
13
|
+
'appium:deviceName': 'Android GoogleAPI Emulator',
|
|
14
|
+
'appium:platformVersion': '12.0',
|
|
15
|
+
'appium:automationName': 'UiAutomator2'<%
|
|
16
|
+
} else if (answers.mobileEnvironment === 'ios') { %>
|
|
17
|
+
// capabilities for local Appium web tests on iOS
|
|
18
|
+
platformName: 'iOS',
|
|
19
|
+
browserName: 'Safari',
|
|
20
|
+
'appium:deviceName': 'iPhone Simulator',
|
|
21
|
+
'appium:platformVersion': '16.4',
|
|
22
|
+
'appium:automationName': 'XCUITest'<%
|
|
23
|
+
} else if (answers.purpose === 'macos') { %>
|
|
24
|
+
platformName: 'Mac',
|
|
25
|
+
'appium:automationName': 'Mac2',
|
|
26
|
+
'appium:bundleId': '<%= answers.generateTestFiles ? 'com.apple.calculator' : '...' %>'<%
|
|
27
|
+
} else if (answers.purpose === 'vscode') { %>
|
|
28
|
+
browserName: 'vscode',
|
|
29
|
+
browserVersion: 'stable', // also possible: "insiders" or a specific version e.g. "1.80.0"
|
|
30
|
+
'wdio:vscodeOptions': {
|
|
31
|
+
// points to directory where extension package.json is located
|
|
32
|
+
extensionPath: __dirname,
|
|
33
|
+
// optional VS Code settings
|
|
34
|
+
userSettings: {
|
|
35
|
+
"editor.fontSize": 14
|
|
36
|
+
}
|
|
37
|
+
}<%
|
|
38
|
+
} else if (answers.purpose === 'electron') { %>
|
|
39
|
+
// no need to define any capabilities for local Electron web tests
|
|
40
|
+
// since service plugin takes care of setting everything up<%
|
|
41
|
+
} else {
|
|
42
|
+
%>
|
|
43
|
+
// capabilities for local browser web tests
|
|
44
|
+
browserName: 'chrome' // or "firefox", "microsoftedge", "safari"<%
|
|
45
|
+
} %>
|
|
46
|
+
}],
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { browser } from '@wdio/globals'
|
|
2
|
+
|
|
3
|
+
describe('Electron Testing', () => {
|
|
4
|
+
it('should print application metadata', async () => {
|
|
5
|
+
const appName = await browser.electron.app('getName')
|
|
6
|
+
const appVersion = await browser.electron.app('getVersion')
|
|
7
|
+
console.log('Testing Electron app:', appName, appVersion)
|
|
8
|
+
})
|
|
9
|
+
})
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { expect, $ } from '@wdio/globals'
|
|
2
|
+
|
|
3
|
+
describe('MacOS Testing', () => {
|
|
4
|
+
it('should calculate the meaning of life', async function () {
|
|
5
|
+
await $('//XCUIElementTypeButton[@label="seven"]').click()
|
|
6
|
+
await $('//XCUIElementTypeButton[@label="multiply"]').click()
|
|
7
|
+
await $('//XCUIElementTypeButton[@label="six"]').click()
|
|
8
|
+
await $('//XCUIElementTypeButton[@title="="]').click()
|
|
9
|
+
await expect($('//XCUIElementTypeStaticText[@label="main display"]')).toHaveText('42')
|
|
10
|
+
})
|
|
11
|
+
})
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
services: [<%- answers.services.map((service) => {
|
|
2
|
+
if (service === 'electron') {
|
|
3
|
+
return /*js*/`[
|
|
4
|
+
'electron',
|
|
5
|
+
{
|
|
6
|
+
appPath: '${answers.appPath}',
|
|
7
|
+
appName: productName,
|
|
8
|
+
appArgs: ['foo', 'bar=baz'],
|
|
9
|
+
chromedriver: {
|
|
10
|
+
logFileName: 'wdio-chromedriver.log',
|
|
11
|
+
},
|
|
12
|
+
electronVersion: '23.1.0',
|
|
13
|
+
}
|
|
14
|
+
]`
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return `'${service}'`
|
|
18
|
+
}) %>],
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* test with page objects
|
|
3
|
+
*/
|
|
4
|
+
<%- answers.isUsingTypeScript || answers.esmSupport
|
|
5
|
+
? `import LoginPage from '${answers.relativePath}/login.page${answers.esmSupport ? '.js' : ''}'`
|
|
6
|
+
: `const LoginPage = require('${answers.relativePath}/login.page')` %>
|
|
7
|
+
<%- answers.isUsingTypeScript || answers.esmSupport
|
|
8
|
+
? `import SecurePage from '${answers.relativePath}/secure.page${answers.esmSupport ? '.js' : ''}'`
|
|
9
|
+
: `const SecurePage = require('${answers.relativePath}/secure.page')` %>
|
|
10
|
+
|
|
11
|
+
describe('My Login application', () => {
|
|
12
|
+
it('should login with valid credentials', async () => {
|
|
13
|
+
await LoginPage.open()
|
|
14
|
+
|
|
15
|
+
await LoginPage.login('tomsmith', 'SuperSecretPassword!')
|
|
16
|
+
await expect(SecurePage.flashAlert).toBeExisting()
|
|
17
|
+
await expect(SecurePage.flashAlert).toHaveTextContaining(
|
|
18
|
+
'You logged into a secure area!')
|
|
19
|
+
})
|
|
20
|
+
})
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* test without page objects
|
|
3
|
+
*/
|
|
4
|
+
describe('My Login application', () => {
|
|
5
|
+
it('should login with valid credentials', async () => {
|
|
6
|
+
await browser.url(`https://the-internet.herokuapp.com/login`)
|
|
7
|
+
|
|
8
|
+
await $('#username').setValue('tomsmith')
|
|
9
|
+
await $('#password').setValue('SuperSecretPassword!')
|
|
10
|
+
await $('button[type="submit"]').click()
|
|
11
|
+
|
|
12
|
+
await expect($('#flash')).toBeExisting()
|
|
13
|
+
await expect($('#flash')).toHaveTextContaining(
|
|
14
|
+
'You logged into a secure area!')
|
|
15
|
+
})
|
|
16
|
+
})
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { browser } from '@wdio/globals'
|
|
2
|
+
|
|
3
|
+
describe('VS Code Extension Testing', () => {
|
|
4
|
+
it('should be able to load VSCode', async () => {
|
|
5
|
+
const workbench = await browser.getWorkbench()
|
|
6
|
+
expect(await workbench.getTitleBar().getTitle())
|
|
7
|
+
.toContain('[Extension Development Host]')
|
|
8
|
+
})
|
|
9
|
+
})
|
|
@@ -1,7 +1,20 @@
|
|
|
1
|
-
<%
|
|
1
|
+
<%
|
|
2
|
+
if (answers.purpose === 'electron') {
|
|
3
|
+
%>import fs from 'node:fs'
|
|
4
|
+
<% }
|
|
5
|
+
|
|
6
|
+
if (answers.isUsingTypeScript) {
|
|
2
7
|
%>import type { Options } from '@wdio/types'
|
|
8
|
+
<% }
|
|
9
|
+
|
|
10
|
+
if (answers.purpose === 'electron') { %>
|
|
11
|
+
const packageJson = JSON.parse(fs.readFileSync('./package.json', 'utf-8'))
|
|
12
|
+
const productName = packageJson.build.productName
|
|
13
|
+
|
|
14
|
+
<% }
|
|
3
15
|
|
|
4
|
-
|
|
16
|
+
if (answers.isUsingTypeScript) {
|
|
17
|
+
%>export const config: Options.Testrunner = {<%
|
|
5
18
|
} else if (answers.esmSupport) {
|
|
6
19
|
%>export const config = {<%
|
|
7
20
|
} else {
|
|
@@ -35,16 +48,15 @@ export const config: Options.Testrunner = {<%
|
|
|
35
48
|
transpileOnly: true
|
|
36
49
|
}
|
|
37
50
|
},
|
|
38
|
-
<% }
|
|
39
|
-
|
|
51
|
+
<% }
|
|
52
|
+
if(answers.expEnvAccessKey){ %>
|
|
40
53
|
hostname: '<%- answers.expEnvHostname %>',
|
|
41
54
|
<% if (answers.expEnvPort === '443'){%>protocol: 'https',
|
|
42
55
|
<%} else if (answers.expEnvPort === '80'){%>protocol: 'http',
|
|
43
56
|
<%} else { %>protocol: '<%- answers.expEnvProtocol %>',<%}%>
|
|
44
57
|
port: <%- answers.expEnvPort %>,
|
|
45
58
|
path: '/wd/hub',
|
|
46
|
-
<% } else if(answers.hostname && answers.port) {
|
|
47
|
-
//
|
|
59
|
+
<% } else if(answers.hostname && answers.port) { %>//
|
|
48
60
|
// =====================
|
|
49
61
|
// Server Configurations
|
|
50
62
|
// =====================
|
|
@@ -126,25 +138,7 @@ export const config: Options.Testrunner = {<%
|
|
|
126
138
|
// Sauce Labs platform configurator - a great tool to configure your capabilities:
|
|
127
139
|
// https://saucelabs.com/platform/platform-configurator
|
|
128
140
|
//
|
|
129
|
-
capabilities
|
|
130
|
-
if (answers.expEnvAccessKey) { %>
|
|
131
|
-
// Experitest Access Key
|
|
132
|
-
// get more information at https://docs.experitest.com/display/TE/Obtaining+Access+Key
|
|
133
|
-
'experitest:accessKey': '<%- answers.expEnvAccessKey %>',<%
|
|
134
|
-
}
|
|
135
|
-
if (answers.setupMobileEnvironment) { %>
|
|
136
|
-
// capabilities for local Appium web tests on an Android Emulator
|
|
137
|
-
platformName: 'Android', // or "iOS"
|
|
138
|
-
browserName: 'Chrome', // or "Safari"
|
|
139
|
-
'appium:deviceName': 'Android GoogleAPI Emulator', // or "iPhone Simulator"
|
|
140
|
-
'appium:platformVersion': '12.0', // or "16.2" (for running iOS v16)
|
|
141
|
-
'appium:automationName': 'UiAutomator2' // or "XCUITest"<%
|
|
142
|
-
} else {
|
|
143
|
-
%>
|
|
144
|
-
// capabilities for local browser web tests
|
|
145
|
-
browserName: 'chrome' // or "firefox", "microsoftedge", "safari"<%
|
|
146
|
-
} %>
|
|
147
|
-
}],
|
|
141
|
+
<%- include('snippets/capabilities', { answers }) %>
|
|
148
142
|
//
|
|
149
143
|
// ===================
|
|
150
144
|
// Test Configurations
|
|
@@ -193,8 +187,8 @@ export const config: Options.Testrunner = {<%
|
|
|
193
187
|
// your test setup with almost no effort. Unlike plugins, they don't add new
|
|
194
188
|
// commands. Instead, they hook themselves up into the test process.
|
|
195
189
|
<% if(answers.services.length) {
|
|
196
|
-
|
|
197
|
-
|
|
190
|
+
%><%- include('snippets/services', { answers }) %><%
|
|
191
|
+
} else {
|
|
198
192
|
%>// services: [],
|
|
199
193
|
//<% } %>
|
|
200
194
|
// Framework you want to run your specs with.
|
|
@@ -214,7 +208,7 @@ export const config: Options.Testrunner = {<%
|
|
|
214
208
|
// Whether or not retried spec files should be retried immediately or deferred to the end of the queue
|
|
215
209
|
// specFileRetriesDeferred: false,
|
|
216
210
|
//
|
|
217
|
-
<%- include('reporters', { reporters: answers.reporters }) %>
|
|
211
|
+
<%- include('snippets/reporters', { reporters: answers.reporters }) %>
|
|
218
212
|
<% if(answers.framework === 'mocha') { %>
|
|
219
213
|
//
|
|
220
214
|
// Options to be passed to Mocha.
|
|
@@ -351,7 +345,7 @@ export const config: Options.Testrunner = {<%
|
|
|
351
345
|
*/
|
|
352
346
|
// afterHook: function (test, context, { error, result, duration, passed, retries }) {
|
|
353
347
|
// },
|
|
354
|
-
<%- include('afterTest', { reporters: answers.reporters }) %>
|
|
348
|
+
<%- include('snippets/afterTest', { reporters: answers.reporters }) %>
|
|
355
349
|
/**
|
|
356
350
|
* Hook that gets executed after the suite has ended
|
|
357
351
|
* @param {object} suite suite details
|
package/build/types.d.ts
CHANGED
|
@@ -5,7 +5,8 @@ export interface Questionnair {
|
|
|
5
5
|
runner: string;
|
|
6
6
|
preset?: string;
|
|
7
7
|
installTestingLibrary?: boolean;
|
|
8
|
-
|
|
8
|
+
appPath?: string;
|
|
9
|
+
backend?: typeof BACKEND_CHOICES[number];
|
|
9
10
|
hostname?: string;
|
|
10
11
|
port?: string;
|
|
11
12
|
path?: string;
|
|
@@ -32,12 +33,15 @@ export interface Questionnair {
|
|
|
32
33
|
createPackageJSON?: boolean;
|
|
33
34
|
projectRootCorrect?: boolean;
|
|
34
35
|
projectRoot?: string;
|
|
35
|
-
|
|
36
|
+
e2eEnvironment?: 'web' | 'mobile';
|
|
37
|
+
mobileEnvironment?: 'android' | 'ios';
|
|
38
|
+
browserEnvironment?: ('chrome' | 'firefox' | 'safari' | 'microsoftedge')[];
|
|
36
39
|
}
|
|
37
40
|
export interface ParsedAnswers extends Omit<Questionnair, 'runner' | 'framework' | 'reporters' | 'services' | 'plugins'> {
|
|
38
41
|
rawAnswers: Questionnair;
|
|
39
42
|
runner: 'local' | 'browser';
|
|
40
43
|
framework: string;
|
|
44
|
+
purpose: string;
|
|
41
45
|
reporters: string[];
|
|
42
46
|
plugins: string[];
|
|
43
47
|
services: string[];
|
|
@@ -105,6 +109,7 @@ export interface ConfigCommandArguments {
|
|
|
105
109
|
export interface SupportedPackage {
|
|
106
110
|
package: string;
|
|
107
111
|
short: string;
|
|
112
|
+
purpose: string;
|
|
108
113
|
}
|
|
109
114
|
export interface OnCompleteResult {
|
|
110
115
|
finished: number;
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAE7F,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,OAAO,EAAE,OAAO,eAAe,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/build/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAetD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAGhD,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAMlE,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAQrI,eAAO,MAAM,UAAU,SAAuC,MAAM,QAAQ,OAAO,MAAM,EAAE,GAAG,CAAC,KAAK,QAAQ,MAAM,CAAC,CAAA;AAEnH,qBAAa,SAAU,SAAQ,kBAAkB;IACtC,MAAM,EAAE,MAAM,CAAA;gBACT,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI9C;AAED;;GAEG;AACH,wBAAsB,cAAc,CAChC,QAAQ,EAAE,QAAQ,CAAC,eAAe,EAAE,EACpC,QAAQ,EAAE,MAAM,QAAQ,CAAC,aAAa,EACtC,GAAG,IAAI,EAAE,GAAG,EAAE,sBA2BjB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,yBAmBhF;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACnC,cAAc,EAAE,QAAQ,GAAG,QAAQ,EAAE,EACrC,MAAM,EAAE,OAAO,CAAC,UAAU,EAC1B,YAAY,EAAE,YAAY,CAAC,kBAAkB,EAC7C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,gBAAgB,sBAkB5B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE,YAAY,CAAC,mBAAwB,UAexE;AAoBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,2BASxD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sBAYvE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,UAAQ,QA0C3F;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,SAAS,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/build/utils.js
CHANGED
|
@@ -198,11 +198,8 @@ export function addServiceDeps(names, packages, update = false) {
|
|
|
198
198
|
* @todo add JSComments
|
|
199
199
|
*/
|
|
200
200
|
export function convertPackageHashToObject(pkg, hash = '$--$') {
|
|
201
|
-
const
|
|
202
|
-
return {
|
|
203
|
-
package: splitHash[0],
|
|
204
|
-
short: splitHash[1]
|
|
205
|
-
};
|
|
201
|
+
const [p, short, purpose] = pkg.split(hash);
|
|
202
|
+
return { package: p, short, purpose };
|
|
206
203
|
}
|
|
207
204
|
export const validateServiceAnswers = (answers) => {
|
|
208
205
|
let result = true;
|
|
@@ -363,15 +360,13 @@ export async function generateBrowserRunnerTestFiles(answers) {
|
|
|
363
360
|
async function generateLocalRunnerTestFiles(answers) {
|
|
364
361
|
const testFiles = answers.framework === 'cucumber'
|
|
365
362
|
? [path.join(TEMPLATE_ROOT_DIR, 'cucumber')]
|
|
366
|
-
: (
|
|
367
|
-
? [path.join(TEMPLATE_ROOT_DIR, 'mocha')]
|
|
368
|
-
: [path.join(TEMPLATE_ROOT_DIR, 'jasmine')]);
|
|
363
|
+
: [path.join(TEMPLATE_ROOT_DIR, 'mochaJasmine')];
|
|
369
364
|
if (answers.usePageObjects) {
|
|
370
365
|
testFiles.push(path.join(TEMPLATE_ROOT_DIR, 'pageobjects'));
|
|
371
366
|
}
|
|
372
367
|
const files = (await Promise.all(testFiles.map((dirPath) => readDir(dirPath, [(file, stats) => !stats.isDirectory() && !(file.endsWith('.ejs') || file.endsWith('.feature'))])))).reduce((cur, acc) => [...acc, ...(cur)], []);
|
|
373
368
|
for (const file of files) {
|
|
374
|
-
const renderedTpl = await renderFile(file, answers);
|
|
369
|
+
const renderedTpl = await renderFile(file, { answers });
|
|
375
370
|
const isJSX = answers.preset && ['preact', 'react'].includes(answers.preset);
|
|
376
371
|
const fileEnding = (answers.isUsingTypeScript ? '.ts' : '.js') + (isJSX ? 'x' : '');
|
|
377
372
|
const destPath = (file.endsWith('page.js.ejs')
|
|
@@ -385,7 +380,7 @@ async function generateLocalRunnerTestFiles(answers) {
|
|
|
385
380
|
}
|
|
386
381
|
export async function getAnswers(yes) {
|
|
387
382
|
if (yes) {
|
|
388
|
-
const ignoredQuestions = ['
|
|
383
|
+
const ignoredQuestions = ['e2eEnvironment'];
|
|
389
384
|
const filterdQuestionaire = QUESTIONNAIRE.filter((question) => !ignoredQuestions.includes(question.name));
|
|
390
385
|
const answers = filterdQuestionaire.reduce((answers, question) => Object.assign(answers, question.when && !question.when(answers)
|
|
391
386
|
/**
|
|
@@ -609,6 +604,18 @@ export function npmInstall(parsedAnswers, useYarn, npmTag) {
|
|
|
609
604
|
if (parsedAnswers.framework === 'jasmine' && parsedAnswers.isUsingTypeScript) {
|
|
610
605
|
parsedAnswers.packagesToInstall.push('@types/jasmine');
|
|
611
606
|
}
|
|
607
|
+
/**
|
|
608
|
+
* add Appium mobile drivers if desired
|
|
609
|
+
*/
|
|
610
|
+
if (parsedAnswers.purpose === 'macos') {
|
|
611
|
+
parsedAnswers.packagesToInstall.push('appium-mac2-driver');
|
|
612
|
+
}
|
|
613
|
+
if (parsedAnswers.mobileEnvironment === 'android') {
|
|
614
|
+
parsedAnswers.packagesToInstall.push('appium-uiautomator2-driver');
|
|
615
|
+
}
|
|
616
|
+
if (parsedAnswers.mobileEnvironment === 'ios') {
|
|
617
|
+
parsedAnswers.packagesToInstall.push('appium-xcuitest-driver');
|
|
618
|
+
}
|
|
612
619
|
/**
|
|
613
620
|
* add packages that are required by services
|
|
614
621
|
*/
|
|
@@ -746,7 +753,7 @@ export async function createWDIOScript(parsedAnswers) {
|
|
|
746
753
|
}
|
|
747
754
|
}
|
|
748
755
|
export async function runAppiumInstaller(parsedAnswers) {
|
|
749
|
-
if (
|
|
756
|
+
if (parsedAnswers.e2eEnvironment !== 'mobile') {
|
|
750
757
|
return;
|
|
751
758
|
}
|
|
752
759
|
const answer = await inquirer.prompt({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wdio/cli",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.12.0",
|
|
4
4
|
"description": "WebdriverIO testrunner command line interface",
|
|
5
5
|
"author": "Christian Bromann <mail@bromann.dev>",
|
|
6
6
|
"homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-cli",
|
|
@@ -82,5 +82,5 @@
|
|
|
82
82
|
"publishConfig": {
|
|
83
83
|
"access": "public"
|
|
84
84
|
},
|
|
85
|
-
"gitHead": "
|
|
85
|
+
"gitHead": "23b4ff40c94c0d83cd807815cd60bb40ad9b2c9f"
|
|
86
86
|
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
<%
|
|
2
|
-
/**
|
|
3
|
-
* step definition without page objects
|
|
4
|
-
*/
|
|
5
|
-
if (usePageObjects) {
|
|
6
|
-
%><%- isUsingTypeScript || esmSupport
|
|
7
|
-
? `import LoginPage from '${relativePath}/login.page${esmSupport ? '.js' : ''}';`
|
|
8
|
-
: `const LoginPage = require('${relativePath}/login.page');` %>
|
|
9
|
-
<%- isUsingTypeScript || esmSupport
|
|
10
|
-
? `import SecurePage from '${relativePath}/secure.page${esmSupport ? '.js' : ''}';`
|
|
11
|
-
: `const SecurePage = require('${relativePath}/secure.page');` %>
|
|
12
|
-
|
|
13
|
-
describe('My Login application', () => {
|
|
14
|
-
it('should login with valid credentials', async () => {
|
|
15
|
-
await LoginPage.open();
|
|
16
|
-
|
|
17
|
-
await LoginPage.login('tomsmith', 'SuperSecretPassword!');
|
|
18
|
-
await expect(SecurePage.flashAlert).toBeExisting();
|
|
19
|
-
await expect(SecurePage.flashAlert).toHaveTextContaining(
|
|
20
|
-
'You logged into a secure area!');
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
<% } else {
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* step definition with page objects
|
|
28
|
-
*/
|
|
29
|
-
%>describe('My Login application', () => {
|
|
30
|
-
it('should login with valid credentials', async () => {
|
|
31
|
-
await browser.url(`https://the-internet.herokuapp.com/login`);
|
|
32
|
-
|
|
33
|
-
await $('#username').setValue('tomsmith');
|
|
34
|
-
await $('#password').setValue('SuperSecretPassword!');
|
|
35
|
-
await $('button[type="submit"]').click();
|
|
36
|
-
|
|
37
|
-
await expect($('#flash')).toBeExisting();
|
|
38
|
-
await expect($('#flash')).toHaveTextContaining(
|
|
39
|
-
'You logged into a secure area!');
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
<% } %>
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
<%
|
|
2
|
-
/**
|
|
3
|
-
* test with page objects
|
|
4
|
-
*/
|
|
5
|
-
if (usePageObjects) {
|
|
6
|
-
%><%- isUsingTypeScript || esmSupport
|
|
7
|
-
? `import LoginPage from '${relativePath}/login.page${esmSupport ? '.js' : ''}'`
|
|
8
|
-
: `const LoginPage = require('${relativePath}/login.page')` %>
|
|
9
|
-
<%- isUsingTypeScript || esmSupport
|
|
10
|
-
? `import SecurePage from '${relativePath}/secure.page${esmSupport ? '.js' : ''}'`
|
|
11
|
-
: `const SecurePage = require('${relativePath}/secure.page')` %>
|
|
12
|
-
|
|
13
|
-
describe('My Login application', () => {
|
|
14
|
-
it('should login with valid credentials', async () => {
|
|
15
|
-
await LoginPage.open()
|
|
16
|
-
|
|
17
|
-
await LoginPage.login('tomsmith', 'SuperSecretPassword!')
|
|
18
|
-
await expect(SecurePage.flashAlert).toBeExisting()
|
|
19
|
-
await expect(SecurePage.flashAlert).toHaveTextContaining(
|
|
20
|
-
'You logged into a secure area!')
|
|
21
|
-
})
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
<% } else {
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* test without page objects
|
|
28
|
-
*/
|
|
29
|
-
%>describe('My Login application', () => {
|
|
30
|
-
it('should login with valid credentials', async () => {
|
|
31
|
-
await browser.url(`https://the-internet.herokuapp.com/login`)
|
|
32
|
-
|
|
33
|
-
await $('#username').setValue('tomsmith')
|
|
34
|
-
await $('#password').setValue('SuperSecretPassword!')
|
|
35
|
-
await $('button[type="submit"]').click()
|
|
36
|
-
|
|
37
|
-
await expect($('#flash')).toBeExisting()
|
|
38
|
-
await expect($('#flash')).toHaveTextContaining(
|
|
39
|
-
'You logged into a secure area!')
|
|
40
|
-
})
|
|
41
|
-
})
|
|
42
|
-
<% } %>
|
|
File without changes
|
|
File without changes
|