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':