diff --git a/packages/trace-viewer/src/ui/actionList.tsx b/packages/trace-viewer/src/ui/actionList.tsx index f9aff122ca..5be5ff5b4b 100644 --- a/packages/trace-viewer/src/ui/actionList.tsx +++ b/packages/trace-viewer/src/ui/actionList.tsx @@ -117,12 +117,12 @@ const ActionParameterContext: React.FC<{
- {parameterString} + {parameterString.value}
); }; diff --git a/packages/trace-viewer/src/ui/string.ts b/packages/trace-viewer/src/ui/string.ts index 204772b303..9607526ec1 100644 --- a/packages/trace-viewer/src/ui/string.ts +++ b/packages/trace-viewer/src/ui/string.ts @@ -17,21 +17,28 @@ import type { ActionTraceEvent } from '@trace/trace'; import { asLocator, type Language } from '@isomorphic/locatorGenerators'; +export interface ActionParameterDisplayString { + type: 'generic' | 'locator'; + value: string; +} + const formatClockParams = (params: { ticksNumber?: number; ticksString?: string; timeNumber?: number; -}): string | undefined => { +}): ActionParameterDisplayString | undefined => { + let value: string | undefined = undefined; + if (params.ticksNumber !== undefined) { // clock.fastForward/runFor - return `${params.ticksNumber}ms`; + value = `${params.ticksNumber}ms`; } else if (params.ticksString !== undefined) { // clock.fastForward/runFor - return params.ticksString; + value = params.ticksString; } else if (params.timeNumber !== undefined) { // clock.pauseAt/setFixedTime/setSystemTime try { - return new Date(params.timeNumber).toLocaleString(undefined, { + value = new Date(params.timeNumber).toLocaleString(undefined, { timeZone: 'UTC', }); } catch (e) { @@ -39,30 +46,44 @@ const formatClockParams = (params: { } } - return undefined; + if (value === undefined) + return undefined; + + return { + type: 'generic', + value, + }; }; const formatLocatorParams = ( sdkLanguage: Language, params: { selector?: string }, -): string | undefined => +): ActionParameterDisplayString | undefined => params.selector !== undefined - ? asLocator(sdkLanguage, params.selector) + ? { type: 'locator', value: asLocator(sdkLanguage, params.selector) } : undefined; const formatKeyboardParams = (params: { key?: string; text?: string; -}): string | undefined => { +}): ActionParameterDisplayString | undefined => { + let value: string | undefined = undefined; + if (params.key !== undefined) { // keyboard.press/down/up - return params.key; + value = params.key; } else if (params.text !== undefined) { // keyboard.type/insertText - return `"${params.text}"`; + value = `"${params.text}"`; } - return undefined; + if (value === undefined) + return undefined; + + return { + type: 'generic', + value, + }; }; const formatMouseParams = (params: { @@ -70,36 +91,52 @@ const formatMouseParams = (params: { y?: number; deltaX?: number; deltaY?: number; -}): string | undefined => { +}): ActionParameterDisplayString | undefined => { + let value: string | undefined = undefined; + if (params.x !== undefined && params.y !== undefined) { // mouse.click/dblclick/move - return `(${params.x}, ${params.y})`; + value = `(${params.x}, ${params.y})`; } else if (params.deltaX !== undefined && params.deltaY !== undefined) { // mouse.wheel - return `(${params.deltaX}, ${params.deltaY})`; + value = `(${params.deltaX}, ${params.deltaY})`; } - return undefined; + if (value === undefined) + return undefined; + + return { + type: 'generic', + value, + }; }; const formatTouchscreenParams = (params: { x?: number; y?: number; -}): string | undefined => { +}): ActionParameterDisplayString | undefined => { + let value: string | undefined = undefined; + if (params.x && params.y) { // touchscreen.tap - return `(${params.x}, ${params.y})`; + value = `(${params.x}, ${params.y})`; } - return undefined; + if (value === undefined) + return undefined; + + return { + type: 'generic', + value, + }; }; export const actionParameterDisplayString = ( action: ActionTraceEvent, sdkLanguage: Language, -): string | undefined => { +): ActionParameterDisplayString | undefined => { const params = action.params; - const apiName = action.apiName; + const apiName = action.apiName.toLowerCase(); switch (true) { case apiName.startsWith('clock'): @@ -108,6 +145,7 @@ export const actionParameterDisplayString = ( return formatKeyboardParams(params); case apiName.startsWith('locator'): case apiName.startsWith('expect'): + case apiName.startsWith('frame'): return formatLocatorParams(sdkLanguage, params); case apiName.startsWith('mouse'): return formatMouseParams(params);