codeceptjs 3.5.0 → 3.5.1-2.beta.7
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/README.md +24 -25
- package/lib/actor.js +6 -3
- package/lib/ai.js +12 -3
- package/lib/cli.js +12 -2
- package/lib/codecept.js +4 -0
- package/lib/colorUtils.js +10 -0
- package/lib/command/definitions.js +2 -7
- package/lib/command/dryRun.js +2 -1
- package/lib/command/info.js +24 -0
- package/lib/command/init.js +51 -5
- package/lib/command/run-multiple/collection.js +17 -5
- package/lib/command/run-multiple.js +4 -2
- package/lib/command/run-workers.js +66 -4
- package/lib/command/run.js +7 -0
- package/lib/command/workers/runTests.js +39 -0
- package/lib/data/context.js +14 -6
- package/lib/event.js +4 -0
- package/lib/helper/ApiDataFactory.js +2 -1
- package/lib/helper/Appium.js +73 -24
- package/lib/helper/Expect.js +422 -0
- package/lib/helper/FileSystem.js +1 -1
- package/lib/helper/GraphQL.js +25 -0
- package/lib/helper/Nightmare.js +9 -4
- package/lib/helper/OpenAI.js +14 -10
- package/lib/helper/Playwright.js +1205 -288
- package/lib/helper/Protractor.js +11 -6
- package/lib/helper/Puppeteer.js +173 -61
- package/lib/helper/TestCafe.js +44 -9
- package/lib/helper/WebDriver.js +231 -82
- package/lib/helper/errors/ElementNotFound.js +2 -1
- package/lib/helper/extras/PlaywrightReactVueLocator.js +38 -0
- package/lib/helper/scripts/blurElement.js +17 -0
- package/lib/helper/scripts/focusElement.js +17 -0
- package/lib/helper/scripts/highlightElement.js +2 -2
- package/lib/html.js +3 -3
- package/lib/interfaces/bdd.js +1 -1
- package/lib/interfaces/gherkin.js +37 -3
- package/lib/interfaces/scenarioConfig.js +1 -0
- package/lib/locator.js +17 -4
- package/lib/mochaFactory.js +2 -1
- package/lib/output.js +1 -1
- package/lib/pause.js +12 -9
- package/lib/plugin/autoLogin.js +45 -10
- package/lib/plugin/heal.js +47 -17
- package/lib/plugin/retryFailedStep.js +10 -1
- package/lib/plugin/retryTo.js +2 -4
- package/lib/plugin/selenoid.js +6 -1
- package/lib/plugin/standardActingHelpers.js +0 -2
- package/lib/plugin/stepByStepReport.js +2 -2
- package/lib/plugin/tryTo.js +5 -7
- package/lib/plugin/wdio.js +0 -1
- package/lib/recorder.js +20 -9
- package/lib/session.js +1 -1
- package/lib/step.js +30 -11
- package/lib/ui.js +1 -0
- package/lib/utils.js +18 -1
- package/lib/workers.js +28 -3
- package/package.json +108 -98
- package/translations/de-DE.js +5 -0
- package/translations/fr-FR.js +14 -1
- package/translations/it-IT.js +1 -0
- package/translations/ja-JP.js +5 -0
- package/translations/pl-PL.js +5 -0
- package/translations/pt-BR.js +1 -0
- package/translations/ru-RU.js +1 -0
- package/translations/zh-CN.js +5 -0
- package/translations/zh-TW.js +5 -0
- package/typings/index.d.ts +8 -6
- package/typings/promiseBasedTypes.d.ts +784 -822
- package/typings/types.d.ts +1214 -727
- package/CHANGELOG.md +0 -2492
- package/docs/advanced.md +0 -351
- package/docs/ai.md +0 -246
- package/docs/api.md +0 -323
- package/docs/basics.md +0 -980
- package/docs/bdd.md +0 -535
- package/docs/best.md +0 -237
- package/docs/books.md +0 -37
- package/docs/bootstrap.md +0 -135
- package/docs/build/ApiDataFactory.js +0 -409
- package/docs/build/Appium.js +0 -1978
- package/docs/build/FileSystem.js +0 -228
- package/docs/build/GraphQL.js +0 -204
- package/docs/build/GraphQLDataFactory.js +0 -309
- package/docs/build/JSONResponse.js +0 -338
- package/docs/build/Mochawesome.js +0 -71
- package/docs/build/Nightmare.js +0 -2147
- package/docs/build/OpenAI.js +0 -122
- package/docs/build/Playwright.js +0 -4134
- package/docs/build/Polly.js +0 -42
- package/docs/build/Protractor.js +0 -2701
- package/docs/build/Puppeteer.js +0 -3743
- package/docs/build/REST.js +0 -344
- package/docs/build/SeleniumWebdriver.js +0 -76
- package/docs/build/TestCafe.js +0 -2059
- package/docs/build/WebDriver.js +0 -4042
- package/docs/changelog.md +0 -2501
- package/docs/commands.md +0 -254
- package/docs/community-helpers.md +0 -58
- package/docs/configuration.md +0 -157
- package/docs/continuous-integration.md +0 -22
- package/docs/custom-helpers.md +0 -306
- package/docs/data.md +0 -375
- package/docs/detox.md +0 -235
- package/docs/docker.md +0 -137
- package/docs/email.md +0 -183
- package/docs/examples.md +0 -149
- package/docs/helpers/ApiDataFactory.md +0 -266
- package/docs/helpers/Appium.md +0 -1317
- package/docs/helpers/Detox.md +0 -586
- package/docs/helpers/FileSystem.md +0 -152
- package/docs/helpers/GraphQL.md +0 -130
- package/docs/helpers/GraphQLDataFactory.md +0 -226
- package/docs/helpers/JSONResponse.md +0 -254
- package/docs/helpers/Mochawesome.md +0 -8
- package/docs/helpers/MockRequest.md +0 -377
- package/docs/helpers/Nightmare.md +0 -1258
- package/docs/helpers/OpenAI.md +0 -70
- package/docs/helpers/Playwright.md +0 -2250
- package/docs/helpers/Polly.md +0 -44
- package/docs/helpers/Puppeteer-firefox.md +0 -86
- package/docs/helpers/Puppeteer.md +0 -2147
- package/docs/helpers/REST.md +0 -218
- package/docs/helpers/TestCafe.md +0 -1224
- package/docs/helpers/WebDriver.md +0 -2325
- package/docs/hooks.md +0 -340
- package/docs/index.md +0 -111
- package/docs/installation.md +0 -75
- package/docs/internal-api.md +0 -265
- package/docs/locators.md +0 -331
- package/docs/mobile-react-native-locators.md +0 -67
- package/docs/mobile.md +0 -344
- package/docs/nightmare.md +0 -223
- package/docs/pageobjects.md +0 -291
- package/docs/parallel.md +0 -288
- package/docs/playwright.md +0 -609
- package/docs/plugins.md +0 -1225
- package/docs/puppeteer.md +0 -316
- package/docs/quickstart.md +0 -163
- package/docs/react.md +0 -69
- package/docs/reports.md +0 -392
- package/docs/secrets.md +0 -36
- package/docs/shadow.md +0 -68
- package/docs/shared/keys.mustache +0 -31
- package/docs/shared/react.mustache +0 -1
- package/docs/testcafe.md +0 -174
- package/docs/translation.md +0 -247
- package/docs/tutorial.md +0 -271
- package/docs/typescript.md +0 -180
- package/docs/ui.md +0 -59
- package/docs/videos.md +0 -28
- package/docs/visual.md +0 -202
- package/docs/vue.md +0 -121
- package/docs/webapi/amOnPage.mustache +0 -11
- package/docs/webapi/appendField.mustache +0 -11
- package/docs/webapi/attachFile.mustache +0 -12
- package/docs/webapi/checkOption.mustache +0 -13
- package/docs/webapi/clearCookie.mustache +0 -10
- package/docs/webapi/clearField.mustache +0 -9
- package/docs/webapi/click.mustache +0 -25
- package/docs/webapi/clickLink.mustache +0 -8
- package/docs/webapi/closeCurrentTab.mustache +0 -7
- package/docs/webapi/closeOtherTabs.mustache +0 -8
- package/docs/webapi/dontSee.mustache +0 -11
- package/docs/webapi/dontSeeCheckboxIsChecked.mustache +0 -10
- package/docs/webapi/dontSeeCookie.mustache +0 -8
- package/docs/webapi/dontSeeCurrentUrlEquals.mustache +0 -10
- package/docs/webapi/dontSeeElement.mustache +0 -8
- package/docs/webapi/dontSeeElementInDOM.mustache +0 -8
- package/docs/webapi/dontSeeInCurrentUrl.mustache +0 -4
- package/docs/webapi/dontSeeInField.mustache +0 -11
- package/docs/webapi/dontSeeInSource.mustache +0 -8
- package/docs/webapi/dontSeeInTitle.mustache +0 -8
- package/docs/webapi/doubleClick.mustache +0 -13
- package/docs/webapi/downloadFile.mustache +0 -12
- package/docs/webapi/dragAndDrop.mustache +0 -9
- package/docs/webapi/dragSlider.mustache +0 -11
- package/docs/webapi/executeAsyncScript.mustache +0 -24
- package/docs/webapi/executeScript.mustache +0 -26
- package/docs/webapi/fillField.mustache +0 -16
- package/docs/webapi/forceClick.mustache +0 -28
- package/docs/webapi/forceRightClick.mustache +0 -18
- package/docs/webapi/grabAllWindowHandles.mustache +0 -7
- package/docs/webapi/grabAttributeFrom.mustache +0 -10
- package/docs/webapi/grabAttributeFromAll.mustache +0 -9
- package/docs/webapi/grabBrowserLogs.mustache +0 -9
- package/docs/webapi/grabCookie.mustache +0 -11
- package/docs/webapi/grabCssPropertyFrom.mustache +0 -11
- package/docs/webapi/grabCssPropertyFromAll.mustache +0 -10
- package/docs/webapi/grabCurrentUrl.mustache +0 -9
- package/docs/webapi/grabCurrentWindowHandle.mustache +0 -6
- package/docs/webapi/grabDataFromPerformanceTiming.mustache +0 -20
- package/docs/webapi/grabElementBoundingRect.mustache +0 -20
- package/docs/webapi/grabGeoLocation.mustache +0 -8
- package/docs/webapi/grabHTMLFrom.mustache +0 -10
- package/docs/webapi/grabHTMLFromAll.mustache +0 -9
- package/docs/webapi/grabNumberOfOpenTabs.mustache +0 -8
- package/docs/webapi/grabNumberOfVisibleElements.mustache +0 -9
- package/docs/webapi/grabPageScrollPosition.mustache +0 -8
- package/docs/webapi/grabPopupText.mustache +0 -5
- package/docs/webapi/grabSource.mustache +0 -8
- package/docs/webapi/grabTextFrom.mustache +0 -10
- package/docs/webapi/grabTextFromAll.mustache +0 -9
- package/docs/webapi/grabTitle.mustache +0 -8
- package/docs/webapi/grabValueFrom.mustache +0 -9
- package/docs/webapi/grabValueFromAll.mustache +0 -8
- package/docs/webapi/moveCursorTo.mustache +0 -12
- package/docs/webapi/openNewTab.mustache +0 -7
- package/docs/webapi/pressKey.mustache +0 -12
- package/docs/webapi/pressKeyDown.mustache +0 -12
- package/docs/webapi/pressKeyUp.mustache +0 -12
- package/docs/webapi/pressKeyWithKeyNormalization.mustache +0 -60
- package/docs/webapi/refreshPage.mustache +0 -6
- package/docs/webapi/resizeWindow.mustache +0 -6
- package/docs/webapi/rightClick.mustache +0 -14
- package/docs/webapi/saveElementScreenshot.mustache +0 -10
- package/docs/webapi/saveScreenshot.mustache +0 -12
- package/docs/webapi/say.mustache +0 -10
- package/docs/webapi/scrollIntoView.mustache +0 -11
- package/docs/webapi/scrollPageToBottom.mustache +0 -6
- package/docs/webapi/scrollPageToTop.mustache +0 -6
- package/docs/webapi/scrollTo.mustache +0 -12
- package/docs/webapi/see.mustache +0 -11
- package/docs/webapi/seeAttributesOnElements.mustache +0 -9
- package/docs/webapi/seeCheckboxIsChecked.mustache +0 -10
- package/docs/webapi/seeCookie.mustache +0 -8
- package/docs/webapi/seeCssPropertiesOnElements.mustache +0 -9
- package/docs/webapi/seeCurrentUrlEquals.mustache +0 -11
- package/docs/webapi/seeElement.mustache +0 -8
- package/docs/webapi/seeElementInDOM.mustache +0 -8
- package/docs/webapi/seeInCurrentUrl.mustache +0 -8
- package/docs/webapi/seeInField.mustache +0 -12
- package/docs/webapi/seeInPopup.mustache +0 -8
- package/docs/webapi/seeInSource.mustache +0 -7
- package/docs/webapi/seeInTitle.mustache +0 -8
- package/docs/webapi/seeNumberOfElements.mustache +0 -11
- package/docs/webapi/seeNumberOfVisibleElements.mustache +0 -10
- package/docs/webapi/seeTextEquals.mustache +0 -9
- package/docs/webapi/seeTitleEquals.mustache +0 -8
- package/docs/webapi/selectOption.mustache +0 -21
- package/docs/webapi/setCookie.mustache +0 -16
- package/docs/webapi/setGeoLocation.mustache +0 -12
- package/docs/webapi/switchTo.mustache +0 -9
- package/docs/webapi/switchToNextTab.mustache +0 -10
- package/docs/webapi/switchToPreviousTab.mustache +0 -10
- package/docs/webapi/type.mustache +0 -21
- package/docs/webapi/uncheckOption.mustache +0 -13
- package/docs/webapi/wait.mustache +0 -8
- package/docs/webapi/waitForClickable.mustache +0 -11
- package/docs/webapi/waitForDetached.mustache +0 -10
- package/docs/webapi/waitForElement.mustache +0 -11
- package/docs/webapi/waitForEnabled.mustache +0 -6
- package/docs/webapi/waitForFunction.mustache +0 -17
- package/docs/webapi/waitForInvisible.mustache +0 -10
- package/docs/webapi/waitForText.mustache +0 -13
- package/docs/webapi/waitForValue.mustache +0 -10
- package/docs/webapi/waitForVisible.mustache +0 -10
- package/docs/webapi/waitInUrl.mustache +0 -9
- package/docs/webapi/waitNumberOfVisibleElements.mustache +0 -10
- package/docs/webapi/waitToHide.mustache +0 -10
- package/docs/webapi/waitUrlEquals.mustache +0 -10
- package/docs/webdriver.md +0 -657
- package/docs/wiki/Books-&-Posts.md +0 -27
- package/docs/wiki/Community-Helpers-&-Plugins.md +0 -49
- package/docs/wiki/Converting-Playwright-to-Istanbul-Coverage.md +0 -29
- package/docs/wiki/Examples.md +0 -139
- package/docs/wiki/Google-Summer-of-Code-(GSoC)-2020.md +0 -68
- package/docs/wiki/Home.md +0 -16
- package/docs/wiki/Release-Process.md +0 -24
- package/docs/wiki/Roadmap.md +0 -23
- package/docs/wiki/Tests.md +0 -1393
- package/docs/wiki/Upgrading-to-CodeceptJS-3.md +0 -153
- package/docs/wiki/Videos.md +0 -19
package/docs/build/REST.js
DELETED
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
const axios = require('axios').default;
|
|
2
|
-
const Helper = require('@codeceptjs/helper');
|
|
3
|
-
const Secret = require('../secret');
|
|
4
|
-
|
|
5
|
-
const { beautify } = require('../utils');
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* ## Configuration
|
|
9
|
-
*
|
|
10
|
-
* @typedef RESTConfig
|
|
11
|
-
* @type {object}
|
|
12
|
-
* @prop {string} [endpoint] - API base URL
|
|
13
|
-
* @prop {boolean} [prettyPrintJson=false] - pretty print json for response/request on console logs
|
|
14
|
-
* @prop {number} [timeout=1000] - timeout for requests in milliseconds. 10000ms by default
|
|
15
|
-
* @prop {object} [defaultHeaders] - a list of default headers
|
|
16
|
-
* @prop {function} [onRequest] - a async function which can update request object.
|
|
17
|
-
* @prop {function} [onResponse] - a async function which can update response object.
|
|
18
|
-
* @prop {number} [maxUploadFileSize] - set the max content file size in MB when performing api calls.
|
|
19
|
-
*/
|
|
20
|
-
const config = {};
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* REST helper allows to send additional requests to the REST API during acceptance tests.
|
|
24
|
-
* [Axios](https://github.com/axios/axios) library is used to perform requests.
|
|
25
|
-
*
|
|
26
|
-
* <!-- configuration -->
|
|
27
|
-
*
|
|
28
|
-
* ## Example
|
|
29
|
-
*
|
|
30
|
-
* ```js
|
|
31
|
-
*{
|
|
32
|
-
* helpers: {
|
|
33
|
-
* REST: {
|
|
34
|
-
* endpoint: 'http://site.com/api',
|
|
35
|
-
* prettyPrintJson: true,
|
|
36
|
-
* onRequest: (request) => {
|
|
37
|
-
* request.headers.auth = '123';
|
|
38
|
-
* }
|
|
39
|
-
* }
|
|
40
|
-
* }
|
|
41
|
-
*}
|
|
42
|
-
* ```
|
|
43
|
-
*
|
|
44
|
-
* ## Access From Helpers
|
|
45
|
-
*
|
|
46
|
-
* Send REST requests by accessing `_executeRequest` method:
|
|
47
|
-
*
|
|
48
|
-
* ```js
|
|
49
|
-
* this.helpers['REST']._executeRequest({
|
|
50
|
-
* url,
|
|
51
|
-
* data,
|
|
52
|
-
* });
|
|
53
|
-
* ```
|
|
54
|
-
*
|
|
55
|
-
* ## Methods
|
|
56
|
-
*/
|
|
57
|
-
class REST extends Helper {
|
|
58
|
-
constructor(config) {
|
|
59
|
-
super(config);
|
|
60
|
-
this.options = {
|
|
61
|
-
timeout: 10000,
|
|
62
|
-
defaultHeaders: {},
|
|
63
|
-
endpoint: '',
|
|
64
|
-
prettyPrintJson: false,
|
|
65
|
-
onRequest: null,
|
|
66
|
-
onResponse: null,
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
if (this.options.maxContentLength) {
|
|
70
|
-
const maxContentLength = this.options.maxUploadFileSize * 1024 * 1024;
|
|
71
|
-
this.options.maxContentLength = maxContentLength;
|
|
72
|
-
this.options.maxBodyLength = maxContentLength;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
this.options = { ...this.options, ...config };
|
|
76
|
-
this.headers = { ...this.options.defaultHeaders };
|
|
77
|
-
this.axios = axios.create();
|
|
78
|
-
this.axios.defaults.headers = this.options.defaultHeaders;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
static _config() {
|
|
82
|
-
return [
|
|
83
|
-
{ name: 'endpoint', message: 'Endpoint of API you are going to test', default: 'http://localhost:3000/api' },
|
|
84
|
-
];
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
static _checkRequirements() {
|
|
88
|
-
try {
|
|
89
|
-
require('axios');
|
|
90
|
-
} catch (e) {
|
|
91
|
-
return ['axios'];
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
_before() {
|
|
96
|
-
this.headers = { ...this.options.defaultHeaders };
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Sets request headers for all requests of this test
|
|
101
|
-
*
|
|
102
|
-
* @param {object} headers headers list
|
|
103
|
-
*/
|
|
104
|
-
haveRequestHeaders(headers) {
|
|
105
|
-
this.headers = { ...this.headers, ...headers };
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Adds a header for Bearer authentication
|
|
110
|
-
*
|
|
111
|
-
* ```js
|
|
112
|
-
* // we use secret function to hide token from logs
|
|
113
|
-
* I.amBearerAuthenticated(secret('heregoestoken'))
|
|
114
|
-
* ```
|
|
115
|
-
*
|
|
116
|
-
* @param {string | CodeceptJS.Secret} accessToken Bearer access token
|
|
117
|
-
*/
|
|
118
|
-
amBearerAuthenticated(accessToken) {
|
|
119
|
-
this.haveRequestHeaders({ Authorization: `Bearer ${accessToken}` });
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Executes axios request
|
|
124
|
-
*
|
|
125
|
-
* @param {*} request
|
|
126
|
-
*
|
|
127
|
-
* @returns {Promise<*>} response
|
|
128
|
-
*/
|
|
129
|
-
async _executeRequest(request) {
|
|
130
|
-
// Add custom headers. They can be set by amBearerAuthenticated() or haveRequestHeaders()
|
|
131
|
-
request.headers = { ...this.headers, ...request.headers };
|
|
132
|
-
|
|
133
|
-
const _debugRequest = { ...request };
|
|
134
|
-
this.axios.defaults.timeout = request.timeout || this.options.timeout;
|
|
135
|
-
|
|
136
|
-
if (this.headers && this.headers.auth) {
|
|
137
|
-
request.auth = this.headers.auth;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (typeof request.data === 'object') {
|
|
141
|
-
const returnedValue = {};
|
|
142
|
-
for (const [key, value] of Object.entries(request.data)) {
|
|
143
|
-
returnedValue[key] = value;
|
|
144
|
-
if (value instanceof Secret) returnedValue[key] = value.getMasked();
|
|
145
|
-
}
|
|
146
|
-
_debugRequest.data = returnedValue;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
if (request.data instanceof Secret) {
|
|
150
|
-
_debugRequest.data = '*****';
|
|
151
|
-
request.data = (typeof request.data === 'object' && !(request.data instanceof Secret)) ? { ...request.data.toString() } : request.data.toString();
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
if ((typeof request.data) === 'string') {
|
|
155
|
-
if (!request.headers || !request.headers['Content-Type']) {
|
|
156
|
-
request.headers = { ...request.headers, ...{ 'Content-Type': 'application/x-www-form-urlencoded' } };
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (this.config.onRequest) {
|
|
161
|
-
await this.config.onRequest(request);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
this.options.prettyPrintJson ? this.debugSection('Request', beautify(JSON.stringify(_debugRequest))) : this.debugSection('Request', JSON.stringify(_debugRequest));
|
|
165
|
-
|
|
166
|
-
let response;
|
|
167
|
-
try {
|
|
168
|
-
response = await this.axios(request);
|
|
169
|
-
} catch (err) {
|
|
170
|
-
if (!err.response) throw err;
|
|
171
|
-
this.debugSection('Response', `Response error. Status code: ${err.response.status}`);
|
|
172
|
-
response = err.response;
|
|
173
|
-
}
|
|
174
|
-
if (this.config.onResponse) {
|
|
175
|
-
await this.config.onResponse(response);
|
|
176
|
-
}
|
|
177
|
-
this.options.prettyPrintJson ? this.debugSection('Response', beautify(JSON.stringify(response.data))) : this.debugSection('Response', JSON.stringify(response.data));
|
|
178
|
-
return response;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Generates url based on format sent (takes endpoint + url if latter lacks 'http')
|
|
183
|
-
*
|
|
184
|
-
* @param {*} url
|
|
185
|
-
*/
|
|
186
|
-
_url(url) {
|
|
187
|
-
return /^\w+\:\/\//.test(url) ? url : this.options.endpoint + url;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Set timeout for the request
|
|
192
|
-
*
|
|
193
|
-
* ```js
|
|
194
|
-
* I.setRequestTimeout(10000); // In milliseconds
|
|
195
|
-
* ```
|
|
196
|
-
*
|
|
197
|
-
* @param {number} newTimeout - timeout in milliseconds
|
|
198
|
-
*/
|
|
199
|
-
setRequestTimeout(newTimeout) {
|
|
200
|
-
this.options.timeout = newTimeout;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Send GET request to REST API
|
|
205
|
-
*
|
|
206
|
-
* ```js
|
|
207
|
-
* I.sendGetRequest('/api/users.json');
|
|
208
|
-
* ```
|
|
209
|
-
*
|
|
210
|
-
* @param {*} url
|
|
211
|
-
* @param {object} [headers={}] - the headers object to be sent. By default, it is sent as an empty object
|
|
212
|
-
*
|
|
213
|
-
* @returns {Promise<*>} response
|
|
214
|
-
*/
|
|
215
|
-
async sendGetRequest(url, headers = {}) {
|
|
216
|
-
const request = {
|
|
217
|
-
baseURL: this._url(url),
|
|
218
|
-
headers,
|
|
219
|
-
};
|
|
220
|
-
return this._executeRequest(request);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Sends POST request to API.
|
|
225
|
-
*
|
|
226
|
-
* ```js
|
|
227
|
-
* I.sendPostRequest('/api/users.json', { "email": "user@user.com" });
|
|
228
|
-
*
|
|
229
|
-
* // To mask the payload in logs
|
|
230
|
-
* I.sendPostRequest('/api/users.json', secret({ "email": "user@user.com" }));
|
|
231
|
-
*
|
|
232
|
-
* ```
|
|
233
|
-
*
|
|
234
|
-
* @param {*} url
|
|
235
|
-
* @param {*} [payload={}] - the payload to be sent. By default, it is sent as an empty object
|
|
236
|
-
* @param {object} [headers={}] - the headers object to be sent. By default, it is sent as an empty object
|
|
237
|
-
*
|
|
238
|
-
* @returns {Promise<*>} response
|
|
239
|
-
*/
|
|
240
|
-
async sendPostRequest(url, payload = {}, headers = {}) {
|
|
241
|
-
const request = {
|
|
242
|
-
baseURL: this._url(url),
|
|
243
|
-
method: 'POST',
|
|
244
|
-
data: payload,
|
|
245
|
-
headers,
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
if (this.options.maxContentLength) {
|
|
249
|
-
request.maxContentLength = this.options.maxContentLength;
|
|
250
|
-
request.maxBodyLength = this.options.maxContentLength;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
return this._executeRequest(request);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Sends PATCH request to API.
|
|
258
|
-
*
|
|
259
|
-
* ```js
|
|
260
|
-
* I.sendPatchRequest('/api/users.json', { "email": "user@user.com" });
|
|
261
|
-
*
|
|
262
|
-
* // To mask the payload in logs
|
|
263
|
-
* I.sendPatchRequest('/api/users.json', secret({ "email": "user@user.com" }));
|
|
264
|
-
*
|
|
265
|
-
* ```
|
|
266
|
-
*
|
|
267
|
-
* @param {string} url
|
|
268
|
-
* @param {*} [payload={}] - the payload to be sent. By default it is sent as an empty object
|
|
269
|
-
* @param {object} [headers={}] - the headers object to be sent. By default it is sent as an empty object
|
|
270
|
-
*
|
|
271
|
-
* @returns {Promise<*>} response
|
|
272
|
-
*/
|
|
273
|
-
async sendPatchRequest(url, payload = {}, headers = {}) {
|
|
274
|
-
const request = {
|
|
275
|
-
baseURL: this._url(url),
|
|
276
|
-
method: 'PATCH',
|
|
277
|
-
data: payload,
|
|
278
|
-
headers,
|
|
279
|
-
};
|
|
280
|
-
|
|
281
|
-
if (this.options.maxContentLength) {
|
|
282
|
-
request.maxContentLength = this.options.maxContentLength;
|
|
283
|
-
request.maxBodyLength = this.options.maxBodyLength;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
return this._executeRequest(request);
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Sends PUT request to API.
|
|
291
|
-
*
|
|
292
|
-
* ```js
|
|
293
|
-
* I.sendPutRequest('/api/users.json', { "email": "user@user.com" });
|
|
294
|
-
*
|
|
295
|
-
* // To mask the payload in logs
|
|
296
|
-
* I.sendPutRequest('/api/users.json', secret({ "email": "user@user.com" }));
|
|
297
|
-
*
|
|
298
|
-
* ```
|
|
299
|
-
*
|
|
300
|
-
* @param {string} url
|
|
301
|
-
* @param {*} [payload={}] - the payload to be sent. By default it is sent as an empty object
|
|
302
|
-
* @param {object} [headers={}] - the headers object to be sent. By default it is sent as an empty object
|
|
303
|
-
*
|
|
304
|
-
* @returns {Promise<*>} response
|
|
305
|
-
*/
|
|
306
|
-
async sendPutRequest(url, payload = {}, headers = {}) {
|
|
307
|
-
const request = {
|
|
308
|
-
baseURL: this._url(url),
|
|
309
|
-
method: 'PUT',
|
|
310
|
-
data: payload,
|
|
311
|
-
headers,
|
|
312
|
-
};
|
|
313
|
-
|
|
314
|
-
if (this.options.maxContentLength) {
|
|
315
|
-
request.maxContentLength = this.options.maxContentLength;
|
|
316
|
-
request.maxBodyLength = this.options.maxBodyLength;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
return this._executeRequest(request);
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
/**
|
|
323
|
-
* Sends DELETE request to API.
|
|
324
|
-
*
|
|
325
|
-
* ```js
|
|
326
|
-
* I.sendDeleteRequest('/api/users/1');
|
|
327
|
-
* ```
|
|
328
|
-
*
|
|
329
|
-
* @param {*} url
|
|
330
|
-
* @param {object} [headers={}] - the headers object to be sent. By default, it is sent as an empty object
|
|
331
|
-
*
|
|
332
|
-
* @returns {Promise<*>} response
|
|
333
|
-
*/
|
|
334
|
-
async sendDeleteRequest(url, headers = {}) {
|
|
335
|
-
const request = {
|
|
336
|
-
baseURL: this._url(url),
|
|
337
|
-
method: 'DELETE',
|
|
338
|
-
headers,
|
|
339
|
-
};
|
|
340
|
-
|
|
341
|
-
return this._executeRequest(request);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
module.exports = REST;
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
const Helper = require('../helper');
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* SeleniumWebdriver helper is based on the official [Selenium Webdriver JS](https://www.npmjs.com/package/selenium-webdriver)
|
|
5
|
-
* library. It implements common web api methods (amOnPage, click, see).
|
|
6
|
-
*
|
|
7
|
-
* ## Backends
|
|
8
|
-
*
|
|
9
|
-
* ### Selenium Installation
|
|
10
|
-
*
|
|
11
|
-
* 1. Download [Selenium Server](http://docs.seleniumhq.org/download/)
|
|
12
|
-
* 2. For Chrome browser install [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/getting-started), for Firefox browser install [GeckoDriver](https://github.com/mozilla/geckodriver).
|
|
13
|
-
* 3. Launch the server: `java -jar selenium-server-standalone-3.xx.xxx.jar`. To locate Chromedriver binary use `-Dwebdriver.chrome.driver=./chromedriver` option. For Geckodriver use `-Dwebdriver.gecko.driver=`.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* ### PhantomJS Installation
|
|
17
|
-
*
|
|
18
|
-
* PhantomJS is a headless alternative to Selenium Server that implements [the WebDriver protocol](https://code.google.com/p/selenium/wiki/JsonWireProtocol).
|
|
19
|
-
* It allows you to run Selenium tests on a server without a GUI installed.
|
|
20
|
-
*
|
|
21
|
-
* 1. Download [PhantomJS](http://phantomjs.org/download.html)
|
|
22
|
-
* 2. Run PhantomJS in WebDriver mode: `phantomjs --webdriver=4444`
|
|
23
|
-
*
|
|
24
|
-
* ## Configuration
|
|
25
|
-
*
|
|
26
|
-
* This helper should be configured in codecept.json or codecept.conf.js
|
|
27
|
-
*
|
|
28
|
-
* * `url` - base url of website to be tested
|
|
29
|
-
* * `browser` - browser in which perform testing
|
|
30
|
-
* * `driver` - which protractor driver to use (local, direct, session, hosted, sauce, browserstack). By default set to 'hosted' which requires selenium server to be started.
|
|
31
|
-
* * `restart` - restart browser between tests (default: true).
|
|
32
|
-
* * `smartWait`: (optional) **enables SmartWait**; wait for additional milliseconds for element to appear. Enable for 5 secs: "smartWait": 5000
|
|
33
|
-
* * `disableScreenshots` (optional, default: false) - don't save screenshot on failure
|
|
34
|
-
* * `uniqueScreenshotNames` (optional, default: false) - option to prevent screenshot override if you have scenarios with the same name in different suites
|
|
35
|
-
* * `keepBrowserState` (optional, default: false) - keep browser state between tests when `restart` set to false.
|
|
36
|
-
* * `keepCookies` (optional, default: false) - keep cookies between tests when `restart` set to false.*
|
|
37
|
-
* * `seleniumAddress` - Selenium address to connect (default: http://localhost:4444/wd/hub)
|
|
38
|
-
* * `waitForTimeout`: (optional) sets default wait time in _ms_ for all `wait*` functions. 1000 by default;
|
|
39
|
-
* * `scriptTimeout`: (optional) sets default timeout for scripts in `executeAsync`. 1000 by default.
|
|
40
|
-
* * `windowSize`: (optional) default window size. Set to `maximize` or a dimension in the format `640x480`.
|
|
41
|
-
* * `manualStart` (optional, default: false) - do not start browser before a test, start it manually inside a helper with `this.helpers["WebDriverIO"]._startBrowser()`
|
|
42
|
-
* * `capabilities`: {} - list of [Desired Capabilities](https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities)
|
|
43
|
-
*
|
|
44
|
-
* Example:
|
|
45
|
-
*
|
|
46
|
-
* ```json
|
|
47
|
-
* {
|
|
48
|
-
* "helpers": {
|
|
49
|
-
* "SeleniumWebdriver" : {
|
|
50
|
-
* "url": "http://localhost",
|
|
51
|
-
* "browser": "chrome",
|
|
52
|
-
* "smartWait": 5000,
|
|
53
|
-
* "restart": false
|
|
54
|
-
* }
|
|
55
|
-
* }
|
|
56
|
-
* }
|
|
57
|
-
* ```
|
|
58
|
-
*
|
|
59
|
-
* ## Access From Helpers
|
|
60
|
-
*
|
|
61
|
-
* Receive a WebDriverIO client from a custom helper by accessing `browser` property:
|
|
62
|
-
*
|
|
63
|
-
* ```js
|
|
64
|
-
* this.helpers['SeleniumWebdriver'].browser
|
|
65
|
-
* ```
|
|
66
|
-
*
|
|
67
|
-
*/
|
|
68
|
-
class SeleniumWebdriver extends Helper {
|
|
69
|
-
constructor(config) {
|
|
70
|
-
console.log('SeleniumWebdriver helper is now alias to Protractor');
|
|
71
|
-
console.log('Please replace in your config: SeleniumWebdriver -> Protractor');
|
|
72
|
-
super(config);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
module.exports = SeleniumWebdriver;
|