creevey 0.10.0-beta.2 → 0.10.0-beta.4
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/dist/client/addon/controller.js +4 -5
- package/dist/client/addon/controller.js.map +1 -1
- package/dist/client/addon/withCreevey.js +10 -34
- package/dist/client/addon/withCreevey.js.map +1 -1
- package/dist/creevey.js +1 -0
- package/dist/creevey.js.map +1 -1
- package/dist/server/config.js +2 -2
- package/dist/server/config.js.map +1 -1
- package/dist/server/index.js +22 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/master/pool.js +2 -0
- package/dist/server/master/pool.js.map +1 -1
- package/dist/server/playwright/internal.js +26 -17
- package/dist/server/playwright/internal.js.map +1 -1
- package/dist/server/reporter.js +1 -1
- package/dist/server/reporter.js.map +1 -1
- package/dist/server/selenium/internal.js +4 -5
- package/dist/server/selenium/internal.js.map +1 -1
- package/dist/server/selenium/selenoid.js +2 -2
- package/dist/server/selenium/selenoid.js.map +1 -1
- package/dist/server/telemetry.js +7 -3
- package/dist/server/telemetry.js.map +1 -1
- package/dist/types.d.ts +24 -9
- package/dist/types.js +13 -1
- package/dist/types.js.map +1 -1
- package/package.json +6 -10
- package/src/client/addon/controller.ts +13 -6
- package/src/client/addon/withCreevey.ts +19 -12
- package/src/creevey.ts +1 -0
- package/src/server/config.ts +2 -2
- package/src/server/index.ts +19 -2
- package/src/server/master/pool.ts +2 -0
- package/src/server/playwright/internal.ts +46 -21
- package/src/server/reporter.ts +1 -1
- package/src/server/selenium/internal.ts +6 -6
- package/src/server/selenium/selenoid.ts +2 -2
- package/src/server/telemetry.ts +7 -3
- package/src/types.ts +26 -11
@@ -3,8 +3,16 @@ import Logger from 'loglevel';
|
|
3
3
|
import chalk from 'chalk';
|
4
4
|
import { v4 } from 'uuid';
|
5
5
|
import prefix from 'loglevel-plugin-prefix';
|
6
|
-
import {
|
7
|
-
|
6
|
+
import {
|
7
|
+
BrowserConfigObject,
|
8
|
+
Config,
|
9
|
+
Options,
|
10
|
+
StoriesRaw,
|
11
|
+
StoryInput,
|
12
|
+
StorybookEvents,
|
13
|
+
StorybookGlobals,
|
14
|
+
noop,
|
15
|
+
} from '../../types';
|
8
16
|
import { subscribeOn } from '../messages';
|
9
17
|
import { appendIframePath, getAddresses, LOCALHOST_REGEXP, resolveStorybookUrl, storybookRootID } from '../webdriver';
|
10
18
|
import { isShuttingDown, runSequence } from '../utils';
|
@@ -140,7 +148,7 @@ export class InternalBrowser {
|
|
140
148
|
});
|
141
149
|
});
|
142
150
|
},
|
143
|
-
[story.id, updatedArgs, UPDATE_STORY_ARGS, STORY_RENDERED] as const,
|
151
|
+
[story.id, updatedArgs, StorybookEvents.UPDATE_STORY_ARGS, StorybookEvents.STORY_RENDERED] as const,
|
144
152
|
);
|
145
153
|
}
|
146
154
|
|
@@ -167,26 +175,43 @@ export class InternalBrowser {
|
|
167
175
|
options: Options,
|
168
176
|
): Promise<InternalBrowser | null> {
|
169
177
|
const browserConfig = config.browsers[browserName] as BrowserConfigObject;
|
170
|
-
const {
|
178
|
+
const {
|
179
|
+
storybookUrl: address = config.storybookUrl,
|
180
|
+
viewport,
|
181
|
+
_storybookGlobals,
|
182
|
+
seleniumCapabilities,
|
183
|
+
playwrightOptions,
|
184
|
+
} = browserConfig;
|
171
185
|
|
172
186
|
let browser: Browser | null = null;
|
173
187
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
188
|
+
if (new URL(gridUrl).protocol === 'ws:') {
|
189
|
+
switch (browserConfig.browserName) {
|
190
|
+
case 'chromium':
|
191
|
+
browser = await tryConnect(chromium, gridUrl);
|
192
|
+
break;
|
193
|
+
case 'firefox':
|
194
|
+
browser = await tryConnect(firefox, gridUrl);
|
195
|
+
break;
|
196
|
+
case 'webkit':
|
197
|
+
browser = await tryConnect(webkit, gridUrl);
|
198
|
+
break;
|
199
|
+
|
200
|
+
default:
|
201
|
+
logger.error(
|
202
|
+
`Unknown browser ${browserConfig.browserName}. Playwright supports browsers: chromium, firefox, webkit`,
|
203
|
+
);
|
204
|
+
}
|
205
|
+
} else {
|
206
|
+
if (browserConfig.browserName != 'chrome') {
|
207
|
+
logger.error("Playwright's Selenium Grid feature supports only chrome browser");
|
208
|
+
return null;
|
209
|
+
}
|
210
|
+
|
211
|
+
process.env.SELENIUM_REMOTE_URL = gridUrl;
|
212
|
+
process.env.SELENIUM_REMOTE_CAPABILITIES = JSON.stringify(seleniumCapabilities);
|
213
|
+
|
214
|
+
browser = await chromium.launch(playwrightOptions);
|
190
215
|
}
|
191
216
|
|
192
217
|
if (!browser) {
|
@@ -317,7 +342,7 @@ export class InternalBrowser {
|
|
317
342
|
if (typeof window.__STORYBOOK_ADDONS_CHANNEL__ == 'undefined') return true;
|
318
343
|
if (window.__STORYBOOK_ADDONS_CHANNEL__.last(SET_GLOBALS) == undefined) return true;
|
319
344
|
return false;
|
320
|
-
}, SET_GLOBALS);
|
345
|
+
}, StorybookEvents.SET_GLOBALS);
|
321
346
|
} catch (e: unknown) {
|
322
347
|
this.#logger.debug('An error has been caught during the script:', e);
|
323
348
|
}
|
package/src/server/reporter.ts
CHANGED
@@ -34,7 +34,7 @@ export class CreeveyReporter {
|
|
34
34
|
testLogger.warn(chalk.cyan(test.titlePath().join('/')));
|
35
35
|
});
|
36
36
|
runner.on(TEST_EVENTS.TEST_PASS, (test: FakeTest) => {
|
37
|
-
testLogger.info(chalk.cyan(test.titlePath().join('/')));
|
37
|
+
testLogger.info(chalk.cyan(test.titlePath().join('/')), chalk.gray(`(${test.duration} ms)`));
|
38
38
|
});
|
39
39
|
runner.on(TEST_EVENTS.TEST_FAIL, (test: FakeTest, error) => {
|
40
40
|
testLogger.error(
|
@@ -1,5 +1,4 @@
|
|
1
1
|
import { Args } from '@storybook/csf';
|
2
|
-
import { SET_GLOBALS, UPDATE_STORY_ARGS, STORY_RENDERED } from '@storybook/core-events';
|
3
2
|
import chalk from 'chalk';
|
4
3
|
import http from 'http';
|
5
4
|
import https from 'https';
|
@@ -22,6 +21,7 @@ import {
|
|
22
21
|
StoriesRaw,
|
23
22
|
Options,
|
24
23
|
ServerTest,
|
24
|
+
StorybookEvents,
|
25
25
|
} from '../../types.js';
|
26
26
|
import { colors, logger } from '../logger.js';
|
27
27
|
import { subscribeOn } from '../messages.js';
|
@@ -100,7 +100,7 @@ async function buildWebdriver(
|
|
100
100
|
options: Options,
|
101
101
|
): Promise<WebDriver | null> {
|
102
102
|
const browserConfig = config.browsers[browserName] as BrowserConfigObject;
|
103
|
-
const {
|
103
|
+
const { /*customizeBuilder,*/ seleniumCapabilities } = browserConfig;
|
104
104
|
|
105
105
|
const url = new URL(gridUrl);
|
106
106
|
url.username = url.username ? '********' : '';
|
@@ -108,7 +108,7 @@ async function buildWebdriver(
|
|
108
108
|
logger.debug(`(${browserName}) Connecting to Selenium ${chalk.magenta(url.toString())}`);
|
109
109
|
|
110
110
|
// TODO Define some capabilities explicitly and define typings
|
111
|
-
const capabilities = new Capabilities({ ...
|
111
|
+
const capabilities = new Capabilities({ ...seleniumCapabilities, pageLoadStrategy: PageLoadStrategy.EAGER });
|
112
112
|
const prefs = new logging.Preferences();
|
113
113
|
|
114
114
|
if (options.trace) {
|
@@ -338,8 +338,8 @@ export class InternalBrowser {
|
|
338
338
|
},
|
339
339
|
story.id,
|
340
340
|
updatedArgs,
|
341
|
-
UPDATE_STORY_ARGS,
|
342
|
-
STORY_RENDERED,
|
341
|
+
StorybookEvents.UPDATE_STORY_ARGS,
|
342
|
+
StorybookEvents.STORY_RENDERED,
|
343
343
|
);
|
344
344
|
}
|
345
345
|
|
@@ -544,7 +544,7 @@ export class InternalBrowser {
|
|
544
544
|
if (typeof window.__STORYBOOK_ADDONS_CHANNEL__ == 'undefined') return true;
|
545
545
|
if (window.__STORYBOOK_ADDONS_CHANNEL__.last(SET_GLOBALS) == undefined) return true;
|
546
546
|
return false;
|
547
|
-
}, SET_GLOBALS);
|
547
|
+
}, StorybookEvents.SET_GLOBALS);
|
548
548
|
} catch (e: unknown) {
|
549
549
|
this.#logger.debug('An error has been caught during the script:', e);
|
550
550
|
}
|
@@ -30,7 +30,7 @@ async function createSelenoidConfig(
|
|
30
30
|
browsers.forEach(
|
31
31
|
({
|
32
32
|
browserName,
|
33
|
-
browserVersion = 'latest',
|
33
|
+
seleniumCapabilities: { browserVersion = 'latest' } = {},
|
34
34
|
dockerImage = `selenoid/${browserName}:${browserVersion}`,
|
35
35
|
webdriverCommand = [],
|
36
36
|
}) => {
|
@@ -117,7 +117,7 @@ export async function startSelenoidContainer(config: Config, debug: boolean): Pr
|
|
117
117
|
browsers.forEach(
|
118
118
|
({
|
119
119
|
browserName,
|
120
|
-
browserVersion = 'latest',
|
120
|
+
seleniumCapabilities: { browserVersion = 'latest' } = {},
|
121
121
|
limit: browserLimit = 1,
|
122
122
|
dockerImage = `selenoid/${browserName}:${browserVersion}`,
|
123
123
|
}) => {
|
package/src/server/telemetry.ts
CHANGED
@@ -154,12 +154,16 @@ export async function sendScreenshotsCount(
|
|
154
154
|
name: name,
|
155
155
|
gridUrl: browser.gridUrl ? sanitizeGridUrl(browser.gridUrl) : undefined,
|
156
156
|
browserName: browser.browserName,
|
157
|
-
|
158
|
-
|
157
|
+
// @ts-expect-error Support old config version
|
158
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
159
|
+
browserVersion: browser.seleniumCapabilities?.browserVersion ?? browser.browserVersion,
|
160
|
+
// @ts-expect-error Support old config version
|
161
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
162
|
+
platformName: browser.seleniumCapabilities?.platformName ?? browser.platformName,
|
159
163
|
viewport: browser.viewport,
|
160
164
|
limit: browser.limit,
|
161
165
|
dockerImage: browser.dockerImage,
|
162
|
-
'se:teamname': browser['se:teamname'],
|
166
|
+
'se:teamname': browser.seleniumCapabilities?.['se:teamname'],
|
163
167
|
}
|
164
168
|
: browser,
|
165
169
|
]),
|
package/src/types.ts
CHANGED
@@ -5,6 +5,7 @@ import type { ODiffOptions } from 'odiff-bin';
|
|
5
5
|
import type { expect } from 'chai';
|
6
6
|
import type EventEmitter from 'events';
|
7
7
|
import type Logger from 'loglevel';
|
8
|
+
import { LaunchOptions } from 'playwright-core';
|
8
9
|
// import type { Browser } from 'playwright-core';
|
9
10
|
|
10
11
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
@@ -41,6 +42,18 @@ export interface StoryMeta {
|
|
41
42
|
};
|
42
43
|
}
|
43
44
|
|
45
|
+
export enum StorybookEvents {
|
46
|
+
SET_STORIES = 'setStories',
|
47
|
+
SET_CURRENT_STORY = 'setCurrentStory',
|
48
|
+
FORCE_REMOUNT = 'forceRemount',
|
49
|
+
STORY_RENDERED = 'storyRendered',
|
50
|
+
STORY_ERRORED = 'storyErrored',
|
51
|
+
STORY_THREW_EXCEPTION = 'storyThrewException',
|
52
|
+
UPDATE_STORY_ARGS = 'updateStoryArgs',
|
53
|
+
SET_GLOBALS = 'setGlobals',
|
54
|
+
UPDATE_GLOBALS = 'updateGlobals',
|
55
|
+
}
|
56
|
+
|
44
57
|
export interface CreeveyMeta {
|
45
58
|
parameters?: {
|
46
59
|
creevey?: CreeveyStoryParams;
|
@@ -91,14 +104,6 @@ export class ChromeConfig {
|
|
91
104
|
*/
|
92
105
|
export interface BrowserConfigObject {
|
93
106
|
browserName: string;
|
94
|
-
/**
|
95
|
-
* Browser version. Ignored with Playwright webdriver
|
96
|
-
*/
|
97
|
-
browserVersion?: string;
|
98
|
-
/**
|
99
|
-
* Operation system name. Ignored with Playwright webdriver
|
100
|
-
*/
|
101
|
-
platformName?: string;
|
102
107
|
// customizeBuilder?: (builder: Builder) => Builder;
|
103
108
|
limit?: number;
|
104
109
|
/**
|
@@ -122,15 +127,25 @@ export interface BrowserConfigObject {
|
|
122
127
|
* Used only with `useDocker == false`
|
123
128
|
*/
|
124
129
|
webdriverCommand?: string[];
|
125
|
-
// TODO Check version compatibility
|
126
|
-
// playwrightVersion?: string;
|
127
130
|
// /**
|
128
131
|
// * Use to start standalone playwright browser
|
129
132
|
// */
|
130
133
|
// playwrightBrowser?: () => Promise<Browser>;
|
131
134
|
viewport?: { width: number; height: number };
|
132
135
|
|
133
|
-
|
136
|
+
seleniumCapabilities?: {
|
137
|
+
/**
|
138
|
+
* Browser version. Ignored with Playwright webdriver
|
139
|
+
*/
|
140
|
+
browserVersion?: string;
|
141
|
+
/**
|
142
|
+
* Operation system name. Ignored with Playwright webdriver
|
143
|
+
*/
|
144
|
+
platformName?: string;
|
145
|
+
[name: string]: unknown;
|
146
|
+
};
|
147
|
+
|
148
|
+
playwrightOptions?: Omit<LaunchOptions, 'logger'>;
|
134
149
|
}
|
135
150
|
|
136
151
|
export type StorybookGlobals = Record<string, unknown>;
|