Skip to content

Commit 58220fa

Browse files
committed
fix: fix testing-library errors
1 parent 9513440 commit 58220fa

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed

src/browser/queries/index.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ function findContainerWithExecute(container: ElementBase): WebdriverIO.Browser {
6060
return curContainer;
6161
}
6262

63+
const findBrowser = (container: ElementBase): WebdriverIO.Browser => {
64+
let browser: ElementBase | WebdriverIO.Browser = container;
65+
while ((browser as ElementBase).parent && browser.capabilities === undefined) {
66+
browser = (browser as ElementBase).parent;
67+
}
68+
return browser as WebdriverIO.Browser;
69+
};
70+
6371
async function injectDOMTestingLibrary(container: ElementBase) {
6472
const browser = findContainerWithExecute(container);
6573
const shouldInjectDTL = await browser.execute(function () {
@@ -126,6 +134,12 @@ async function executeQuery(query: QueryName, container: HTMLElement, ...args: S
126134
}
127135

128136
function deserializeArg(arg: SerializedArg): QueryArg {
137+
if (typeof arg === "object" && arg === null) {
138+
return undefined;
139+
}
140+
if (typeof arg === "object" && (arg as { nodeType?: string }).nodeType !== undefined) {
141+
return arg as QueryArg;
142+
}
129143
if (typeof arg === "object" && arg.serialized === "RegExp") {
130144
return eval(arg.RegExp);
131145
}
@@ -187,7 +201,8 @@ function createQuery(container: ElementBase & SelectorsBase, queryName: QueryNam
187201
return async (...args: QueryArg[]) => {
188202
await injectDOMTestingLibrary(container);
189203

190-
const result: SerializedQueryResult = await findContainerWithExecute(container).execute(
204+
const browser = findBrowser(container);
205+
const result: SerializedQueryResult = await browser.execute(
191206
executeQuery,
192207
queryName,
193208
container as unknown as HTMLElement,

src/browser/queries/types.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,6 @@ export type TestplaneQueries = {
4545
[P in keyof Queries]: BoundFunction<WebdriverIO.Element, WebdriverIO.Element[], Queries[P]>;
4646
};
4747

48-
export type TestplaneQueriesSync = {
49-
[P in keyof Queries]: BoundFunctionSync<WebdriverIO.Element, WebdriverIO.Element[], Queries[P]>;
50-
};
51-
5248
export type TestplaneQueriesChainable<Container extends SelectorsBase | undefined = SelectorsBase> = {
5349
[P in keyof Queries as `${string & P}$`]: Container extends SelectorsBase
5450
? BoundFunctionSync<ReturnType<Container["$"]>, ReturnType<Container["$$"]>, Queries[P]>
@@ -68,3 +64,10 @@ export type SerializedRegExp = { serialized: "RegExp"; RegExp: string };
6864
export type SerializedUndefined = { serialized: "Undefined"; Undefined: true };
6965

7066
export type SerializedArg = SerializedObject | SerializedRegExp | SerializedUndefined | number | string;
67+
68+
declare global {
69+
// eslint-disable-next-line @typescript-eslint/no-namespace
70+
namespace WebdriverIO {
71+
interface Element extends TestplaneQueries {}
72+
}
73+
}

src/browser/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { OpenAndWaitCommand } from "./commands/openAndWait";
88
import type { Callstack } from "./history/callstack";
99
import { Test, Hook } from "../test-reader/test-object";
1010
import type { CaptureSnapshotOptions, CaptureSnapshotResult } from "./commands/captureDomSnapshot";
11-
import { TestplaneQueries, TestplaneQueriesChainable, TestplaneQueriesSync } from "./queries";
11+
import { TestplaneQueries, TestplaneQueriesChainable } from "./queries";
1212

1313
export const BrowserName = {
1414
CHROME: PuppeteerBrowser.CHROME,
@@ -59,7 +59,7 @@ declare global {
5959
...args: Parameters<Fn>
6060
) => ReturnType<Fn>;
6161

62-
interface Browser extends TestplaneQueries, TestplaneQueriesSync, TestplaneQueriesChainable {
62+
interface Browser extends TestplaneQueries, TestplaneQueriesChainable {
6363
getMeta(this: WebdriverIO.Browser): Promise<BrowserMeta>;
6464

6565
getMeta(this: WebdriverIO.Browser, key: string): Promise<unknown>;

0 commit comments

Comments
 (0)