diff --git a/packages/opentelemetry-sdk-trace-web/src/utils.ts b/packages/opentelemetry-sdk-trace-web/src/utils.ts index 33f52a4d365..d882532faab 100644 --- a/packages/opentelemetry-sdk-trace-web/src/utils.ts +++ b/packages/opentelemetry-sdk-trace-web/src/utils.ts @@ -374,7 +374,7 @@ export function getElementXPath(target: any, optimised?: boolean): string { } let xpath = ''; if (target.parentNode) { - xpath += getElementXPath(target.parentNode, false); + xpath += getElementXPath(target.parentNode, optimised); } xpath += targetValue; diff --git a/packages/opentelemetry-sdk-trace-web/test/window/utils.test.ts b/packages/opentelemetry-sdk-trace-web/test/window/utils.test.ts index c2afb72b291..a6872d61d3c 100644 --- a/packages/opentelemetry-sdk-trace-web/test/window/utils.test.ts +++ b/packages/opentelemetry-sdk-trace-web/test/window/utils.test.ts @@ -140,6 +140,17 @@ describe('utils', function () { assert.strictEqual(textNode, getElementByXpath(element)); }); + it('should return optimised path for child of element with id when optimised = true', function () { + const element = getElementXPath( + $fixture.find('#btn22')[0].parentNode.children[0], + true + ); + assert.ok( + element.indexOf('@id') > 0, + 'expected optimised xpath to use @id shortcut for ancestor' + ); + }); + it('should return correct path when element is comment node', function () { const comment = $fixture.find('#comment')[0]; const node = document.createComment('foobar');