diff --git a/packages/trace-viewer/src/ui/actionList.tsx b/packages/trace-viewer/src/ui/actionList.tsx index 2d5241851c..8d673761ae 100644 --- a/packages/trace-viewer/src/ui/actionList.tsx +++ b/packages/trace-viewer/src/ui/actionList.tsx @@ -129,16 +129,23 @@ export const renderAction = ( return <>
{action.apiName} - {parameterString &&
- {parameterString.value} -
} + {parameterString && + (parameterString.type === 'locator' ? ( + <> + + {parameterString.value} + + {parameterString.childDisplayString && ( + + {parameterString.childDisplayString.value} + + )} + + ) : ( + + {parameterString.value} + + ))} {action.method === 'goto' && action.params.url &&
{action.params.url}
} {action.class === 'APIRequestContext' && action.params.url &&
{excludeOrigin(action.params.url)}
}
@@ -161,10 +168,16 @@ function excludeOrigin(url: string): string { } } -interface ActionParameterDisplayString { - type: 'generic' | 'locator'; - value: string; -} +type ActionParameterDisplayString = + | { + type: 'generic'; + value: string; + } + | { + type: 'locator'; + value: string; + childDisplayString?: ActionParameterDisplayString; + }; const clockDisplayString = ( action: ActionTraceEvent, @@ -218,9 +231,10 @@ const keyboardDisplayString = ( case 'fill': case 'keyboardType': case 'keyboardInsertText': { - if (action.params.text === undefined) + const string = action.params.text ?? action.params.value; + if (string === undefined) return undefined; - return { type: 'generic', value: `"${action.params.text}"` }; + return { type: 'generic', value: `"${string}"` }; } } }; @@ -272,12 +286,22 @@ const touchscreenDisplayString = ( const actionParameterDisplayString = ( action: ActionTraceEvent, sdkLanguage: Language, + ignoreLocator: boolean = false, ): ActionParameterDisplayString | undefined => { const params = action.params; // Locators have many possible classes, so follow existing logic and use `selector` presence - if (params.selector !== undefined) - return { type: 'locator', value: asLocator(sdkLanguage, params.selector) }; + if (!ignoreLocator && params.selector !== undefined) { + return { + type: 'locator', + value: asLocator(sdkLanguage, params.selector), + childDisplayString: actionParameterDisplayString( + action, + sdkLanguage, + true, + ), + }; + } switch (action.class.toLowerCase()) { case 'browsercontext':