Skip to content

chore(expect): pass expect title explicitly to library calls - #42250

Merged
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title
Aug 14, 2026
Merged

chore(expect): pass expect title explicitly to library calls#42250
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title

Conversation

@dgozman

Copy link
Copy Markdown
Collaborator

Summary

  • Matchers pass their step title explicitly to locator._expect, frame._expect and page._expectScreenshot, instead of the test runner plumbing apiName/title into the api call through the instrumentation listener.
  • The apiName is inferred from the stack, falling back to the explicit title for internal methods like locator._expect.
  • The test runner instrumentation matches api calls by channel type/method, and apiName is removed from ApiCallData.

Matchers now pass their step title to locator._expect and friends,
instead of the test runner plumbing apiName/title into the api call
through the instrumentation listener. The apiName is inferred from the
stack, falling back to the explicit title for internal methods like
locator._expect. The test runner instrumentation matches api calls by
channel type/method instead of the apiName.
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes, and it asserts on the pw:api debug output that this PR reworks — it's never flaked before.

Details

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest, and macos-latest. The test runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started'). The fixture's failing assertion is expect(page.locator('span')).toHaveText(...), so the pw:api line is driven entirely by how the matcher's apiName is derived. This PR is exactly that change — it stops the test runner from plumbing apiName into the call and instead infers it from the stack, falling back to the explicit title for internal methods like locator._expect. Consistent failure on every OS with no browser involved, plus a 0-failure history across 2929 runs in the test-results DB, points at the apiName derivation rather than infra. Worth checking that the inferred name for expect matchers still comes out as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate and [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — both pre-existing flakes on SHAs unrelated to this PR (annotate flips verdict across ~23 PRs; mousewheel fails on push runs predating this branch). Nothing this PR touches reaches the MCP screencast or mouse-wheel paths.
  • The 5 tests listed as flaky (browsercontext-page-event, video, chromium, page-emulate-media, page-goto) all passed on retry within this run and are unrelated to matcher-title plumbing.

Triaged by the Playwright bot - agent run

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "MCP"

1 failed
❌ [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation @mcp-windows-latest-chrome

8100 passed, 1311 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

4 flaky⚠️ [chromium-library] › library/chromium/chromium.spec.ts:179 › serviceWorker(), and fromServiceWorker() work `@chromium-ubuntu-22.04-arm-node20`
⚠️ [chromium-library] › library/video.spec.ts:736 › screencast › should work with video+trace `@realtime-time-library-chromium-linux`
⚠️ [firefox-page] › page/page-event-request.spec.ts:181 › should return response body when Cross-Origin-Opener-Policy is set `@firefox-ubuntu-22.04-node20`
⚠️ [playwright-test] › ui-mode-trace.spec.ts:827 › should update state on subsequent run `@windows-latest-node22`

51121 passed, 1208 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes and asserts on the pw:api output that this PR reworks. It has never failed before. The Firefox/Chrome MCP failures are pre-existing flakes.

Details

Across the three CI reports on this PR, one failure is caused by the change and the rest are known flakes.

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest and macos-latest. It runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started') (line 117). This PR changes exactly how that pw:api name is produced: channelOwner.ts now falls back to the explicit title for internal methods (apiName.includes('._')), and the matchers pass this.title into locator._expect instead of the runner instrumentation plumbing apiName = expect.toHaveText. If the fallback title isn't the short expect.toHaveText form, that log line no longer matches. The test-results DB backs this up: 1 failure in 992 runs, and that single failure is this PR's SHA 3f1f652 — no prior history on any other SHA. Worth confirming the inferred name for expect matchers still renders as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate — pre-existing flake: failed 45 of 3461 runs (~1.3%) across 45 SHAs and 30 PRs unrelated to this one.
  • [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation — same story: 10 failures over 3452 runs across 7 PRs.
  • [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — rarer, but it fails where this PR can't be responsible: two push runs on unrelated SHAs predating this branch — beaf223 (2026-07-29) and 9a19b13 (2026-08-04) — plus this run.

None of the MCP screencast, annotation or mouse-wheel paths are touched by the matcher-title change, and the 5 tests marked flaky in "tests 1" all passed on retry within the run.

Triaged by the Playwright bot - agent run

@dgozman
Dmitry Gozman (dgozman) merged commit e4a6eeb into microsoft:mainAug 14, 2026
44 of 45 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@dgozman@Skn0tt
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
chore(expect): pass expect title explicitly to library calls by dgozman · Pull Request #42250 · microsoft/playwright · GitHub
Skip to content

chore(expect): pass expect title explicitly to library calls - #42250

Merged
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title
Aug 14, 2026
Merged

chore(expect): pass expect title explicitly to library calls#42250
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title

Conversation

@dgozman

Copy link
Copy Markdown
Collaborator

Summary

  • Matchers pass their step title explicitly to locator._expect, frame._expect and page._expectScreenshot, instead of the test runner plumbing apiName/title into the api call through the instrumentation listener.
  • The apiName is inferred from the stack, falling back to the explicit title for internal methods like locator._expect.
  • The test runner instrumentation matches api calls by channel type/method, and apiName is removed from ApiCallData.

Matchers now pass their step title to locator._expect and friends,
instead of the test runner plumbing apiName/title into the api call
through the instrumentation listener. The apiName is inferred from the
stack, falling back to the explicit title for internal methods like
locator._expect. The test runner instrumentation matches api calls by
channel type/method instead of the apiName.
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes, and it asserts on the pw:api debug output that this PR reworks — it's never flaked before.

Details

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest, and macos-latest. The test runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started'). The fixture's failing assertion is expect(page.locator('span')).toHaveText(...), so the pw:api line is driven entirely by how the matcher's apiName is derived. This PR is exactly that change — it stops the test runner from plumbing apiName into the call and instead infers it from the stack, falling back to the explicit title for internal methods like locator._expect. Consistent failure on every OS with no browser involved, plus a 0-failure history across 2929 runs in the test-results DB, points at the apiName derivation rather than infra. Worth checking that the inferred name for expect matchers still comes out as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate and [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — both pre-existing flakes on SHAs unrelated to this PR (annotate flips verdict across ~23 PRs; mousewheel fails on push runs predating this branch). Nothing this PR touches reaches the MCP screencast or mouse-wheel paths.
  • The 5 tests listed as flaky (browsercontext-page-event, video, chromium, page-emulate-media, page-goto) all passed on retry within this run and are unrelated to matcher-title plumbing.

Triaged by the Playwright bot - agent run

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "MCP"

1 failed
❌ [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation @mcp-windows-latest-chrome

8100 passed, 1311 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

4 flaky⚠️ [chromium-library] › library/chromium/chromium.spec.ts:179 › serviceWorker(), and fromServiceWorker() work `@chromium-ubuntu-22.04-arm-node20`
⚠️ [chromium-library] › library/video.spec.ts:736 › screencast › should work with video+trace `@realtime-time-library-chromium-linux`
⚠️ [firefox-page] › page/page-event-request.spec.ts:181 › should return response body when Cross-Origin-Opener-Policy is set `@firefox-ubuntu-22.04-node20`
⚠️ [playwright-test] › ui-mode-trace.spec.ts:827 › should update state on subsequent run `@windows-latest-node22`

51121 passed, 1208 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes and asserts on the pw:api output that this PR reworks. It has never failed before. The Firefox/Chrome MCP failures are pre-existing flakes.

Details

Across the three CI reports on this PR, one failure is caused by the change and the rest are known flakes.

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest and macos-latest. It runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started') (line 117). This PR changes exactly how that pw:api name is produced: channelOwner.ts now falls back to the explicit title for internal methods (apiName.includes('._')), and the matchers pass this.title into locator._expect instead of the runner instrumentation plumbing apiName = expect.toHaveText. If the fallback title isn't the short expect.toHaveText form, that log line no longer matches. The test-results DB backs this up: 1 failure in 992 runs, and that single failure is this PR's SHA 3f1f652 — no prior history on any other SHA. Worth confirming the inferred name for expect matchers still renders as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate — pre-existing flake: failed 45 of 3461 runs (~1.3%) across 45 SHAs and 30 PRs unrelated to this one.
  • [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation — same story: 10 failures over 3452 runs across 7 PRs.
  • [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — rarer, but it fails where this PR can't be responsible: two push runs on unrelated SHAs predating this branch — beaf223 (2026-07-29) and 9a19b13 (2026-08-04) — plus this run.

None of the MCP screencast, annotation or mouse-wheel paths are touched by the matcher-title change, and the 5 tests marked flaky in "tests 1" all passed on retry within the run.

Triaged by the Playwright bot - agent run

@dgozman
Dmitry Gozman (dgozman) merged commit e4a6eeb into microsoft:mainAug 14, 2026
44 of 45 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@dgozman@Skn0tt
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' chore(expect): pass expect title explicitly to library calls by dgozman · Pull Request #42250 · microsoft/playwright · GitHub
Skip to content

chore(expect): pass expect title explicitly to library calls - #42250

Merged
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title
Aug 14, 2026
Merged

chore(expect): pass expect title explicitly to library calls#42250
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title

Conversation

@dgozman

Copy link
Copy Markdown
Collaborator

Summary

  • Matchers pass their step title explicitly to locator._expect, frame._expect and page._expectScreenshot, instead of the test runner plumbing apiName/title into the api call through the instrumentation listener.
  • The apiName is inferred from the stack, falling back to the explicit title for internal methods like locator._expect.
  • The test runner instrumentation matches api calls by channel type/method, and apiName is removed from ApiCallData.

Matchers now pass their step title to locator._expect and friends,
instead of the test runner plumbing apiName/title into the api call
through the instrumentation listener. The apiName is inferred from the
stack, falling back to the explicit title for internal methods like
locator._expect. The test runner instrumentation matches api calls by
channel type/method instead of the apiName.
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes, and it asserts on the pw:api debug output that this PR reworks — it's never flaked before.

Details

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest, and macos-latest. The test runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started'). The fixture's failing assertion is expect(page.locator('span')).toHaveText(...), so the pw:api line is driven entirely by how the matcher's apiName is derived. This PR is exactly that change — it stops the test runner from plumbing apiName into the call and instead infers it from the stack, falling back to the explicit title for internal methods like locator._expect. Consistent failure on every OS with no browser involved, plus a 0-failure history across 2929 runs in the test-results DB, points at the apiName derivation rather than infra. Worth checking that the inferred name for expect matchers still comes out as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate and [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — both pre-existing flakes on SHAs unrelated to this PR (annotate flips verdict across ~23 PRs; mousewheel fails on push runs predating this branch). Nothing this PR touches reaches the MCP screencast or mouse-wheel paths.
  • The 5 tests listed as flaky (browsercontext-page-event, video, chromium, page-emulate-media, page-goto) all passed on retry within this run and are unrelated to matcher-title plumbing.

Triaged by the Playwright bot - agent run

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "MCP"

1 failed
❌ [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation @mcp-windows-latest-chrome

8100 passed, 1311 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

4 flaky⚠️ [chromium-library] › library/chromium/chromium.spec.ts:179 › serviceWorker(), and fromServiceWorker() work `@chromium-ubuntu-22.04-arm-node20`
⚠️ [chromium-library] › library/video.spec.ts:736 › screencast › should work with video+trace `@realtime-time-library-chromium-linux`
⚠️ [firefox-page] › page/page-event-request.spec.ts:181 › should return response body when Cross-Origin-Opener-Policy is set `@firefox-ubuntu-22.04-node20`
⚠️ [playwright-test] › ui-mode-trace.spec.ts:827 › should update state on subsequent run `@windows-latest-node22`

51121 passed, 1208 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes and asserts on the pw:api output that this PR reworks. It has never failed before. The Firefox/Chrome MCP failures are pre-existing flakes.

Details

Across the three CI reports on this PR, one failure is caused by the change and the rest are known flakes.

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest and macos-latest. It runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started') (line 117). This PR changes exactly how that pw:api name is produced: channelOwner.ts now falls back to the explicit title for internal methods (apiName.includes('._')), and the matchers pass this.title into locator._expect instead of the runner instrumentation plumbing apiName = expect.toHaveText. If the fallback title isn't the short expect.toHaveText form, that log line no longer matches. The test-results DB backs this up: 1 failure in 992 runs, and that single failure is this PR's SHA 3f1f652 — no prior history on any other SHA. Worth confirming the inferred name for expect matchers still renders as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate — pre-existing flake: failed 45 of 3461 runs (~1.3%) across 45 SHAs and 30 PRs unrelated to this one.
  • [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation — same story: 10 failures over 3452 runs across 7 PRs.
  • [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — rarer, but it fails where this PR can't be responsible: two push runs on unrelated SHAs predating this branch — beaf223 (2026-07-29) and 9a19b13 (2026-08-04) — plus this run.

None of the MCP screencast, annotation or mouse-wheel paths are touched by the matcher-title change, and the 5 tests marked flaky in "tests 1" all passed on retry within the run.

Triaged by the Playwright bot - agent run

@dgozman
Dmitry Gozman (dgozman) merged commit e4a6eeb into microsoft:mainAug 14, 2026
44 of 45 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@dgozman@Skn0tt
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' chore(expect): pass expect title explicitly to library calls by dgozman · Pull Request #42250 · microsoft/playwright · GitHub
Skip to content

chore(expect): pass expect title explicitly to library calls - #42250

Merged
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title
Aug 14, 2026
Merged

chore(expect): pass expect title explicitly to library calls#42250
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title

Conversation

@dgozman

Copy link
Copy Markdown
Collaborator

Summary

  • Matchers pass their step title explicitly to locator._expect, frame._expect and page._expectScreenshot, instead of the test runner plumbing apiName/title into the api call through the instrumentation listener.
  • The apiName is inferred from the stack, falling back to the explicit title for internal methods like locator._expect.
  • The test runner instrumentation matches api calls by channel type/method, and apiName is removed from ApiCallData.

Matchers now pass their step title to locator._expect and friends,
instead of the test runner plumbing apiName/title into the api call
through the instrumentation listener. The apiName is inferred from the
stack, falling back to the explicit title for internal methods like
locator._expect. The test runner instrumentation matches api calls by
channel type/method instead of the apiName.
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes, and it asserts on the pw:api debug output that this PR reworks — it's never flaked before.

Details

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest, and macos-latest. The test runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started'). The fixture's failing assertion is expect(page.locator('span')).toHaveText(...), so the pw:api line is driven entirely by how the matcher's apiName is derived. This PR is exactly that change — it stops the test runner from plumbing apiName into the call and instead infers it from the stack, falling back to the explicit title for internal methods like locator._expect. Consistent failure on every OS with no browser involved, plus a 0-failure history across 2929 runs in the test-results DB, points at the apiName derivation rather than infra. Worth checking that the inferred name for expect matchers still comes out as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate and [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — both pre-existing flakes on SHAs unrelated to this PR (annotate flips verdict across ~23 PRs; mousewheel fails on push runs predating this branch). Nothing this PR touches reaches the MCP screencast or mouse-wheel paths.
  • The 5 tests listed as flaky (browsercontext-page-event, video, chromium, page-emulate-media, page-goto) all passed on retry within this run and are unrelated to matcher-title plumbing.

Triaged by the Playwright bot - agent run

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "MCP"

1 failed
❌ [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation @mcp-windows-latest-chrome

8100 passed, 1311 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

4 flaky⚠️ [chromium-library] › library/chromium/chromium.spec.ts:179 › serviceWorker(), and fromServiceWorker() work `@chromium-ubuntu-22.04-arm-node20`
⚠️ [chromium-library] › library/video.spec.ts:736 › screencast › should work with video+trace `@realtime-time-library-chromium-linux`
⚠️ [firefox-page] › page/page-event-request.spec.ts:181 › should return response body when Cross-Origin-Opener-Policy is set `@firefox-ubuntu-22.04-node20`
⚠️ [playwright-test] › ui-mode-trace.spec.ts:827 › should update state on subsequent run `@windows-latest-node22`

51121 passed, 1208 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes and asserts on the pw:api output that this PR reworks. It has never failed before. The Firefox/Chrome MCP failures are pre-existing flakes.

Details

Across the three CI reports on this PR, one failure is caused by the change and the rest are known flakes.

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest and macos-latest. It runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started') (line 117). This PR changes exactly how that pw:api name is produced: channelOwner.ts now falls back to the explicit title for internal methods (apiName.includes('._')), and the matchers pass this.title into locator._expect instead of the runner instrumentation plumbing apiName = expect.toHaveText. If the fallback title isn't the short expect.toHaveText form, that log line no longer matches. The test-results DB backs this up: 1 failure in 992 runs, and that single failure is this PR's SHA 3f1f652 — no prior history on any other SHA. Worth confirming the inferred name for expect matchers still renders as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate — pre-existing flake: failed 45 of 3461 runs (~1.3%) across 45 SHAs and 30 PRs unrelated to this one.
  • [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation — same story: 10 failures over 3452 runs across 7 PRs.
  • [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — rarer, but it fails where this PR can't be responsible: two push runs on unrelated SHAs predating this branch — beaf223 (2026-07-29) and 9a19b13 (2026-08-04) — plus this run.

None of the MCP screencast, annotation or mouse-wheel paths are touched by the matcher-title change, and the 5 tests marked flaky in "tests 1" all passed on retry within the run.

Triaged by the Playwright bot - agent run

@dgozman
Dmitry Gozman (dgozman) merged commit e4a6eeb into microsoft:mainAug 14, 2026
44 of 45 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@dgozman@Skn0tt
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' chore(expect): pass expect title explicitly to library calls by dgozman · Pull Request #42250 · microsoft/playwright · GitHub
Skip to content

chore(expect): pass expect title explicitly to library calls - #42250

Merged
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title
Aug 14, 2026
Merged

chore(expect): pass expect title explicitly to library calls#42250
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title

Conversation

@dgozman

Copy link
Copy Markdown
Collaborator

Summary

  • Matchers pass their step title explicitly to locator._expect, frame._expect and page._expectScreenshot, instead of the test runner plumbing apiName/title into the api call through the instrumentation listener.
  • The apiName is inferred from the stack, falling back to the explicit title for internal methods like locator._expect.
  • The test runner instrumentation matches api calls by channel type/method, and apiName is removed from ApiCallData.

Matchers now pass their step title to locator._expect and friends,
instead of the test runner plumbing apiName/title into the api call
through the instrumentation listener. The apiName is inferred from the
stack, falling back to the explicit title for internal methods like
locator._expect. The test runner instrumentation matches api calls by
channel type/method instead of the apiName.
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes, and it asserts on the pw:api debug output that this PR reworks — it's never flaked before.

Details

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest, and macos-latest. The test runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started'). The fixture's failing assertion is expect(page.locator('span')).toHaveText(...), so the pw:api line is driven entirely by how the matcher's apiName is derived. This PR is exactly that change — it stops the test runner from plumbing apiName into the call and instead infers it from the stack, falling back to the explicit title for internal methods like locator._expect. Consistent failure on every OS with no browser involved, plus a 0-failure history across 2929 runs in the test-results DB, points at the apiName derivation rather than infra. Worth checking that the inferred name for expect matchers still comes out as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate and [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — both pre-existing flakes on SHAs unrelated to this PR (annotate flips verdict across ~23 PRs; mousewheel fails on push runs predating this branch). Nothing this PR touches reaches the MCP screencast or mouse-wheel paths.
  • The 5 tests listed as flaky (browsercontext-page-event, video, chromium, page-emulate-media, page-goto) all passed on retry within this run and are unrelated to matcher-title plumbing.

Triaged by the Playwright bot - agent run

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "MCP"

1 failed
❌ [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation @mcp-windows-latest-chrome

8100 passed, 1311 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

4 flaky⚠️ [chromium-library] › library/chromium/chromium.spec.ts:179 › serviceWorker(), and fromServiceWorker() work `@chromium-ubuntu-22.04-arm-node20`
⚠️ [chromium-library] › library/video.spec.ts:736 › screencast › should work with video+trace `@realtime-time-library-chromium-linux`
⚠️ [firefox-page] › page/page-event-request.spec.ts:181 › should return response body when Cross-Origin-Opener-Policy is set `@firefox-ubuntu-22.04-node20`
⚠️ [playwright-test] › ui-mode-trace.spec.ts:827 › should update state on subsequent run `@windows-latest-node22`

51121 passed, 1208 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes and asserts on the pw:api output that this PR reworks. It has never failed before. The Firefox/Chrome MCP failures are pre-existing flakes.

Details

Across the three CI reports on this PR, one failure is caused by the change and the rest are known flakes.

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest and macos-latest. It runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started') (line 117). This PR changes exactly how that pw:api name is produced: channelOwner.ts now falls back to the explicit title for internal methods (apiName.includes('._')), and the matchers pass this.title into locator._expect instead of the runner instrumentation plumbing apiName = expect.toHaveText. If the fallback title isn't the short expect.toHaveText form, that log line no longer matches. The test-results DB backs this up: 1 failure in 992 runs, and that single failure is this PR's SHA 3f1f652 — no prior history on any other SHA. Worth confirming the inferred name for expect matchers still renders as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate — pre-existing flake: failed 45 of 3461 runs (~1.3%) across 45 SHAs and 30 PRs unrelated to this one.
  • [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation — same story: 10 failures over 3452 runs across 7 PRs.
  • [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — rarer, but it fails where this PR can't be responsible: two push runs on unrelated SHAs predating this branch — beaf223 (2026-07-29) and 9a19b13 (2026-08-04) — plus this run.

None of the MCP screencast, annotation or mouse-wheel paths are touched by the matcher-title change, and the 5 tests marked flaky in "tests 1" all passed on retry within the run.

Triaged by the Playwright bot - agent run

@dgozman
Dmitry Gozman (dgozman) merged commit e4a6eeb into microsoft:mainAug 14, 2026
44 of 45 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@dgozman@Skn0tt
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' chore(expect): pass expect title explicitly to library calls by dgozman · Pull Request #42250 · microsoft/playwright · GitHub
Skip to content

chore(expect): pass expect title explicitly to library calls - #42250

Merged
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title
Aug 14, 2026
Merged

chore(expect): pass expect title explicitly to library calls#42250
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title

Conversation

@dgozman

Copy link
Copy Markdown
Collaborator

Summary

  • Matchers pass their step title explicitly to locator._expect, frame._expect and page._expectScreenshot, instead of the test runner plumbing apiName/title into the api call through the instrumentation listener.
  • The apiName is inferred from the stack, falling back to the explicit title for internal methods like locator._expect.
  • The test runner instrumentation matches api calls by channel type/method, and apiName is removed from ApiCallData.

Matchers now pass their step title to locator._expect and friends,
instead of the test runner plumbing apiName/title into the api call
through the instrumentation listener. The apiName is inferred from the
stack, falling back to the explicit title for internal methods like
locator._expect. The test runner instrumentation matches api calls by
channel type/method instead of the apiName.
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes, and it asserts on the pw:api debug output that this PR reworks — it's never flaked before.

Details

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest, and macos-latest. The test runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started'). The fixture's failing assertion is expect(page.locator('span')).toHaveText(...), so the pw:api line is driven entirely by how the matcher's apiName is derived. This PR is exactly that change — it stops the test runner from plumbing apiName into the call and instead infers it from the stack, falling back to the explicit title for internal methods like locator._expect. Consistent failure on every OS with no browser involved, plus a 0-failure history across 2929 runs in the test-results DB, points at the apiName derivation rather than infra. Worth checking that the inferred name for expect matchers still comes out as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate and [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — both pre-existing flakes on SHAs unrelated to this PR (annotate flips verdict across ~23 PRs; mousewheel fails on push runs predating this branch). Nothing this PR touches reaches the MCP screencast or mouse-wheel paths.
  • The 5 tests listed as flaky (browsercontext-page-event, video, chromium, page-emulate-media, page-goto) all passed on retry within this run and are unrelated to matcher-title plumbing.

Triaged by the Playwright bot - agent run

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "MCP"

1 failed
❌ [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation @mcp-windows-latest-chrome

8100 passed, 1311 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

4 flaky⚠️ [chromium-library] › library/chromium/chromium.spec.ts:179 › serviceWorker(), and fromServiceWorker() work `@chromium-ubuntu-22.04-arm-node20`
⚠️ [chromium-library] › library/video.spec.ts:736 › screencast › should work with video+trace `@realtime-time-library-chromium-linux`
⚠️ [firefox-page] › page/page-event-request.spec.ts:181 › should return response body when Cross-Origin-Opener-Policy is set `@firefox-ubuntu-22.04-node20`
⚠️ [playwright-test] › ui-mode-trace.spec.ts:827 › should update state on subsequent run `@windows-latest-node22`

51121 passed, 1208 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes and asserts on the pw:api output that this PR reworks. It has never failed before. The Firefox/Chrome MCP failures are pre-existing flakes.

Details

Across the three CI reports on this PR, one failure is caused by the change and the rest are known flakes.

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest and macos-latest. It runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started') (line 117). This PR changes exactly how that pw:api name is produced: channelOwner.ts now falls back to the explicit title for internal methods (apiName.includes('._')), and the matchers pass this.title into locator._expect instead of the runner instrumentation plumbing apiName = expect.toHaveText. If the fallback title isn't the short expect.toHaveText form, that log line no longer matches. The test-results DB backs this up: 1 failure in 992 runs, and that single failure is this PR's SHA 3f1f652 — no prior history on any other SHA. Worth confirming the inferred name for expect matchers still renders as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate — pre-existing flake: failed 45 of 3461 runs (~1.3%) across 45 SHAs and 30 PRs unrelated to this one.
  • [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation — same story: 10 failures over 3452 runs across 7 PRs.
  • [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — rarer, but it fails where this PR can't be responsible: two push runs on unrelated SHAs predating this branch — beaf223 (2026-07-29) and 9a19b13 (2026-08-04) — plus this run.

None of the MCP screencast, annotation or mouse-wheel paths are touched by the matcher-title change, and the 5 tests marked flaky in "tests 1" all passed on retry within the run.

Triaged by the Playwright bot - agent run

@dgozman
Dmitry Gozman (dgozman) merged commit e4a6eeb into microsoft:mainAug 14, 2026
44 of 45 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@dgozman@Skn0tt
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' chore(expect): pass expect title explicitly to library calls by dgozman · Pull Request #42250 · microsoft/playwright · GitHub
Skip to content

chore(expect): pass expect title explicitly to library calls - #42250

Merged
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title
Aug 14, 2026
Merged

chore(expect): pass expect title explicitly to library calls#42250
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title

Conversation

@dgozman

Copy link
Copy Markdown
Collaborator

Summary

  • Matchers pass their step title explicitly to locator._expect, frame._expect and page._expectScreenshot, instead of the test runner plumbing apiName/title into the api call through the instrumentation listener.
  • The apiName is inferred from the stack, falling back to the explicit title for internal methods like locator._expect.
  • The test runner instrumentation matches api calls by channel type/method, and apiName is removed from ApiCallData.

Matchers now pass their step title to locator._expect and friends,
instead of the test runner plumbing apiName/title into the api call
through the instrumentation listener. The apiName is inferred from the
stack, falling back to the explicit title for internal methods like
locator._expect. The test runner instrumentation matches api calls by
channel type/method instead of the apiName.
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes, and it asserts on the pw:api debug output that this PR reworks — it's never flaked before.

Details

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest, and macos-latest. The test runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started'). The fixture's failing assertion is expect(page.locator('span')).toHaveText(...), so the pw:api line is driven entirely by how the matcher's apiName is derived. This PR is exactly that change — it stops the test runner from plumbing apiName into the call and instead infers it from the stack, falling back to the explicit title for internal methods like locator._expect. Consistent failure on every OS with no browser involved, plus a 0-failure history across 2929 runs in the test-results DB, points at the apiName derivation rather than infra. Worth checking that the inferred name for expect matchers still comes out as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate and [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — both pre-existing flakes on SHAs unrelated to this PR (annotate flips verdict across ~23 PRs; mousewheel fails on push runs predating this branch). Nothing this PR touches reaches the MCP screencast or mouse-wheel paths.
  • The 5 tests listed as flaky (browsercontext-page-event, video, chromium, page-emulate-media, page-goto) all passed on retry within this run and are unrelated to matcher-title plumbing.

Triaged by the Playwright bot - agent run

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "MCP"

1 failed
❌ [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation @mcp-windows-latest-chrome

8100 passed, 1311 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

4 flaky⚠️ [chromium-library] › library/chromium/chromium.spec.ts:179 › serviceWorker(), and fromServiceWorker() work `@chromium-ubuntu-22.04-arm-node20`
⚠️ [chromium-library] › library/video.spec.ts:736 › screencast › should work with video+trace `@realtime-time-library-chromium-linux`
⚠️ [firefox-page] › page/page-event-request.spec.ts:181 › should return response body when Cross-Origin-Opener-Policy is set `@firefox-ubuntu-22.04-node20`
⚠️ [playwright-test] › ui-mode-trace.spec.ts:827 › should update state on subsequent run `@windows-latest-node22`

51121 passed, 1208 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes and asserts on the pw:api output that this PR reworks. It has never failed before. The Firefox/Chrome MCP failures are pre-existing flakes.

Details

Across the three CI reports on this PR, one failure is caused by the change and the rest are known flakes.

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest and macos-latest. It runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started') (line 117). This PR changes exactly how that pw:api name is produced: channelOwner.ts now falls back to the explicit title for internal methods (apiName.includes('._')), and the matchers pass this.title into locator._expect instead of the runner instrumentation plumbing apiName = expect.toHaveText. If the fallback title isn't the short expect.toHaveText form, that log line no longer matches. The test-results DB backs this up: 1 failure in 992 runs, and that single failure is this PR's SHA 3f1f652 — no prior history on any other SHA. Worth confirming the inferred name for expect matchers still renders as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate — pre-existing flake: failed 45 of 3461 runs (~1.3%) across 45 SHAs and 30 PRs unrelated to this one.
  • [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation — same story: 10 failures over 3452 runs across 7 PRs.
  • [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — rarer, but it fails where this PR can't be responsible: two push runs on unrelated SHAs predating this branch — beaf223 (2026-07-29) and 9a19b13 (2026-08-04) — plus this run.

None of the MCP screencast, annotation or mouse-wheel paths are touched by the matcher-title change, and the 5 tests marked flaky in "tests 1" all passed on retry within the run.

Triaged by the Playwright bot - agent run

@dgozman
Dmitry Gozman (dgozman) merged commit e4a6eeb into microsoft:mainAug 14, 2026
44 of 45 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@dgozman@Skn0tt
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); chore(expect): pass expect title explicitly to library calls by dgozman · Pull Request #42250 · microsoft/playwright · GitHub
Skip to content

chore(expect): pass expect title explicitly to library calls - #42250

Merged
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title
Aug 14, 2026
Merged

chore(expect): pass expect title explicitly to library calls#42250
Dmitry Gozman (dgozman) merged 2 commits into
microsoft:mainfrom
dgozman:expect-explicit-title

Conversation

@dgozman

Copy link
Copy Markdown
Collaborator

Summary

  • Matchers pass their step title explicitly to locator._expect, frame._expect and page._expectScreenshot, instead of the test runner plumbing apiName/title into the api call through the instrumentation listener.
  • The apiName is inferred from the stack, falling back to the explicit title for internal methods like locator._expect.
  • The test runner instrumentation matches api calls by channel type/method, and apiName is removed from ApiCallData.

Matchers now pass their step title to locator._expect and friends,
instead of the test runner plumbing apiName/title into the api call
through the instrumentation listener. The apiName is inferred from the
stack, falling back to the explicit title for internal methods like
locator._expect. The test runner instrumentation matches api calls by
channel type/method instead of the apiName.
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes, and it asserts on the pw:api debug output that this PR reworks — it's never flaked before.

Details

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest, and macos-latest. The test runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started'). The fixture's failing assertion is expect(page.locator('span')).toHaveText(...), so the pw:api line is driven entirely by how the matcher's apiName is derived. This PR is exactly that change — it stops the test runner from plumbing apiName into the call and instead infers it from the stack, falling back to the explicit title for internal methods like locator._expect. Consistent failure on every OS with no browser involved, plus a 0-failure history across 2929 runs in the test-results DB, points at the apiName derivation rather than infra. Worth checking that the inferred name for expect matchers still comes out as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate and [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — both pre-existing flakes on SHAs unrelated to this PR (annotate flips verdict across ~23 PRs; mousewheel fails on push runs predating this branch). Nothing this PR touches reaches the MCP screencast or mouse-wheel paths.
  • The 5 tests listed as flaky (browsercontext-page-event, video, chromium, page-emulate-media, page-goto) all passed on retry within this run and are unrelated to matcher-title plumbing.

Triaged by the Playwright bot - agent run

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "MCP"

1 failed
❌ [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation @mcp-windows-latest-chrome

8100 passed, 1311 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Test results for "tests 1"

4 flaky⚠️ [chromium-library] › library/chromium/chromium.spec.ts:179 › serviceWorker(), and fromServiceWorker() work `@chromium-ubuntu-22.04-arm-node20`
⚠️ [chromium-library] › library/video.spec.ts:736 › screencast › should work with video+trace `@realtime-time-library-chromium-linux`
⚠️ [firefox-page] › page/page-event-request.spec.ts:181 › should return response body when Cross-Origin-Opener-Policy is set `@firefox-ubuntu-22.04-node20`
⚠️ [playwright-test] › ui-mode-trace.spec.ts:827 › should update state on subsequent run `@windows-latest-node22`

51121 passed, 1208 skipped


Merge workflow run.

@github-actions

Copy link
Copy Markdown
Contributor

Hi, I'm the Playwright bot and I took a look at the CI failures here.

🔴 One failure looks caused by this PR

playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work fails on all three OSes and asserts on the pw:api output that this PR reworks. It has never failed before. The Firefox/Chrome MCP failures are pre-existing flakes.

Details

Across the three CI reports on this PR, one failure is caused by the change and the rest are known flakes.

Caused by this PR

  • [installation tests] › playwright-packages-install-behavior.spec.ts:99 › @playwright/test should work — fails identically on ubuntu-latest, windows-latest and macos-latest. It runs npx playwright test failing.spec.js with DEBUG=pw:api and asserts expect(result4).toContain('expect.toHaveText started') (line 117). This PR changes exactly how that pw:api name is produced: channelOwner.ts now falls back to the explicit title for internal methods (apiName.includes('._')), and the matchers pass this.title into locator._expect instead of the runner instrumentation plumbing apiName = expect.toHaveText. If the fallback title isn't the short expect.toHaveText form, that log line no longer matches. The test-results DB backs this up: 1 failure in 992 runs, and that single failure is this PR's SHA 3f1f652 — no prior history on any other SHA. Worth confirming the inferred name for expect matchers still renders as expect.toHaveText.

Pre-existing flake / infra

  • [firefox] › mcp/annotate.spec.ts:446 › should switch screencast to -s session on show --annotate — pre-existing flake: failed 45 of 3461 runs (~1.3%) across 45 SHAs and 30 PRs unrelated to this one.
  • [chrome] › mcp/annotate.spec.ts:57 › should capture multiple screenshots in one annotation — same story: 10 failures over 3452 runs across 7 PRs.
  • [firefox] › mcp/cli-mouse.spec.ts:38 › mousewheel — rarer, but it fails where this PR can't be responsible: two push runs on unrelated SHAs predating this branch — beaf223 (2026-07-29) and 9a19b13 (2026-08-04) — plus this run.

None of the MCP screencast, annotation or mouse-wheel paths are touched by the matcher-title change, and the 5 tests marked flaky in "tests 1" all passed on retry within the run.

Triaged by the Playwright bot - agent run

@dgozman
Dmitry Gozman (dgozman) merged commit e4a6eeb into microsoft:mainAug 14, 2026
44 of 45 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@dgozman@Skn0tt