Better handling for non-JS Playwright actions
This commit is contained in:
parent
9cb8d55bea
commit
fa033bb9e6
|
|
@ -117,12 +117,12 @@ const ActionParameterContext: React.FC<{
|
||||||
<div
|
<div
|
||||||
className={clsx(
|
className={clsx(
|
||||||
'action-parameter',
|
'action-parameter',
|
||||||
action.apiName.startsWith('locator')
|
parameterString.type === 'locator'
|
||||||
? 'action-locator-parameter'
|
? 'action-locator-parameter'
|
||||||
: 'action-generic-parameter',
|
: 'action-generic-parameter',
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{parameterString}
|
{parameterString.value}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -17,21 +17,28 @@
|
||||||
import type { ActionTraceEvent } from '@trace/trace';
|
import type { ActionTraceEvent } from '@trace/trace';
|
||||||
import { asLocator, type Language } from '@isomorphic/locatorGenerators';
|
import { asLocator, type Language } from '@isomorphic/locatorGenerators';
|
||||||
|
|
||||||
|
export interface ActionParameterDisplayString {
|
||||||
|
type: 'generic' | 'locator';
|
||||||
|
value: string;
|
||||||
|
}
|
||||||
|
|
||||||
const formatClockParams = (params: {
|
const formatClockParams = (params: {
|
||||||
ticksNumber?: number;
|
ticksNumber?: number;
|
||||||
ticksString?: string;
|
ticksString?: string;
|
||||||
timeNumber?: number;
|
timeNumber?: number;
|
||||||
}): string | undefined => {
|
}): ActionParameterDisplayString | undefined => {
|
||||||
|
let value: string | undefined = undefined;
|
||||||
|
|
||||||
if (params.ticksNumber !== undefined) {
|
if (params.ticksNumber !== undefined) {
|
||||||
// clock.fastForward/runFor
|
// clock.fastForward/runFor
|
||||||
return `${params.ticksNumber}ms`;
|
value = `${params.ticksNumber}ms`;
|
||||||
} else if (params.ticksString !== undefined) {
|
} else if (params.ticksString !== undefined) {
|
||||||
// clock.fastForward/runFor
|
// clock.fastForward/runFor
|
||||||
return params.ticksString;
|
value = params.ticksString;
|
||||||
} else if (params.timeNumber !== undefined) {
|
} else if (params.timeNumber !== undefined) {
|
||||||
// clock.pauseAt/setFixedTime/setSystemTime
|
// clock.pauseAt/setFixedTime/setSystemTime
|
||||||
try {
|
try {
|
||||||
return new Date(params.timeNumber).toLocaleString(undefined, {
|
value = new Date(params.timeNumber).toLocaleString(undefined, {
|
||||||
timeZone: 'UTC',
|
timeZone: 'UTC',
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
@ -39,30 +46,44 @@ const formatClockParams = (params: {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (value === undefined)
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: 'generic',
|
||||||
|
value,
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const formatLocatorParams = (
|
const formatLocatorParams = (
|
||||||
sdkLanguage: Language,
|
sdkLanguage: Language,
|
||||||
params: { selector?: string },
|
params: { selector?: string },
|
||||||
): string | undefined =>
|
): ActionParameterDisplayString | undefined =>
|
||||||
params.selector !== undefined
|
params.selector !== undefined
|
||||||
? asLocator(sdkLanguage, params.selector)
|
? { type: 'locator', value: asLocator(sdkLanguage, params.selector) }
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
const formatKeyboardParams = (params: {
|
const formatKeyboardParams = (params: {
|
||||||
key?: string;
|
key?: string;
|
||||||
text?: string;
|
text?: string;
|
||||||
}): string | undefined => {
|
}): ActionParameterDisplayString | undefined => {
|
||||||
|
let value: string | undefined = undefined;
|
||||||
|
|
||||||
if (params.key !== undefined) {
|
if (params.key !== undefined) {
|
||||||
// keyboard.press/down/up
|
// keyboard.press/down/up
|
||||||
return params.key;
|
value = params.key;
|
||||||
} else if (params.text !== undefined) {
|
} else if (params.text !== undefined) {
|
||||||
// keyboard.type/insertText
|
// keyboard.type/insertText
|
||||||
return `"${params.text}"`;
|
value = `"${params.text}"`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (value === undefined)
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: 'generic',
|
||||||
|
value,
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const formatMouseParams = (params: {
|
const formatMouseParams = (params: {
|
||||||
|
|
@ -70,36 +91,52 @@ const formatMouseParams = (params: {
|
||||||
y?: number;
|
y?: number;
|
||||||
deltaX?: number;
|
deltaX?: number;
|
||||||
deltaY?: number;
|
deltaY?: number;
|
||||||
}): string | undefined => {
|
}): ActionParameterDisplayString | undefined => {
|
||||||
|
let value: string | undefined = undefined;
|
||||||
|
|
||||||
if (params.x !== undefined && params.y !== undefined) {
|
if (params.x !== undefined && params.y !== undefined) {
|
||||||
// mouse.click/dblclick/move
|
// mouse.click/dblclick/move
|
||||||
return `(${params.x}, ${params.y})`;
|
value = `(${params.x}, ${params.y})`;
|
||||||
} else if (params.deltaX !== undefined && params.deltaY !== undefined) {
|
} else if (params.deltaX !== undefined && params.deltaY !== undefined) {
|
||||||
// mouse.wheel
|
// mouse.wheel
|
||||||
return `(${params.deltaX}, ${params.deltaY})`;
|
value = `(${params.deltaX}, ${params.deltaY})`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (value === undefined)
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: 'generic',
|
||||||
|
value,
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const formatTouchscreenParams = (params: {
|
const formatTouchscreenParams = (params: {
|
||||||
x?: number;
|
x?: number;
|
||||||
y?: number;
|
y?: number;
|
||||||
}): string | undefined => {
|
}): ActionParameterDisplayString | undefined => {
|
||||||
|
let value: string | undefined = undefined;
|
||||||
|
|
||||||
if (params.x && params.y) {
|
if (params.x && params.y) {
|
||||||
// touchscreen.tap
|
// touchscreen.tap
|
||||||
return `(${params.x}, ${params.y})`;
|
value = `(${params.x}, ${params.y})`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (value === undefined)
|
||||||
return undefined;
|
return undefined;
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: 'generic',
|
||||||
|
value,
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export const actionParameterDisplayString = (
|
export const actionParameterDisplayString = (
|
||||||
action: ActionTraceEvent,
|
action: ActionTraceEvent,
|
||||||
sdkLanguage: Language,
|
sdkLanguage: Language,
|
||||||
): string | undefined => {
|
): ActionParameterDisplayString | undefined => {
|
||||||
const params = action.params;
|
const params = action.params;
|
||||||
const apiName = action.apiName;
|
const apiName = action.apiName.toLowerCase();
|
||||||
|
|
||||||
switch (true) {
|
switch (true) {
|
||||||
case apiName.startsWith('clock'):
|
case apiName.startsWith('clock'):
|
||||||
|
|
@ -108,6 +145,7 @@ export const actionParameterDisplayString = (
|
||||||
return formatKeyboardParams(params);
|
return formatKeyboardParams(params);
|
||||||
case apiName.startsWith('locator'):
|
case apiName.startsWith('locator'):
|
||||||
case apiName.startsWith('expect'):
|
case apiName.startsWith('expect'):
|
||||||
|
case apiName.startsWith('frame'):
|
||||||
return formatLocatorParams(sdkLanguage, params);
|
return formatLocatorParams(sdkLanguage, params);
|
||||||
case apiName.startsWith('mouse'):
|
case apiName.startsWith('mouse'):
|
||||||
return formatMouseParams(params);
|
return formatMouseParams(params);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue