@wdio/runner 8.0.3 → 8.0.5

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,7 +1,9 @@
1
1
  import type { Capabilities } from '@wdio/types';
2
2
  import type BaseReporter from './reporter';
3
3
  import type { TestFramework } from './types';
4
- type WDIOErrorEvent = Pick<ErrorEvent, 'filename' | 'message'>;
4
+ type WDIOErrorEvent = Partial<Pick<ErrorEvent, 'filename' | 'message'>> & {
5
+ hasViteError?: boolean;
6
+ };
5
7
  declare global {
6
8
  interface Window {
7
9
  __wdioErrors__: WDIOErrorEvent[];
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,aAAa,CAAA;AAExD,OAAO,KAAK,YAAY,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAK5C,KAAK,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC,CAAA;AAE9D,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,cAAc,EAAE,cAAc,EAAE,CAAA;QAChC,cAAc,EAAE,GAAG,EAAE,CAAA;QACrB,gBAAgB,EAAE,MAAM,CAAA;KAC3B;CACJ;AAID,MAAM,CAAC,OAAO,OAAO,gBAAiB,YAAW,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;;IAIpE,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;gBAJT,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EAC/B,MAAM,EAAE,MAAM,EAAE,EAChB,aAAa,EAAE,YAAY,CAAC,gBAAgB,EAC5C,SAAS,EAAE,YAAY;IAMnC;;OAEG;IACH,QAAQ;IAIR,IAAI;IAIE,GAAG;IA0GT,MAAM,CAAC,IAAI,CAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,gBAAgB,EAAE,QAAQ,EAAE,YAAY;CAItH"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAW,MAAM,aAAa,CAAA;AAExD,OAAO,KAAK,YAAY,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAK5C,KAAK,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC,GAAG;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAOpG,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,MAAM;QACZ,cAAc,EAAE,cAAc,EAAE,CAAA;QAChC,cAAc,EAAE,GAAG,EAAE,CAAA;QACrB,gBAAgB,EAAE,MAAM,CAAA;KAC3B;CACJ;AAID,MAAM,CAAC,OAAO,OAAO,gBAAiB,YAAW,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;;IAIpE,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;gBAJT,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EAC/B,MAAM,EAAE,MAAM,EAAE,EAChB,aAAa,EAAE,YAAY,CAAC,gBAAgB,EAC5C,SAAS,EAAE,YAAY;IAMnC;;OAEG;IACH,QAAQ;IAIR,IAAI;IAIE,GAAG;IAoHT,MAAM,CAAC,IAAI,CAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,gBAAgB,EAAE,QAAQ,EAAE,YAAY;CAItH"}
package/build/browser.js CHANGED
@@ -58,15 +58,49 @@ export default class BrowserFramework {
58
58
  }
59
59
  // await browser.debug()
60
60
  /**
61
- * fetch page errors that are thrown during rendering and let spec file fail
61
+ * wait for test results or page errors
62
62
  */
63
- const jsErrors = (await browser.execute(() => window.__wdioErrors__ || [{
64
- // if `__wdioErrors__` is not defined we ended up in on an error page
65
- message: 'Failed to load test page'
66
- }]));
67
- if (jsErrors.length) {
68
- const errors = jsErrors.map((ev) => `${path.basename(ev.filename || spec)}: ${ev.message}`);
69
- const { name, message, stack } = new Error(`Test failed due to following error(s):${sep}${errors.join(sep)}`);
63
+ let state = {};
64
+ await browser.waitUntil(async () => {
65
+ while (typeof state.failures !== 'number' && (!state.errors || state.errors.length === 0)) {
66
+ await sleep();
67
+ /**
68
+ * don't fetch events if user has called debug command
69
+ */
70
+ if (this.#inDebugMode) {
71
+ continue;
72
+ }
73
+ state = await browser?.execute(() => {
74
+ const failures = window.__wdioEvents__ && window.__wdioEvents__.length > 0
75
+ ? window.__wdioFailures__
76
+ : null;
77
+ let viteError;
78
+ const viteErrorElem = document.querySelector('vite-error-overlay');
79
+ if (viteErrorElem && viteErrorElem.shadowRoot) {
80
+ const errorElems = Array.from(viteErrorElem.shadowRoot.querySelectorAll('pre'));
81
+ if (errorElems.length) {
82
+ viteError = errorElems.map((elem) => ({ message: elem.innerText }));
83
+ }
84
+ }
85
+ const loadError = typeof window.__wdioErrors__ === 'undefined'
86
+ ? [{ message: 'Failed to load test page' }]
87
+ : null;
88
+ const errors = viteError || window.__wdioErrors__ || loadError;
89
+ return { failures, errors, hasViteError: Boolean(viteError) };
90
+ }).catch((err) => ({ errors: [{ message: err.message }] }));
91
+ }
92
+ return true;
93
+ }, {
94
+ timeoutMsg: 'browser test timed out',
95
+ timeout: 15 * 1000
96
+ });
97
+ if (state.errors?.length) {
98
+ const errors = state.errors.map((ev) => state.hasViteError
99
+ ? ev.message
100
+ : `${path.basename(ev.filename || spec)}: ${ev.message}`);
101
+ const { name, message, stack } = new Error(state.hasViteError
102
+ ? `Test failed due to the following error: ${errors.join('\n')}`
103
+ : `Test failed due to following error(s):${sep}${errors.join(sep)}`);
70
104
  process.send({
71
105
  origin: 'worker',
72
106
  name: 'error',
@@ -75,33 +109,12 @@ export default class BrowserFramework {
75
109
  failures += 1;
76
110
  continue;
77
111
  }
78
- failures += await this.#fetchEvents(browser, spec, ++uid);
112
+ await this.#fetchEvents(browser, spec, ++uid);
113
+ failures += state.failures || 0;
79
114
  }
80
115
  return failures;
81
116
  }
82
117
  async #fetchEvents(browser, spec, uid) {
83
- /**
84
- * wait until tests have finished and results are emitted to the window scope
85
- */
86
- let failures = null;
87
- await browser.waitUntil(async () => {
88
- while (typeof failures !== 'number') {
89
- await sleep();
90
- /**
91
- * don't fetch events if user has called debug command
92
- */
93
- if (this.#inDebugMode) {
94
- continue;
95
- }
96
- failures = await browser?.execute(() => (window.__wdioEvents__.length > 0
97
- ? window.__wdioFailures__
98
- : null));
99
- }
100
- return true;
101
- }, {
102
- timeoutMsg: 'browser test timed out',
103
- timeout: 15 * 1000
104
- });
105
118
  /**
106
119
  * populate events to the reporter
107
120
  */
@@ -117,7 +130,6 @@ export default class BrowserFramework {
117
130
  cid: this._cid
118
131
  });
119
132
  }
120
- return failures;
121
133
  }
122
134
  #switchDebugState(cmd) {
123
135
  this.#inDebugMode = cmd.args;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wdio/runner",
3
- "version": "8.0.3",
3
+ "version": "8.0.5",
4
4
  "description": "A WebdriverIO service that runs tests in arbitrary environments",
5
5
  "author": "Christian Bromann <mail@bromann.dev>",
6
6
  "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-runner",
@@ -27,18 +27,18 @@
27
27
  "typeScriptVersion": "3.8.3",
28
28
  "dependencies": {
29
29
  "@wdio/config": "8.0.2",
30
- "@wdio/globals": "8.0.2",
30
+ "@wdio/globals": "8.0.5",
31
31
  "@wdio/logger": "8.0.0",
32
32
  "@wdio/types": "8.0.0",
33
33
  "@wdio/utils": "8.0.2",
34
34
  "deepmerge-ts": "^4.2.2",
35
- "expect-webdriverio": "^4.0.0-alpha.3",
35
+ "expect-webdriverio": "^4.0.1",
36
36
  "gaze": "^1.1.2",
37
37
  "webdriver": "8.0.2",
38
- "webdriverio": "8.0.2"
38
+ "webdriverio": "8.0.5"
39
39
  },
40
40
  "publishConfig": {
41
41
  "access": "public"
42
42
  },
43
- "gitHead": "a1883b44e736f00b7602f28bed910ace4d514c7e"
43
+ "gitHead": "3c1364b37331acc9124d7f5378937252d069936b"
44
44
  }